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