111fccf17Sopenharmony_ci/* 211fccf17Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 311fccf17Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 411fccf17Sopenharmony_ci * you may not use this file except in compliance with the License. 511fccf17Sopenharmony_ci * You may obtain a copy of the License at 611fccf17Sopenharmony_ci * 711fccf17Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 811fccf17Sopenharmony_ci * 911fccf17Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1011fccf17Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1111fccf17Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1211fccf17Sopenharmony_ci * See the License for the specific language governing permissions and 1311fccf17Sopenharmony_ci * limitations under the License. 1411fccf17Sopenharmony_ci */ 1511fccf17Sopenharmony_ci 1611fccf17Sopenharmony_ci#include "hril_data.h" 1711fccf17Sopenharmony_ci 1811fccf17Sopenharmony_ci#include "hril_notification.h" 1911fccf17Sopenharmony_ci#include "hril_request.h" 2011fccf17Sopenharmony_ci 2111fccf17Sopenharmony_cinamespace OHOS { 2211fccf17Sopenharmony_cinamespace Telephony { 2311fccf17Sopenharmony_cinamespace { 2411fccf17Sopenharmony_ciconst int32_t HRILOPS_ACTIVE_VERSION = 13; 2511fccf17Sopenharmony_ci} 2611fccf17Sopenharmony_ci 2711fccf17Sopenharmony_ciHRilData::HRilData(int32_t slotId) : HRilBase(slotId) 2811fccf17Sopenharmony_ci{ 2911fccf17Sopenharmony_ci AddHandlerToMap(); 3011fccf17Sopenharmony_ci} 3111fccf17Sopenharmony_ci 3211fccf17Sopenharmony_ciHRilData::~HRilData() 3311fccf17Sopenharmony_ci{ 3411fccf17Sopenharmony_ci dataFuncs_ = nullptr; 3511fccf17Sopenharmony_ci} 3611fccf17Sopenharmony_ci 3711fccf17Sopenharmony_cibool HRilData::IsDataResponse(uint32_t code) 3811fccf17Sopenharmony_ci{ 3911fccf17Sopenharmony_ci return ((code >= HREQ_DATA_BASE) && (code < HREQ_NETWORK_BASE)); 4011fccf17Sopenharmony_ci} 4111fccf17Sopenharmony_ci 4211fccf17Sopenharmony_cibool HRilData::IsDataNotification(uint32_t code) 4311fccf17Sopenharmony_ci{ 4411fccf17Sopenharmony_ci return ((code >= HNOTI_DATA_BASE) && (code < HNOTI_NETWORK_BASE)); 4511fccf17Sopenharmony_ci} 4611fccf17Sopenharmony_ci 4711fccf17Sopenharmony_cibool HRilData::IsDataRespOrNotify(uint32_t code) 4811fccf17Sopenharmony_ci{ 4911fccf17Sopenharmony_ci return IsDataResponse(code) || IsDataNotification(code); 5011fccf17Sopenharmony_ci} 5111fccf17Sopenharmony_ci 5211fccf17Sopenharmony_civoid HRilData::AddHandlerToMap() 5311fccf17Sopenharmony_ci{ 5411fccf17Sopenharmony_ci // Notification 5511fccf17Sopenharmony_ci notiMemberFuncMap_[HNOTI_DATA_PDP_CONTEXT_LIST_UPDATED] = 5611fccf17Sopenharmony_ci [this](int32_t notifyType, HRilErrNumber error, const void *response, 5711fccf17Sopenharmony_ci size_t responseLen) { return PdpContextListUpdated(notifyType, error, response, responseLen); }; 5811fccf17Sopenharmony_ci notiMemberFuncMap_[HNOTI_DATA_LINK_CAPABILITY_UPDATED] = 5911fccf17Sopenharmony_ci [this](int32_t notifyType, HRilErrNumber error, const void *response, 6011fccf17Sopenharmony_ci size_t responseLen) { return DataLinkCapabilityUpdated(notifyType, error, response, responseLen); }; 6111fccf17Sopenharmony_ci // response 6211fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_SET_INIT_APN_INFO] = 6311fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 6411fccf17Sopenharmony_ci size_t responseLen) { return SetInitApnInfoResponse(requestNum, responseInfo, response, responseLen); }; 6511fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_SET_DATA_PROFILE_INFO] = 6611fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 6711fccf17Sopenharmony_ci size_t responseLen) { return SetDataProfileInfoResponse(requestNum, responseInfo, response, responseLen); }; 6811fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_ACTIVATE_PDP_CONTEXT] = 6911fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 7011fccf17Sopenharmony_ci size_t responseLen) { return ActivatePdpContextResponse(requestNum, responseInfo, response, responseLen); }; 7111fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_DEACTIVATE_PDP_CONTEXT] = 7211fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 7311fccf17Sopenharmony_ci size_t responseLen) { return DeactivatePdpContextResponse(requestNum, responseInfo, response, responseLen); }; 7411fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_GET_PDP_CONTEXT_LIST] = 7511fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 7611fccf17Sopenharmony_ci size_t responseLen) { return GetPdpContextListResponse(requestNum, responseInfo, response, responseLen); }; 7711fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_GET_LINK_BANDWIDTH_INFO] = 7811fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 7911fccf17Sopenharmony_ci size_t responseLen) { return GetLinkBandwidthInfoResponse(requestNum, responseInfo, response, responseLen); }; 8011fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE] = [this](int32_t requestNum, 8111fccf17Sopenharmony_ci HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) { 8211fccf17Sopenharmony_ci return SetLinkBandwidthReportingRuleResponse(requestNum, responseInfo, response, responseLen); 8311fccf17Sopenharmony_ci }; 8411fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_SET_DATA_PERMITTED] = 8511fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 8611fccf17Sopenharmony_ci size_t responseLen) { return SetDataPermittedResponse(requestNum, responseInfo, response, responseLen); }; 8711fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_GET_LINK_CAPABILITY] = 8811fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 8911fccf17Sopenharmony_ci size_t responseLen) { return GetLinkCapabilityResponse(requestNum, responseInfo, response, responseLen); }; 9011fccf17Sopenharmony_ci respMemberFuncMap_[HREQ_DATA_CLEAN_ALL_CONNECTIONS] = 9111fccf17Sopenharmony_ci [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, 9211fccf17Sopenharmony_ci size_t responseLen) { return CleanAllConnectionsResponse(requestNum, responseInfo, response, responseLen); }; 9311fccf17Sopenharmony_ci} 9411fccf17Sopenharmony_ci 9511fccf17Sopenharmony_civoid HRilData::SwitchRilDataToHal(const HRilDataCallResponse *response, HDI::Ril::V1_1::SetupDataCallResultInfo &result) 9611fccf17Sopenharmony_ci{ 9711fccf17Sopenharmony_ci if (response == nullptr) { 9811fccf17Sopenharmony_ci TELEPHONY_LOGE("SwitchRilDataToHal response is null!!!"); 9911fccf17Sopenharmony_ci return; 10011fccf17Sopenharmony_ci } 10111fccf17Sopenharmony_ci result.active = response->active; 10211fccf17Sopenharmony_ci result.reason = response->reason; 10311fccf17Sopenharmony_ci result.retryTime = response->retryTime; 10411fccf17Sopenharmony_ci result.cid = response->cid; 10511fccf17Sopenharmony_ci result.pduSessionId = response->pduSessionId; 10611fccf17Sopenharmony_ci result.maxTransferUnit = response->maxTransferUnit; 10711fccf17Sopenharmony_ci result.address = (response->address == nullptr) ? "" : response->address; 10811fccf17Sopenharmony_ci result.type = (response->type == nullptr) ? "" : response->type; 10911fccf17Sopenharmony_ci result.dns = (response->dns == nullptr) ? "" : response->dns; 11011fccf17Sopenharmony_ci result.dnsSec = (response->dnsSec == nullptr) ? "" : response->dnsSec; 11111fccf17Sopenharmony_ci result.netPortName = (response->netPortName == nullptr) ? "" : response->netPortName; 11211fccf17Sopenharmony_ci result.gateway = (response->gateway == nullptr) ? "" : response->gateway; 11311fccf17Sopenharmony_ci result.pCscfPrimAddr = (response->pCscfPrimAddr == nullptr) ? "" : response->pCscfPrimAddr; 11411fccf17Sopenharmony_ci result.pCscfSecAddr = (response->pCscfSecAddr == nullptr) ? "" : response->pCscfSecAddr; 11511fccf17Sopenharmony_ci} 11611fccf17Sopenharmony_ci 11711fccf17Sopenharmony_civoid HRilData::SwitchHRilDataListToHal( 11811fccf17Sopenharmony_ci const void *response, size_t responseLen, std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> &dcResultList) 11911fccf17Sopenharmony_ci{ 12011fccf17Sopenharmony_ci if (response == nullptr) { 12111fccf17Sopenharmony_ci TELEPHONY_LOGE("SwitchHRilDataListToHal response is null!!!"); 12211fccf17Sopenharmony_ci return; 12311fccf17Sopenharmony_ci } 12411fccf17Sopenharmony_ci size_t dataNum = responseLen / sizeof(HRilDataCallResponse); 12511fccf17Sopenharmony_ci const HRilDataCallResponse *dataCallResponse = (const HRilDataCallResponse *)response; 12611fccf17Sopenharmony_ci dcResultList.resize(dataNum); 12711fccf17Sopenharmony_ci 12811fccf17Sopenharmony_ci size_t i = 0; 12911fccf17Sopenharmony_ci while (i < dataNum) { 13011fccf17Sopenharmony_ci SwitchRilDataToHal(&dataCallResponse[i], dcResultList[i]); 13111fccf17Sopenharmony_ci i++; 13211fccf17Sopenharmony_ci } 13311fccf17Sopenharmony_ci} 13411fccf17Sopenharmony_ci 13511fccf17Sopenharmony_ciint32_t HRilData::DeactivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo) 13611fccf17Sopenharmony_ci{ 13711fccf17Sopenharmony_ci HRilDataInfo dataInfo = {}; 13811fccf17Sopenharmony_ci dataInfo.cid = uniInfo.gsmIndex; 13911fccf17Sopenharmony_ci dataInfo.reason = uniInfo.arg1; 14011fccf17Sopenharmony_ci return RequestVendor( 14111fccf17Sopenharmony_ci serialId, HREQ_DATA_DEACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::DeactivatePdpContext, &dataInfo); 14211fccf17Sopenharmony_ci} 14311fccf17Sopenharmony_ci 14411fccf17Sopenharmony_ciint32_t HRilData::ActivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataCallInfo &dataCallInfo) 14511fccf17Sopenharmony_ci{ 14611fccf17Sopenharmony_ci HRilDataInfo dataInfo; 14711fccf17Sopenharmony_ci dataInfo.apn = StringToCString(dataCallInfo.dataProfileInfo.apn); 14811fccf17Sopenharmony_ci dataInfo.type = StringToCString(dataCallInfo.dataProfileInfo.protocol); 14911fccf17Sopenharmony_ci dataInfo.roamingType = StringToCString(dataCallInfo.dataProfileInfo.roamingProtocol); 15011fccf17Sopenharmony_ci dataInfo.userName = StringToCString(dataCallInfo.dataProfileInfo.userName); 15111fccf17Sopenharmony_ci dataInfo.password = StringToCString(dataCallInfo.dataProfileInfo.password); 15211fccf17Sopenharmony_ci dataInfo.verType = dataCallInfo.dataProfileInfo.authenticationType; 15311fccf17Sopenharmony_ci dataInfo.rat = dataCallInfo.radioTechnology; 15411fccf17Sopenharmony_ci dataInfo.roamingEnable = dataCallInfo.roamingAllowed ? 1 : 0; 15511fccf17Sopenharmony_ci return RequestVendor( 15611fccf17Sopenharmony_ci serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::ActivatePdpContext, &dataInfo); 15711fccf17Sopenharmony_ci} 15811fccf17Sopenharmony_ci 15911fccf17Sopenharmony_ciint32_t HRilData::ActivatePdpContextWithApnTypes(int32_t serialId, 16011fccf17Sopenharmony_ci const OHOS::HDI::Ril::V1_3::DataCallInfoWithApnTypes &dataCallInfoWithApnTypes, const int32_t version) 16111fccf17Sopenharmony_ci{ 16211fccf17Sopenharmony_ci if (version < HRILOPS_ACTIVE_VERSION) { 16311fccf17Sopenharmony_ci TELEPHONY_LOGI("Call V1_1 ActivatePdpContext"); 16411fccf17Sopenharmony_ci OHOS::HDI::Ril::V1_1::DataCallInfo dataCallInfo; 16511fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.apn = dataCallInfoWithApnTypes.dataProfileInfo.apn; 16611fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.protocol = dataCallInfoWithApnTypes.dataProfileInfo.protocol; 16711fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.roamingProtocol = dataCallInfoWithApnTypes.dataProfileInfo.roamingProtocol; 16811fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.userName = dataCallInfoWithApnTypes.dataProfileInfo.userName; 16911fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.password = dataCallInfoWithApnTypes.dataProfileInfo.password; 17011fccf17Sopenharmony_ci dataCallInfo.dataProfileInfo.authenticationType = dataCallInfoWithApnTypes.dataProfileInfo.authenticationType; 17111fccf17Sopenharmony_ci dataCallInfo.isRoaming = dataCallInfoWithApnTypes.isRoaming; 17211fccf17Sopenharmony_ci dataCallInfo.roamingAllowed = dataCallInfoWithApnTypes.roamingAllowed; 17311fccf17Sopenharmony_ci dataCallInfo.radioTechnology = dataCallInfoWithApnTypes.radioTechnology; 17411fccf17Sopenharmony_ci return ActivatePdpContext(serialId, dataCallInfo); 17511fccf17Sopenharmony_ci } 17611fccf17Sopenharmony_ci TELEPHONY_LOGI("Call V1_3 ActivatePdpContextWithApnTypes"); 17711fccf17Sopenharmony_ci HRilDataInfoWithApnTypes dataInfoWithApnTypes; 17811fccf17Sopenharmony_ci dataInfoWithApnTypes.apn = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.apn); 17911fccf17Sopenharmony_ci dataInfoWithApnTypes.type = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.protocol); 18011fccf17Sopenharmony_ci dataInfoWithApnTypes.roamingType = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.roamingProtocol); 18111fccf17Sopenharmony_ci dataInfoWithApnTypes.userName = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.userName); 18211fccf17Sopenharmony_ci dataInfoWithApnTypes.password = StringToCString(dataCallInfoWithApnTypes.dataProfileInfo.password); 18311fccf17Sopenharmony_ci dataInfoWithApnTypes.verType = dataCallInfoWithApnTypes.dataProfileInfo.authenticationType; 18411fccf17Sopenharmony_ci dataInfoWithApnTypes.rat = dataCallInfoWithApnTypes.radioTechnology; 18511fccf17Sopenharmony_ci dataInfoWithApnTypes.roamingEnable = dataCallInfoWithApnTypes.roamingAllowed ? 1 : 0; 18611fccf17Sopenharmony_ci dataInfoWithApnTypes.supportedApnTypesBitmap = dataCallInfoWithApnTypes.dataProfileInfo.supportedApnTypesBitmap; 18711fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_, 18811fccf17Sopenharmony_ci &HRilDataReq::ActivatePdpContextWithApnTypes, &dataInfoWithApnTypes); 18911fccf17Sopenharmony_ci} 19011fccf17Sopenharmony_ci 19111fccf17Sopenharmony_ciint32_t HRilData::GetPdpContextList(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo) 19211fccf17Sopenharmony_ci{ 19311fccf17Sopenharmony_ci TELEPHONY_LOGD("serial %{public}d on %{public}d", uniInfo.serial, uniInfo.flag); 19411fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_GET_PDP_CONTEXT_LIST, dataFuncs_, &HRilDataReq::GetPdpContextList); 19511fccf17Sopenharmony_ci} 19611fccf17Sopenharmony_ci 19711fccf17Sopenharmony_ciint32_t HRilData::SetInitApnInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileDataInfo) 19811fccf17Sopenharmony_ci{ 19911fccf17Sopenharmony_ci HRilDataInfo dataInfo = BuildDataInfo(dataProfileDataInfo); 20011fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_SET_INIT_APN_INFO, dataFuncs_, &HRilDataReq::SetInitApnInfo, &dataInfo); 20111fccf17Sopenharmony_ci} 20211fccf17Sopenharmony_ci 20311fccf17Sopenharmony_ciint32_t HRilData::SendDataPerformanceMode( 20411fccf17Sopenharmony_ci int32_t serialId, const OHOS::HDI::Ril::V1_1::DataPerformanceInfo &dataPerformanceInfo) 20511fccf17Sopenharmony_ci{ 20611fccf17Sopenharmony_ci HRilDataPerformanceInfo hrilDataPerformanceInfo; 20711fccf17Sopenharmony_ci hrilDataPerformanceInfo.performanceEnable = dataPerformanceInfo.performanceEnable; 20811fccf17Sopenharmony_ci hrilDataPerformanceInfo.enforce = dataPerformanceInfo.enforce; 20911fccf17Sopenharmony_ci TELEPHONY_LOGI("SendDataPerformanceMode: performanceEnable=%{public}d enforce=%{public}d", 21011fccf17Sopenharmony_ci hrilDataPerformanceInfo.performanceEnable, hrilDataPerformanceInfo.enforce); 21111fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_SEND_DATA_PERFORMANCE_MODE, dataFuncs_, 21211fccf17Sopenharmony_ci &HRilDataReq::SendDataPerformanceMode, &hrilDataPerformanceInfo); 21311fccf17Sopenharmony_ci} 21411fccf17Sopenharmony_ci 21511fccf17Sopenharmony_ciint32_t HRilData::SendDataSleepMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataSleepInfo &dataSleepInfo) 21611fccf17Sopenharmony_ci{ 21711fccf17Sopenharmony_ci HRilDataSleepInfo hrilDataSleepInfo; 21811fccf17Sopenharmony_ci hrilDataSleepInfo.sleepEnable = dataSleepInfo.sleepEnable; 21911fccf17Sopenharmony_ci TELEPHONY_LOGI("SendDataSleepMode: sleepEnable=%{public}d", hrilDataSleepInfo.sleepEnable); 22011fccf17Sopenharmony_ci return RequestVendor( 22111fccf17Sopenharmony_ci serialId, HREQ_DATA_SEND_DATA_SLEEP_MODE, dataFuncs_, &HRilDataReq::SendDataSleepMode, &hrilDataSleepInfo); 22211fccf17Sopenharmony_ci} 22311fccf17Sopenharmony_ci 22411fccf17Sopenharmony_ciint32_t HRilData::SetDataProfileInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfilesInfo &dataProfilesInfo) 22511fccf17Sopenharmony_ci{ 22611fccf17Sopenharmony_ci int32_t size = dataProfilesInfo.profilesSize; 22711fccf17Sopenharmony_ci if (size <= 0 || size != static_cast<int32_t>(dataProfilesInfo.profiles.size())) { 22811fccf17Sopenharmony_ci TELEPHONY_LOGE("RilAdapter failed to do ReadFromParcel!"); 22911fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 23011fccf17Sopenharmony_ci } 23111fccf17Sopenharmony_ci std::unique_ptr<HRilDataInfo[]> dataInfos = std::make_unique<HRilDataInfo[]>(size); 23211fccf17Sopenharmony_ci for (int32_t i = 0; i < size; i++) { 23311fccf17Sopenharmony_ci dataInfos[i] = BuildDataInfo(dataProfilesInfo.profiles[i]); 23411fccf17Sopenharmony_ci } 23511fccf17Sopenharmony_ci return RequestVendor( 23611fccf17Sopenharmony_ci serialId, HREQ_DATA_SET_DATA_PROFILE_INFO, dataFuncs_, &HRilDataReq::SetDataProfileInfo, dataInfos.get(), size); 23711fccf17Sopenharmony_ci} 23811fccf17Sopenharmony_ci 23911fccf17Sopenharmony_ciHRilDataInfo HRilData::BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileInfo) 24011fccf17Sopenharmony_ci{ 24111fccf17Sopenharmony_ci HRilDataInfo dataInfo; 24211fccf17Sopenharmony_ci dataInfo.cid = dataProfileInfo.profileId; 24311fccf17Sopenharmony_ci dataInfo.apn = StringToCString(dataProfileInfo.apn); 24411fccf17Sopenharmony_ci dataInfo.type = StringToCString(dataProfileInfo.protocol); 24511fccf17Sopenharmony_ci dataInfo.roamingType = StringToCString(dataProfileInfo.roamingProtocol); 24611fccf17Sopenharmony_ci dataInfo.userName = StringToCString(dataProfileInfo.userName); 24711fccf17Sopenharmony_ci dataInfo.password = StringToCString(dataProfileInfo.password); 24811fccf17Sopenharmony_ci dataInfo.verType = dataProfileInfo.authenticationType; 24911fccf17Sopenharmony_ci return dataInfo; 25011fccf17Sopenharmony_ci} 25111fccf17Sopenharmony_ci 25211fccf17Sopenharmony_ciint32_t HRilData::GetLinkCapability(int32_t serialId) 25311fccf17Sopenharmony_ci{ 25411fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_GET_LINK_CAPABILITY, dataFuncs_, &HRilDataReq::GetLinkCapability); 25511fccf17Sopenharmony_ci} 25611fccf17Sopenharmony_ci 25711fccf17Sopenharmony_ciint32_t HRilData::GetLinkBandwidthInfo(int32_t serialId, int32_t cid) 25811fccf17Sopenharmony_ci{ 25911fccf17Sopenharmony_ci return RequestVendor( 26011fccf17Sopenharmony_ci serialId, HREQ_DATA_GET_LINK_BANDWIDTH_INFO, dataFuncs_, &HRilDataReq::GetLinkBandwidthInfo, cid); 26111fccf17Sopenharmony_ci} 26211fccf17Sopenharmony_ci 26311fccf17Sopenharmony_ciint32_t HRilData::SetLinkBandwidthReportingRule( 26411fccf17Sopenharmony_ci int32_t serialId, const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule &linkBandwidthRule) 26511fccf17Sopenharmony_ci{ 26611fccf17Sopenharmony_ci HRilLinkBandwidthReportingRule hLinkBandwidthRule; 26711fccf17Sopenharmony_ci hLinkBandwidthRule.rat = (RatType)linkBandwidthRule.rat; 26811fccf17Sopenharmony_ci hLinkBandwidthRule.delayMs = linkBandwidthRule.delayMs; 26911fccf17Sopenharmony_ci hLinkBandwidthRule.delayUplinkKbps = linkBandwidthRule.delayUplinkKbps; 27011fccf17Sopenharmony_ci hLinkBandwidthRule.delayDownlinkKbps = linkBandwidthRule.delayDownlinkKbps; 27111fccf17Sopenharmony_ci hLinkBandwidthRule.maximumUplinkKbpsSize = linkBandwidthRule.maximumUplinkKbpsSize; 27211fccf17Sopenharmony_ci hLinkBandwidthRule.maximumDownlinkKbpsSize = linkBandwidthRule.maximumDownlinkKbpsSize; 27311fccf17Sopenharmony_ci hLinkBandwidthRule.maximumUplinkKbps = new int32_t[linkBandwidthRule.maximumUplinkKbpsSize]; 27411fccf17Sopenharmony_ci hLinkBandwidthRule.maximumDownlinkKbps = new int32_t[linkBandwidthRule.maximumDownlinkKbpsSize]; 27511fccf17Sopenharmony_ci TELEPHONY_LOGI("maximumUplinkKbpsSize:%{public}d, maximumDownlinkKbpsSize:%{public}d", 27611fccf17Sopenharmony_ci linkBandwidthRule.maximumUplinkKbpsSize, linkBandwidthRule.maximumDownlinkKbpsSize); 27711fccf17Sopenharmony_ci for (int32_t i = 0; i < hLinkBandwidthRule.maximumUplinkKbpsSize; i++) { 27811fccf17Sopenharmony_ci hLinkBandwidthRule.maximumUplinkKbps[i] = linkBandwidthRule.maximumUplinkKbps[i]; 27911fccf17Sopenharmony_ci } 28011fccf17Sopenharmony_ci for (int32_t i = 0; i < hLinkBandwidthRule.maximumDownlinkKbpsSize; i++) { 28111fccf17Sopenharmony_ci hLinkBandwidthRule.maximumDownlinkKbps[i] = linkBandwidthRule.maximumDownlinkKbps[i]; 28211fccf17Sopenharmony_ci } 28311fccf17Sopenharmony_ci int32_t resutlt = RequestVendor(serialId, HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE, dataFuncs_, 28411fccf17Sopenharmony_ci &HRilDataReq::SetLinkBandwidthReportingRule, &hLinkBandwidthRule); 28511fccf17Sopenharmony_ci delete[] hLinkBandwidthRule.maximumUplinkKbps; 28611fccf17Sopenharmony_ci delete[] hLinkBandwidthRule.maximumDownlinkKbps; 28711fccf17Sopenharmony_ci return resutlt; 28811fccf17Sopenharmony_ci} 28911fccf17Sopenharmony_ci 29011fccf17Sopenharmony_ciint32_t HRilData::SetDataPermitted(int32_t serialId, int32_t dataPermitted) 29111fccf17Sopenharmony_ci{ 29211fccf17Sopenharmony_ci return RequestVendor( 29311fccf17Sopenharmony_ci serialId, HREQ_DATA_SET_DATA_PERMITTED, dataFuncs_, &HRilDataReq::SetDataPermitted, dataPermitted); 29411fccf17Sopenharmony_ci} 29511fccf17Sopenharmony_ci 29611fccf17Sopenharmony_ciint32_t HRilData::CleanAllConnections(int32_t serialId) 29711fccf17Sopenharmony_ci{ 29811fccf17Sopenharmony_ci return RequestVendor(serialId, HREQ_DATA_CLEAN_ALL_CONNECTIONS, dataFuncs_, &HRilDataReq::CleanAllConnections); 29911fccf17Sopenharmony_ci} 30011fccf17Sopenharmony_ci 30111fccf17Sopenharmony_ciint32_t HRilData::CleanAllConnectionsResponse( 30211fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 30311fccf17Sopenharmony_ci{ 30411fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::CleanAllConnectionsResponse); 30511fccf17Sopenharmony_ci} 30611fccf17Sopenharmony_ci 30711fccf17Sopenharmony_ciint32_t HRilData::DeactivatePdpContextResponse( 30811fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 30911fccf17Sopenharmony_ci{ 31011fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::DeactivatePdpContextResponse); 31111fccf17Sopenharmony_ci} 31211fccf17Sopenharmony_ci 31311fccf17Sopenharmony_ciint32_t HRilData::ActivatePdpContextResponse( 31411fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 31511fccf17Sopenharmony_ci{ 31611fccf17Sopenharmony_ci if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) { 31711fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 31811fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 31911fccf17Sopenharmony_ci } 32011fccf17Sopenharmony_ci HDI::Ril::V1_1::SetupDataCallResultInfo result = {}; 32111fccf17Sopenharmony_ci result.reason = HRIL_ERROR_UNSPECIFIED_RSN; 32211fccf17Sopenharmony_ci result.cid = -1; 32311fccf17Sopenharmony_ci if (response != nullptr) { 32411fccf17Sopenharmony_ci SwitchRilDataToHal((HRilDataCallResponse *)response, result); 32511fccf17Sopenharmony_ci } 32611fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ActivatePdpContextResponse, result); 32711fccf17Sopenharmony_ci} 32811fccf17Sopenharmony_ci 32911fccf17Sopenharmony_ciint32_t HRilData::GetPdpContextListResponse( 33011fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 33111fccf17Sopenharmony_ci{ 33211fccf17Sopenharmony_ci if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) { 33311fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 33411fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 33511fccf17Sopenharmony_ci } 33611fccf17Sopenharmony_ci HDI::Ril::V1_1::DataCallResultList dataCallResultList = {}; 33711fccf17Sopenharmony_ci if (response != nullptr) { 33811fccf17Sopenharmony_ci SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList); 33911fccf17Sopenharmony_ci } 34011fccf17Sopenharmony_ci dataCallResultList.size = dataCallResultList.dcList.size(); 34111fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPdpContextListResponse, dataCallResultList); 34211fccf17Sopenharmony_ci} 34311fccf17Sopenharmony_ci 34411fccf17Sopenharmony_ciint32_t HRilData::SetInitApnInfoResponse( 34511fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 34611fccf17Sopenharmony_ci{ 34711fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetInitApnInfoResponse); 34811fccf17Sopenharmony_ci} 34911fccf17Sopenharmony_ci 35011fccf17Sopenharmony_ciint32_t HRilData::SetDataProfileInfoResponse( 35111fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 35211fccf17Sopenharmony_ci{ 35311fccf17Sopenharmony_ci return HRIL_ERR_SUCCESS; 35411fccf17Sopenharmony_ci} 35511fccf17Sopenharmony_ci 35611fccf17Sopenharmony_ciint32_t HRilData::SetLinkBandwidthReportingRuleResponse( 35711fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 35811fccf17Sopenharmony_ci{ 35911fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLinkBandwidthReportingRuleResponse); 36011fccf17Sopenharmony_ci} 36111fccf17Sopenharmony_ci 36211fccf17Sopenharmony_ciint32_t HRilData::PdpContextListUpdated( 36311fccf17Sopenharmony_ci int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen) 36411fccf17Sopenharmony_ci{ 36511fccf17Sopenharmony_ci if ((response == nullptr) || (responseLen % sizeof(HRilDataCallResponse)) != 0) { 36611fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 36711fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 36811fccf17Sopenharmony_ci } 36911fccf17Sopenharmony_ci HDI::Ril::V1_1::DataCallResultList dataCallResultList = {}; 37011fccf17Sopenharmony_ci SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList); 37111fccf17Sopenharmony_ci dataCallResultList.size = dataCallResultList.dcList.size(); 37211fccf17Sopenharmony_ci return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::PdpContextListUpdated, dataCallResultList); 37311fccf17Sopenharmony_ci} 37411fccf17Sopenharmony_ci 37511fccf17Sopenharmony_ciint32_t HRilData::DataLinkCapabilityUpdated( 37611fccf17Sopenharmony_ci int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen) 37711fccf17Sopenharmony_ci{ 37811fccf17Sopenharmony_ci if ((response == nullptr) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) { 37911fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 38011fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 38111fccf17Sopenharmony_ci } 38211fccf17Sopenharmony_ci HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 }; 38311fccf17Sopenharmony_ci const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response); 38411fccf17Sopenharmony_ci dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps; 38511fccf17Sopenharmony_ci dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps; 38611fccf17Sopenharmony_ci dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps; 38711fccf17Sopenharmony_ci dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps; 38811fccf17Sopenharmony_ci return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::DataLinkCapabilityUpdated, dataLinkCapability); 38911fccf17Sopenharmony_ci} 39011fccf17Sopenharmony_ci 39111fccf17Sopenharmony_ciint32_t HRilData::GetLinkCapabilityResponse( 39211fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 39311fccf17Sopenharmony_ci{ 39411fccf17Sopenharmony_ci if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) { 39511fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 39611fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 39711fccf17Sopenharmony_ci } 39811fccf17Sopenharmony_ci HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 }; 39911fccf17Sopenharmony_ci if (response != nullptr) { 40011fccf17Sopenharmony_ci const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response); 40111fccf17Sopenharmony_ci dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps; 40211fccf17Sopenharmony_ci dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps; 40311fccf17Sopenharmony_ci dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps; 40411fccf17Sopenharmony_ci dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps; 40511fccf17Sopenharmony_ci } 40611fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkCapabilityResponse, dataLinkCapability); 40711fccf17Sopenharmony_ci} 40811fccf17Sopenharmony_ci 40911fccf17Sopenharmony_ciint32_t HRilData::GetLinkBandwidthInfoResponse( 41011fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 41111fccf17Sopenharmony_ci{ 41211fccf17Sopenharmony_ci if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilLinkBandwidthInfo)) != 0) { 41311fccf17Sopenharmony_ci TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen); 41411fccf17Sopenharmony_ci return HRIL_ERR_INVALID_PARAMETER; 41511fccf17Sopenharmony_ci } 41611fccf17Sopenharmony_ci HDI::Ril::V1_1::DataLinkBandwidthInfo uplinkAndDownlinkBandwidthInfo = {}; 41711fccf17Sopenharmony_ci if (response != nullptr) { 41811fccf17Sopenharmony_ci const HRilLinkBandwidthInfo *result = static_cast<const HRilLinkBandwidthInfo *>(response); 41911fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.cid = result->cid; 42011fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.qi = result->qi; 42111fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.dlGfbr = result->dlGfbr; 42211fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.ulGfbr = result->ulGfbr; 42311fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.dlMfbr = result->dlMfbr; 42411fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.ulMfbr = result->ulMfbr; 42511fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.ulSambr = result->ulSambr; 42611fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.dlSambr = result->dlSambr; 42711fccf17Sopenharmony_ci uplinkAndDownlinkBandwidthInfo.averagingWindow = result->averagingWindow; 42811fccf17Sopenharmony_ci } 42911fccf17Sopenharmony_ci return Response( 43011fccf17Sopenharmony_ci responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkBandwidthInfoResponse, uplinkAndDownlinkBandwidthInfo); 43111fccf17Sopenharmony_ci} 43211fccf17Sopenharmony_ci 43311fccf17Sopenharmony_ciint32_t HRilData::SetDataPermittedResponse( 43411fccf17Sopenharmony_ci int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) 43511fccf17Sopenharmony_ci{ 43611fccf17Sopenharmony_ci return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDataPermittedResponse); 43711fccf17Sopenharmony_ci} 43811fccf17Sopenharmony_ci 43911fccf17Sopenharmony_civoid HRilData::RegisterDataFuncs(const HRilDataReq *dataFuncs) 44011fccf17Sopenharmony_ci{ 44111fccf17Sopenharmony_ci dataFuncs_ = dataFuncs; 44211fccf17Sopenharmony_ci} 44311fccf17Sopenharmony_ci} // namespace Telephony 44411fccf17Sopenharmony_ci} // namespace OHOS 445