• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "hril_data.h"
17 
18 #include "hril_notification.h"
19 #include "hril_request.h"
20 
21 namespace OHOS {
22 namespace Telephony {
HRilData(int32_t slotId)23 HRilData::HRilData(int32_t slotId) : HRilBase(slotId)
24 {
25     AddHandlerToMap();
26 }
27 
~HRilData()28 HRilData::~HRilData()
29 {
30     dataFuncs_ = nullptr;
31 }
32 
IsDataResponse(uint32_t code)33 bool HRilData::IsDataResponse(uint32_t code)
34 {
35     return ((code >= HREQ_DATA_BASE) && (code < HREQ_NETWORK_BASE));
36 }
37 
IsDataNotification(uint32_t code)38 bool HRilData::IsDataNotification(uint32_t code)
39 {
40     return ((code >= HNOTI_DATA_BASE) && (code < HNOTI_NETWORK_BASE));
41 }
42 
IsDataRespOrNotify(uint32_t code)43 bool HRilData::IsDataRespOrNotify(uint32_t code)
44 {
45     return IsDataResponse(code) || IsDataNotification(code);
46 }
47 
AddHandlerToMap()48 void HRilData::AddHandlerToMap()
49 {
50     // Notification
51     notiMemberFuncMap_[HNOTI_DATA_PDP_CONTEXT_LIST_UPDATED] = &HRilData::PdpContextListUpdated;
52     notiMemberFuncMap_[HNOTI_DATA_LINK_CAPABILITY_UPDATED] = &HRilData::DataLinkCapabilityUpdated;
53     // response
54     respMemberFuncMap_[HREQ_DATA_SET_INIT_APN_INFO] = &HRilData::SetInitApnInfoResponse;
55     respMemberFuncMap_[HREQ_DATA_SET_DATA_PROFILE_INFO] = &HRilData::SetDataProfileInfoResponse;
56     respMemberFuncMap_[HREQ_DATA_ACTIVATE_PDP_CONTEXT] = &HRilData::ActivatePdpContextResponse;
57     respMemberFuncMap_[HREQ_DATA_DEACTIVATE_PDP_CONTEXT] = &HRilData::DeactivatePdpContextResponse;
58     respMemberFuncMap_[HREQ_DATA_GET_PDP_CONTEXT_LIST] = &HRilData::GetPdpContextListResponse;
59     respMemberFuncMap_[HREQ_DATA_GET_LINK_BANDWIDTH_INFO] = &HRilData::GetLinkBandwidthInfoResponse;
60     respMemberFuncMap_[HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE] = &HRilData::SetLinkBandwidthReportingRuleResponse;
61     respMemberFuncMap_[HREQ_DATA_SET_DATA_PERMITTED] = &HRilData::SetDataPermittedResponse;
62     respMemberFuncMap_[HREQ_DATA_GET_LINK_CAPABILITY] = &HRilData::GetLinkCapabilityResponse;
63     respMemberFuncMap_[HREQ_DATA_CLEAN_ALL_CONNECTIONS] = &HRilData::CleanAllConnectionsResponse;
64 }
65 
SwitchRilDataToHal(const HRilDataCallResponse * response,HDI::Ril::V1_1::SetupDataCallResultInfo & result)66 void HRilData::SwitchRilDataToHal(const HRilDataCallResponse *response, HDI::Ril::V1_1::SetupDataCallResultInfo &result)
67 {
68     if (response == nullptr) {
69         TELEPHONY_LOGE("SwitchRilDataToHal response is null!!!");
70         return;
71     }
72     result.active = response->active;
73     result.reason = response->reason;
74     result.retryTime = response->retryTime;
75     result.cid = response->cid;
76     result.pduSessionId = response->pduSessionId;
77     result.maxTransferUnit = response->maxTransferUnit;
78     result.address = (response->address == nullptr) ? "" : response->address;
79     result.type = (response->type == nullptr) ? "" : response->type;
80     result.dns = (response->dns == nullptr) ? "" : response->dns;
81     result.dnsSec = (response->dnsSec == nullptr) ? "" : response->dnsSec;
82     result.netPortName = (response->netPortName == nullptr) ? "" : response->netPortName;
83     result.gateway = (response->gateway == nullptr) ? "" : response->gateway;
84     result.pCscfPrimAddr = (response->pCscfPrimAddr == nullptr) ? "" : response->pCscfPrimAddr;
85     result.pCscfSecAddr = (response->pCscfSecAddr == nullptr) ? "" : response->pCscfSecAddr;
86 }
87 
SwitchHRilDataListToHal(const void * response,size_t responseLen,std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> & dcResultList)88 void HRilData::SwitchHRilDataListToHal(
89     const void *response, size_t responseLen, std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> &dcResultList)
90 {
91     if (response == nullptr) {
92         TELEPHONY_LOGE("SwitchHRilDataListToHal response is null!!!");
93         return;
94     }
95     size_t dataNum = responseLen / sizeof(HRilDataCallResponse);
96     const HRilDataCallResponse *dataCallResponse = (const HRilDataCallResponse *)response;
97     dcResultList.resize(dataNum);
98 
99     size_t i = 0;
100     while (i < dataNum) {
101         SwitchRilDataToHal(&dataCallResponse[i], dcResultList[i]);
102         i++;
103     }
104 }
105 
DeactivatePdpContext(int32_t serialId,const OHOS::HDI::Ril::V1_1::UniInfo & uniInfo)106 int32_t HRilData::DeactivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
107 {
108     HRilDataInfo dataInfo = {};
109     dataInfo.cid = uniInfo.gsmIndex;
110     dataInfo.reason = uniInfo.arg1;
111     return RequestVendor(
112         serialId, HREQ_DATA_DEACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::DeactivatePdpContext, &dataInfo);
113 }
114 
ActivatePdpContext(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataCallInfo & dataCallInfo)115 int32_t HRilData::ActivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataCallInfo &dataCallInfo)
116 {
117     HRilDataInfo dataInfo;
118     dataInfo.apn = StringToCString(dataCallInfo.dataProfileInfo.apn);
119     dataInfo.type = StringToCString(dataCallInfo.dataProfileInfo.protocol);
120     dataInfo.roamingType = StringToCString(dataCallInfo.dataProfileInfo.roamingProtocol);
121     dataInfo.userName = StringToCString(dataCallInfo.dataProfileInfo.userName);
122     dataInfo.password = StringToCString(dataCallInfo.dataProfileInfo.password);
123     dataInfo.verType = dataCallInfo.dataProfileInfo.authenticationType;
124     dataInfo.rat = dataCallInfo.radioTechnology;
125     dataInfo.roamingEnable = dataCallInfo.roamingAllowed ? 1 : 0;
126     return RequestVendor(
127         serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::ActivatePdpContext, &dataInfo);
128 }
129 
GetPdpContextList(int32_t serialId,const OHOS::HDI::Ril::V1_1::UniInfo & uniInfo)130 int32_t HRilData::GetPdpContextList(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
131 {
132     TELEPHONY_LOGD("serial %{public}d on %{public}d", uniInfo.serial, uniInfo.flag);
133     return RequestVendor(serialId, HREQ_DATA_GET_PDP_CONTEXT_LIST, dataFuncs_, &HRilDataReq::GetPdpContextList);
134 }
135 
SetInitApnInfo(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataProfileDataInfo & dataProfileDataInfo)136 int32_t HRilData::SetInitApnInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileDataInfo)
137 {
138     HRilDataInfo dataInfo = BuildDataInfo(dataProfileDataInfo);
139     return RequestVendor(serialId, HREQ_DATA_SET_INIT_APN_INFO, dataFuncs_, &HRilDataReq::SetInitApnInfo, &dataInfo);
140 }
141 
SendDataPerformanceMode(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataPerformanceInfo & dataPerformanceInfo)142 int32_t HRilData::SendDataPerformanceMode(
143     int32_t serialId, const OHOS::HDI::Ril::V1_1::DataPerformanceInfo &dataPerformanceInfo)
144 {
145     HRilDataPerformanceInfo hrilDataPerformanceInfo;
146     hrilDataPerformanceInfo.performanceEnable = dataPerformanceInfo.performanceEnable;
147     hrilDataPerformanceInfo.enforce = dataPerformanceInfo.enforce;
148     TELEPHONY_LOGI("SendDataPerformanceMode: performanceEnable=%{public}d enforce=%{public}d",
149         hrilDataPerformanceInfo.performanceEnable, hrilDataPerformanceInfo.enforce);
150     return RequestVendor(serialId, HREQ_DATA_SEND_DATA_PERFORMANCE_MODE, dataFuncs_,
151         &HRilDataReq::SendDataPerformanceMode, &hrilDataPerformanceInfo);
152 }
153 
SendDataSleepMode(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataSleepInfo & dataSleepInfo)154 int32_t HRilData::SendDataSleepMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataSleepInfo &dataSleepInfo)
155 {
156     HRilDataSleepInfo hrilDataSleepInfo;
157     hrilDataSleepInfo.sleepEnable = dataSleepInfo.sleepEnable;
158     TELEPHONY_LOGI("SendDataSleepMode: sleepEnable=%{public}d", hrilDataSleepInfo.sleepEnable);
159     return RequestVendor(
160         serialId, HREQ_DATA_SEND_DATA_SLEEP_MODE, dataFuncs_, &HRilDataReq::SendDataSleepMode, &hrilDataSleepInfo);
161 }
162 
SetDataProfileInfo(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataProfilesInfo & dataProfilesInfo)163 int32_t HRilData::SetDataProfileInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfilesInfo &dataProfilesInfo)
164 {
165     int32_t size = dataProfilesInfo.profilesSize;
166     if (size <= 0 || size != static_cast<int32_t>(dataProfilesInfo.profiles.size())) {
167         TELEPHONY_LOGE("RilAdapter failed to do ReadFromParcel!");
168         return HRIL_ERR_INVALID_PARAMETER;
169     }
170     std::unique_ptr<HRilDataInfo[]> dataInfos = std::make_unique<HRilDataInfo[]>(size);
171     for (int32_t i = 0; i < size; i++) {
172         dataInfos[i] = BuildDataInfo(dataProfilesInfo.profiles[i]);
173     }
174     return RequestVendor(
175         serialId, HREQ_DATA_SET_DATA_PROFILE_INFO, dataFuncs_, &HRilDataReq::SetDataProfileInfo, dataInfos.get(), size);
176 }
177 
BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo & dataProfileInfo)178 HRilDataInfo HRilData::BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileInfo)
179 {
180     HRilDataInfo dataInfo;
181     dataInfo.cid = dataProfileInfo.profileId;
182     dataInfo.apn = StringToCString(dataProfileInfo.apn);
183     dataInfo.type = StringToCString(dataProfileInfo.protocol);
184     dataInfo.roamingType = StringToCString(dataProfileInfo.roamingProtocol);
185     dataInfo.userName = StringToCString(dataProfileInfo.userName);
186     dataInfo.password = StringToCString(dataProfileInfo.password);
187     dataInfo.verType = dataProfileInfo.authenticationType;
188     return dataInfo;
189 }
190 
GetLinkCapability(int32_t serialId)191 int32_t HRilData::GetLinkCapability(int32_t serialId)
192 {
193     return RequestVendor(serialId, HREQ_DATA_GET_LINK_CAPABILITY, dataFuncs_, &HRilDataReq::GetLinkCapability);
194 }
195 
GetLinkBandwidthInfo(int32_t serialId,int32_t cid)196 int32_t HRilData::GetLinkBandwidthInfo(int32_t serialId, int32_t cid)
197 {
198     return RequestVendor(
199         serialId, HREQ_DATA_GET_LINK_BANDWIDTH_INFO, dataFuncs_, &HRilDataReq::GetLinkBandwidthInfo, cid);
200 }
201 
SetLinkBandwidthReportingRule(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule & linkBandwidthRule)202 int32_t HRilData::SetLinkBandwidthReportingRule(
203     int32_t serialId, const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule &linkBandwidthRule)
204 {
205     HRilLinkBandwidthReportingRule hLinkBandwidthRule;
206     hLinkBandwidthRule.rat = (RatType)linkBandwidthRule.rat;
207     hLinkBandwidthRule.delayMs = linkBandwidthRule.delayMs;
208     hLinkBandwidthRule.delayUplinkKbps = linkBandwidthRule.delayUplinkKbps;
209     hLinkBandwidthRule.delayDownlinkKbps = linkBandwidthRule.delayDownlinkKbps;
210     hLinkBandwidthRule.maximumUplinkKbpsSize = linkBandwidthRule.maximumUplinkKbpsSize;
211     hLinkBandwidthRule.maximumDownlinkKbpsSize = linkBandwidthRule.maximumDownlinkKbpsSize;
212     hLinkBandwidthRule.maximumUplinkKbps = new int32_t[linkBandwidthRule.maximumUplinkKbpsSize];
213     hLinkBandwidthRule.maximumDownlinkKbps = new int32_t[linkBandwidthRule.maximumDownlinkKbpsSize];
214     TELEPHONY_LOGI("maximumUplinkKbpsSize:%{public}d, maximumDownlinkKbpsSize:%{public}d",
215         linkBandwidthRule.maximumUplinkKbpsSize, linkBandwidthRule.maximumDownlinkKbpsSize);
216     for (int32_t i = 0; i < hLinkBandwidthRule.maximumUplinkKbpsSize; i++) {
217         hLinkBandwidthRule.maximumUplinkKbps[i] = linkBandwidthRule.maximumUplinkKbps[i];
218     }
219     for (int32_t i = 0; i < hLinkBandwidthRule.maximumDownlinkKbpsSize; i++) {
220         hLinkBandwidthRule.maximumDownlinkKbps[i] = linkBandwidthRule.maximumDownlinkKbps[i];
221     }
222     int32_t resutlt = RequestVendor(serialId, HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE, dataFuncs_,
223         &HRilDataReq::SetLinkBandwidthReportingRule, &hLinkBandwidthRule);
224     delete[] hLinkBandwidthRule.maximumUplinkKbps;
225     delete[] hLinkBandwidthRule.maximumDownlinkKbps;
226     return resutlt;
227 }
228 
SetDataPermitted(int32_t serialId,int32_t dataPermitted)229 int32_t HRilData::SetDataPermitted(int32_t serialId, int32_t dataPermitted)
230 {
231     return RequestVendor(
232         serialId, HREQ_DATA_SET_DATA_PERMITTED, dataFuncs_, &HRilDataReq::SetDataPermitted, dataPermitted);
233 }
234 
CleanAllConnections(int32_t serialId)235 int32_t HRilData::CleanAllConnections(int32_t serialId)
236 {
237     return RequestVendor(serialId, HREQ_DATA_CLEAN_ALL_CONNECTIONS, dataFuncs_, &HRilDataReq::CleanAllConnections);
238 }
239 
CleanAllConnectionsResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)240 int32_t HRilData::CleanAllConnectionsResponse(
241     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
242 {
243     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::CleanAllConnectionsResponse);
244 }
245 
DeactivatePdpContextResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)246 int32_t HRilData::DeactivatePdpContextResponse(
247     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
248 {
249     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::DeactivatePdpContextResponse);
250 }
251 
ActivatePdpContextResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)252 int32_t HRilData::ActivatePdpContextResponse(
253     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
254 {
255     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
256         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
257         return HRIL_ERR_INVALID_PARAMETER;
258     }
259     HDI::Ril::V1_1::SetupDataCallResultInfo result = {};
260     result.reason = HRIL_ERROR_UNSPECIFIED_RSN;
261     result.cid = -1;
262     if (response != nullptr) {
263         SwitchRilDataToHal((HRilDataCallResponse *)response, result);
264     }
265     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ActivatePdpContextResponse, result);
266 }
267 
GetPdpContextListResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)268 int32_t HRilData::GetPdpContextListResponse(
269     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
270 {
271     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
272         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
273         return HRIL_ERR_INVALID_PARAMETER;
274     }
275     HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
276     if (response != nullptr) {
277         SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
278     }
279     dataCallResultList.size = dataCallResultList.dcList.size();
280     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPdpContextListResponse, dataCallResultList);
281 }
282 
SetInitApnInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)283 int32_t HRilData::SetInitApnInfoResponse(
284     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
285 {
286     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetInitApnInfoResponse);
287 }
288 
SetDataProfileInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)289 int32_t HRilData::SetDataProfileInfoResponse(
290     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
291 {
292     return HRIL_ERR_SUCCESS;
293 }
294 
SetLinkBandwidthReportingRuleResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)295 int32_t HRilData::SetLinkBandwidthReportingRuleResponse(
296     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
297 {
298     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLinkBandwidthReportingRuleResponse);
299 }
300 
PdpContextListUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)301 int32_t HRilData::PdpContextListUpdated(
302     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
303 {
304     if ((response == nullptr) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
305         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
306         return HRIL_ERR_INVALID_PARAMETER;
307     }
308     HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
309     if (response != nullptr) {
310         SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
311     }
312     dataCallResultList.size = dataCallResultList.dcList.size();
313     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::PdpContextListUpdated, dataCallResultList);
314 }
315 
DataLinkCapabilityUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)316 int32_t HRilData::DataLinkCapabilityUpdated(
317     int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
318 {
319     if ((response == nullptr) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
320         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
321         return HRIL_ERR_INVALID_PARAMETER;
322     }
323     HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
324     if (response != nullptr) {
325         const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
326         dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
327         dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
328         dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
329         dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
330     }
331     return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::DataLinkCapabilityUpdated, dataLinkCapability);
332 }
333 
GetLinkCapabilityResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)334 int32_t HRilData::GetLinkCapabilityResponse(
335     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
336 {
337     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
338         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
339         return HRIL_ERR_INVALID_PARAMETER;
340     }
341     HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
342     if (response != nullptr) {
343         const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
344         dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
345         dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
346         dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
347         dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
348     }
349     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkCapabilityResponse, dataLinkCapability);
350 }
351 
GetLinkBandwidthInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)352 int32_t HRilData::GetLinkBandwidthInfoResponse(
353     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
354 {
355     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilLinkBandwidthInfo)) != 0) {
356         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
357         return HRIL_ERR_INVALID_PARAMETER;
358     }
359     HDI::Ril::V1_1::DataLinkBandwidthInfo uplinkAndDownlinkBandwidthInfo = {};
360     if (response != nullptr) {
361         const HRilLinkBandwidthInfo *result = static_cast<const HRilLinkBandwidthInfo *>(response);
362         uplinkAndDownlinkBandwidthInfo.cid = result->cid;
363         uplinkAndDownlinkBandwidthInfo.qi = result->qi;
364         uplinkAndDownlinkBandwidthInfo.dlGfbr = result->dlGfbr;
365         uplinkAndDownlinkBandwidthInfo.ulGfbr = result->ulGfbr;
366         uplinkAndDownlinkBandwidthInfo.dlMfbr = result->dlMfbr;
367         uplinkAndDownlinkBandwidthInfo.ulMfbr = result->ulMfbr;
368         uplinkAndDownlinkBandwidthInfo.ulSambr = result->ulSambr;
369         uplinkAndDownlinkBandwidthInfo.dlSambr = result->dlSambr;
370         uplinkAndDownlinkBandwidthInfo.averagingWindow = result->averagingWindow;
371     }
372     return Response(
373         responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkBandwidthInfoResponse, uplinkAndDownlinkBandwidthInfo);
374 }
375 
SetDataPermittedResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)376 int32_t HRilData::SetDataPermittedResponse(
377     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
378 {
379     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDataPermittedResponse);
380 }
381 
RegisterDataFuncs(const HRilDataReq * dataFuncs)382 void HRilData::RegisterDataFuncs(const HRilDataReq *dataFuncs)
383 {
384     dataFuncs_ = dataFuncs;
385 }
386 } // namespace Telephony
387 } // namespace OHOS
388