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] =
52 [this](int32_t notifyType, HRilErrNumber error, const void *response,
53 size_t responseLen) { return PdpContextListUpdated(notifyType, error, response, responseLen); };
54 notiMemberFuncMap_[HNOTI_DATA_LINK_CAPABILITY_UPDATED] =
55 [this](int32_t notifyType, HRilErrNumber error, const void *response,
56 size_t responseLen) { return DataLinkCapabilityUpdated(notifyType, error, response, responseLen); };
57 // response
58 respMemberFuncMap_[HREQ_DATA_SET_INIT_APN_INFO] =
59 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
60 size_t responseLen) { return SetInitApnInfoResponse(requestNum, responseInfo, response, responseLen); };
61 respMemberFuncMap_[HREQ_DATA_SET_DATA_PROFILE_INFO] =
62 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
63 size_t responseLen) { return SetDataProfileInfoResponse(requestNum, responseInfo, response, responseLen); };
64 respMemberFuncMap_[HREQ_DATA_ACTIVATE_PDP_CONTEXT] =
65 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
66 size_t responseLen) { return ActivatePdpContextResponse(requestNum, responseInfo, response, responseLen); };
67 respMemberFuncMap_[HREQ_DATA_DEACTIVATE_PDP_CONTEXT] =
68 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
69 size_t responseLen) { return DeactivatePdpContextResponse(requestNum, responseInfo, response, responseLen); };
70 respMemberFuncMap_[HREQ_DATA_GET_PDP_CONTEXT_LIST] =
71 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
72 size_t responseLen) { return GetPdpContextListResponse(requestNum, responseInfo, response, responseLen); };
73 respMemberFuncMap_[HREQ_DATA_GET_LINK_BANDWIDTH_INFO] =
74 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
75 size_t responseLen) { return GetLinkBandwidthInfoResponse(requestNum, responseInfo, response, responseLen); };
76 respMemberFuncMap_[HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE] = [this](int32_t requestNum,
77 HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen) {
78 return SetLinkBandwidthReportingRuleResponse(requestNum, responseInfo, response, responseLen);
79 };
80 respMemberFuncMap_[HREQ_DATA_SET_DATA_PERMITTED] =
81 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
82 size_t responseLen) { return SetDataPermittedResponse(requestNum, responseInfo, response, responseLen); };
83 respMemberFuncMap_[HREQ_DATA_GET_LINK_CAPABILITY] =
84 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
85 size_t responseLen) { return GetLinkCapabilityResponse(requestNum, responseInfo, response, responseLen); };
86 respMemberFuncMap_[HREQ_DATA_CLEAN_ALL_CONNECTIONS] =
87 [this](int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response,
88 size_t responseLen) { return CleanAllConnectionsResponse(requestNum, responseInfo, response, responseLen); };
89 }
90
SwitchRilDataToHal(const HRilDataCallResponse * response,HDI::Ril::V1_1::SetupDataCallResultInfo & result)91 void HRilData::SwitchRilDataToHal(const HRilDataCallResponse *response, HDI::Ril::V1_1::SetupDataCallResultInfo &result)
92 {
93 if (response == nullptr) {
94 TELEPHONY_LOGE("SwitchRilDataToHal response is null!!!");
95 return;
96 }
97 result.active = response->active;
98 result.reason = response->reason;
99 result.retryTime = response->retryTime;
100 result.cid = response->cid;
101 result.pduSessionId = response->pduSessionId;
102 result.maxTransferUnit = response->maxTransferUnit;
103 result.address = (response->address == nullptr) ? "" : response->address;
104 result.type = (response->type == nullptr) ? "" : response->type;
105 result.dns = (response->dns == nullptr) ? "" : response->dns;
106 result.dnsSec = (response->dnsSec == nullptr) ? "" : response->dnsSec;
107 result.netPortName = (response->netPortName == nullptr) ? "" : response->netPortName;
108 result.gateway = (response->gateway == nullptr) ? "" : response->gateway;
109 result.pCscfPrimAddr = (response->pCscfPrimAddr == nullptr) ? "" : response->pCscfPrimAddr;
110 result.pCscfSecAddr = (response->pCscfSecAddr == nullptr) ? "" : response->pCscfSecAddr;
111 }
112
SwitchHRilDataListToHal(const void * response,size_t responseLen,std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> & dcResultList)113 void HRilData::SwitchHRilDataListToHal(
114 const void *response, size_t responseLen, std::vector<HDI::Ril::V1_1::SetupDataCallResultInfo> &dcResultList)
115 {
116 if (response == nullptr) {
117 TELEPHONY_LOGE("SwitchHRilDataListToHal response is null!!!");
118 return;
119 }
120 size_t dataNum = responseLen / sizeof(HRilDataCallResponse);
121 const HRilDataCallResponse *dataCallResponse = (const HRilDataCallResponse *)response;
122 dcResultList.resize(dataNum);
123
124 size_t i = 0;
125 while (i < dataNum) {
126 SwitchRilDataToHal(&dataCallResponse[i], dcResultList[i]);
127 i++;
128 }
129 }
130
DeactivatePdpContext(int32_t serialId,const OHOS::HDI::Ril::V1_1::UniInfo & uniInfo)131 int32_t HRilData::DeactivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
132 {
133 HRilDataInfo dataInfo = {};
134 dataInfo.cid = uniInfo.gsmIndex;
135 dataInfo.reason = uniInfo.arg1;
136 return RequestVendor(
137 serialId, HREQ_DATA_DEACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::DeactivatePdpContext, &dataInfo);
138 }
139
ActivatePdpContext(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataCallInfo & dataCallInfo)140 int32_t HRilData::ActivatePdpContext(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataCallInfo &dataCallInfo)
141 {
142 HRilDataInfo dataInfo;
143 dataInfo.apn = StringToCString(dataCallInfo.dataProfileInfo.apn);
144 dataInfo.type = StringToCString(dataCallInfo.dataProfileInfo.protocol);
145 dataInfo.roamingType = StringToCString(dataCallInfo.dataProfileInfo.roamingProtocol);
146 dataInfo.userName = StringToCString(dataCallInfo.dataProfileInfo.userName);
147 dataInfo.password = StringToCString(dataCallInfo.dataProfileInfo.password);
148 dataInfo.verType = dataCallInfo.dataProfileInfo.authenticationType;
149 dataInfo.rat = dataCallInfo.radioTechnology;
150 dataInfo.roamingEnable = dataCallInfo.roamingAllowed ? 1 : 0;
151 return RequestVendor(
152 serialId, HREQ_DATA_ACTIVATE_PDP_CONTEXT, dataFuncs_, &HRilDataReq::ActivatePdpContext, &dataInfo);
153 }
154
ActivatePdpContextWithApnTypes(int32_t serialId,const OHOS::HDI::Ril::V1_3::DataCallInfoWithApnTypes & dataCallInfo)155 int32_t HRilData::ActivatePdpContextWithApnTypes(int32_t serialId,
156 const OHOS::HDI::Ril::V1_3::DataCallInfoWithApnTypes &dataCallInfo)
157 {
158 return HRIL_ERR_SUCCESS;
159 }
160
GetPdpContextList(int32_t serialId,const OHOS::HDI::Ril::V1_1::UniInfo & uniInfo)161 int32_t HRilData::GetPdpContextList(int32_t serialId, const OHOS::HDI::Ril::V1_1::UniInfo &uniInfo)
162 {
163 TELEPHONY_LOGD("serial %{public}d on %{public}d", uniInfo.serial, uniInfo.flag);
164 return RequestVendor(serialId, HREQ_DATA_GET_PDP_CONTEXT_LIST, dataFuncs_, &HRilDataReq::GetPdpContextList);
165 }
166
SetInitApnInfo(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataProfileDataInfo & dataProfileDataInfo)167 int32_t HRilData::SetInitApnInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileDataInfo)
168 {
169 HRilDataInfo dataInfo = BuildDataInfo(dataProfileDataInfo);
170 return RequestVendor(serialId, HREQ_DATA_SET_INIT_APN_INFO, dataFuncs_, &HRilDataReq::SetInitApnInfo, &dataInfo);
171 }
172
SendDataPerformanceMode(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataPerformanceInfo & dataPerformanceInfo)173 int32_t HRilData::SendDataPerformanceMode(
174 int32_t serialId, const OHOS::HDI::Ril::V1_1::DataPerformanceInfo &dataPerformanceInfo)
175 {
176 HRilDataPerformanceInfo hrilDataPerformanceInfo;
177 hrilDataPerformanceInfo.performanceEnable = dataPerformanceInfo.performanceEnable;
178 hrilDataPerformanceInfo.enforce = dataPerformanceInfo.enforce;
179 TELEPHONY_LOGI("SendDataPerformanceMode: performanceEnable=%{public}d enforce=%{public}d",
180 hrilDataPerformanceInfo.performanceEnable, hrilDataPerformanceInfo.enforce);
181 return RequestVendor(serialId, HREQ_DATA_SEND_DATA_PERFORMANCE_MODE, dataFuncs_,
182 &HRilDataReq::SendDataPerformanceMode, &hrilDataPerformanceInfo);
183 }
184
SendDataSleepMode(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataSleepInfo & dataSleepInfo)185 int32_t HRilData::SendDataSleepMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataSleepInfo &dataSleepInfo)
186 {
187 HRilDataSleepInfo hrilDataSleepInfo;
188 hrilDataSleepInfo.sleepEnable = dataSleepInfo.sleepEnable;
189 TELEPHONY_LOGI("SendDataSleepMode: sleepEnable=%{public}d", hrilDataSleepInfo.sleepEnable);
190 return RequestVendor(
191 serialId, HREQ_DATA_SEND_DATA_SLEEP_MODE, dataFuncs_, &HRilDataReq::SendDataSleepMode, &hrilDataSleepInfo);
192 }
193
SetDataProfileInfo(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataProfilesInfo & dataProfilesInfo)194 int32_t HRilData::SetDataProfileInfo(int32_t serialId, const OHOS::HDI::Ril::V1_1::DataProfilesInfo &dataProfilesInfo)
195 {
196 int32_t size = dataProfilesInfo.profilesSize;
197 if (size <= 0 || size != static_cast<int32_t>(dataProfilesInfo.profiles.size())) {
198 TELEPHONY_LOGE("RilAdapter failed to do ReadFromParcel!");
199 return HRIL_ERR_INVALID_PARAMETER;
200 }
201 std::unique_ptr<HRilDataInfo[]> dataInfos = std::make_unique<HRilDataInfo[]>(size);
202 for (int32_t i = 0; i < size; i++) {
203 dataInfos[i] = BuildDataInfo(dataProfilesInfo.profiles[i]);
204 }
205 return RequestVendor(
206 serialId, HREQ_DATA_SET_DATA_PROFILE_INFO, dataFuncs_, &HRilDataReq::SetDataProfileInfo, dataInfos.get(), size);
207 }
208
BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo & dataProfileInfo)209 HRilDataInfo HRilData::BuildDataInfo(const OHOS::HDI::Ril::V1_1::DataProfileDataInfo &dataProfileInfo)
210 {
211 HRilDataInfo dataInfo;
212 dataInfo.cid = dataProfileInfo.profileId;
213 dataInfo.apn = StringToCString(dataProfileInfo.apn);
214 dataInfo.type = StringToCString(dataProfileInfo.protocol);
215 dataInfo.roamingType = StringToCString(dataProfileInfo.roamingProtocol);
216 dataInfo.userName = StringToCString(dataProfileInfo.userName);
217 dataInfo.password = StringToCString(dataProfileInfo.password);
218 dataInfo.verType = dataProfileInfo.authenticationType;
219 return dataInfo;
220 }
221
GetLinkCapability(int32_t serialId)222 int32_t HRilData::GetLinkCapability(int32_t serialId)
223 {
224 return RequestVendor(serialId, HREQ_DATA_GET_LINK_CAPABILITY, dataFuncs_, &HRilDataReq::GetLinkCapability);
225 }
226
GetLinkBandwidthInfo(int32_t serialId,int32_t cid)227 int32_t HRilData::GetLinkBandwidthInfo(int32_t serialId, int32_t cid)
228 {
229 return RequestVendor(
230 serialId, HREQ_DATA_GET_LINK_BANDWIDTH_INFO, dataFuncs_, &HRilDataReq::GetLinkBandwidthInfo, cid);
231 }
232
SetLinkBandwidthReportingRule(int32_t serialId,const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule & linkBandwidthRule)233 int32_t HRilData::SetLinkBandwidthReportingRule(
234 int32_t serialId, const OHOS::HDI::Ril::V1_1::DataLinkBandwidthReportingRule &linkBandwidthRule)
235 {
236 HRilLinkBandwidthReportingRule hLinkBandwidthRule;
237 hLinkBandwidthRule.rat = (RatType)linkBandwidthRule.rat;
238 hLinkBandwidthRule.delayMs = linkBandwidthRule.delayMs;
239 hLinkBandwidthRule.delayUplinkKbps = linkBandwidthRule.delayUplinkKbps;
240 hLinkBandwidthRule.delayDownlinkKbps = linkBandwidthRule.delayDownlinkKbps;
241 hLinkBandwidthRule.maximumUplinkKbpsSize = linkBandwidthRule.maximumUplinkKbpsSize;
242 hLinkBandwidthRule.maximumDownlinkKbpsSize = linkBandwidthRule.maximumDownlinkKbpsSize;
243 hLinkBandwidthRule.maximumUplinkKbps = new int32_t[linkBandwidthRule.maximumUplinkKbpsSize];
244 hLinkBandwidthRule.maximumDownlinkKbps = new int32_t[linkBandwidthRule.maximumDownlinkKbpsSize];
245 TELEPHONY_LOGI("maximumUplinkKbpsSize:%{public}d, maximumDownlinkKbpsSize:%{public}d",
246 linkBandwidthRule.maximumUplinkKbpsSize, linkBandwidthRule.maximumDownlinkKbpsSize);
247 for (int32_t i = 0; i < hLinkBandwidthRule.maximumUplinkKbpsSize; i++) {
248 hLinkBandwidthRule.maximumUplinkKbps[i] = linkBandwidthRule.maximumUplinkKbps[i];
249 }
250 for (int32_t i = 0; i < hLinkBandwidthRule.maximumDownlinkKbpsSize; i++) {
251 hLinkBandwidthRule.maximumDownlinkKbps[i] = linkBandwidthRule.maximumDownlinkKbps[i];
252 }
253 int32_t resutlt = RequestVendor(serialId, HREQ_DATA_SET_LINK_BANDWIDTH_REPORTING_RULE, dataFuncs_,
254 &HRilDataReq::SetLinkBandwidthReportingRule, &hLinkBandwidthRule);
255 delete[] hLinkBandwidthRule.maximumUplinkKbps;
256 delete[] hLinkBandwidthRule.maximumDownlinkKbps;
257 return resutlt;
258 }
259
SetDataPermitted(int32_t serialId,int32_t dataPermitted)260 int32_t HRilData::SetDataPermitted(int32_t serialId, int32_t dataPermitted)
261 {
262 return RequestVendor(
263 serialId, HREQ_DATA_SET_DATA_PERMITTED, dataFuncs_, &HRilDataReq::SetDataPermitted, dataPermitted);
264 }
265
CleanAllConnections(int32_t serialId)266 int32_t HRilData::CleanAllConnections(int32_t serialId)
267 {
268 return RequestVendor(serialId, HREQ_DATA_CLEAN_ALL_CONNECTIONS, dataFuncs_, &HRilDataReq::CleanAllConnections);
269 }
270
CleanAllConnectionsResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)271 int32_t HRilData::CleanAllConnectionsResponse(
272 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
273 {
274 return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::CleanAllConnectionsResponse);
275 }
276
DeactivatePdpContextResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)277 int32_t HRilData::DeactivatePdpContextResponse(
278 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
279 {
280 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::DeactivatePdpContextResponse);
281 }
282
ActivatePdpContextResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)283 int32_t HRilData::ActivatePdpContextResponse(
284 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
285 {
286 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
287 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
288 return HRIL_ERR_INVALID_PARAMETER;
289 }
290 HDI::Ril::V1_1::SetupDataCallResultInfo result = {};
291 result.reason = HRIL_ERROR_UNSPECIFIED_RSN;
292 result.cid = -1;
293 if (response != nullptr) {
294 SwitchRilDataToHal((HRilDataCallResponse *)response, result);
295 }
296 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ActivatePdpContextResponse, result);
297 }
298
GetPdpContextListResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)299 int32_t HRilData::GetPdpContextListResponse(
300 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
301 {
302 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
303 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
304 return HRIL_ERR_INVALID_PARAMETER;
305 }
306 HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
307 if (response != nullptr) {
308 SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
309 }
310 dataCallResultList.size = dataCallResultList.dcList.size();
311 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPdpContextListResponse, dataCallResultList);
312 }
313
SetInitApnInfoResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)314 int32_t HRilData::SetInitApnInfoResponse(
315 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
316 {
317 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetInitApnInfoResponse);
318 }
319
SetDataProfileInfoResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)320 int32_t HRilData::SetDataProfileInfoResponse(
321 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
322 {
323 return HRIL_ERR_SUCCESS;
324 }
325
SetLinkBandwidthReportingRuleResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)326 int32_t HRilData::SetLinkBandwidthReportingRuleResponse(
327 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
328 {
329 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLinkBandwidthReportingRuleResponse);
330 }
331
PdpContextListUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)332 int32_t HRilData::PdpContextListUpdated(
333 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
334 {
335 if ((response == nullptr) || (responseLen % sizeof(HRilDataCallResponse)) != 0) {
336 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
337 return HRIL_ERR_INVALID_PARAMETER;
338 }
339 HDI::Ril::V1_1::DataCallResultList dataCallResultList = {};
340 SwitchHRilDataListToHal(response, responseLen, dataCallResultList.dcList);
341 dataCallResultList.size = dataCallResultList.dcList.size();
342 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::PdpContextListUpdated, dataCallResultList);
343 }
344
DataLinkCapabilityUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)345 int32_t HRilData::DataLinkCapabilityUpdated(
346 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
347 {
348 if ((response == nullptr) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
349 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
350 return HRIL_ERR_INVALID_PARAMETER;
351 }
352 HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
353 const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
354 dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
355 dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
356 dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
357 dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
358 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::DataLinkCapabilityUpdated, dataLinkCapability);
359 }
360
GetLinkCapabilityResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)361 int32_t HRilData::GetLinkCapabilityResponse(
362 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
363 {
364 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilDataLinkCapability)) != 0) {
365 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
366 return HRIL_ERR_INVALID_PARAMETER;
367 }
368 HDI::Ril::V1_1::DataLinkCapability dataLinkCapability = { 0 };
369 if (response != nullptr) {
370 const HRilDataLinkCapability *result = static_cast<const HRilDataLinkCapability *>(response);
371 dataLinkCapability.primaryDownlinkKbps = result->primaryDownlinkKbps;
372 dataLinkCapability.primaryUplinkKbps = result->primaryUplinkKbps;
373 dataLinkCapability.secondaryDownlinkKbps = result->secondaryDownlinkKbps;
374 dataLinkCapability.secondaryUplinkKbps = result->secondaryUplinkKbps;
375 }
376 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkCapabilityResponse, dataLinkCapability);
377 }
378
GetLinkBandwidthInfoResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)379 int32_t HRilData::GetLinkBandwidthInfoResponse(
380 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
381 {
382 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilLinkBandwidthInfo)) != 0) {
383 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
384 return HRIL_ERR_INVALID_PARAMETER;
385 }
386 HDI::Ril::V1_1::DataLinkBandwidthInfo uplinkAndDownlinkBandwidthInfo = {};
387 if (response != nullptr) {
388 const HRilLinkBandwidthInfo *result = static_cast<const HRilLinkBandwidthInfo *>(response);
389 uplinkAndDownlinkBandwidthInfo.cid = result->cid;
390 uplinkAndDownlinkBandwidthInfo.qi = result->qi;
391 uplinkAndDownlinkBandwidthInfo.dlGfbr = result->dlGfbr;
392 uplinkAndDownlinkBandwidthInfo.ulGfbr = result->ulGfbr;
393 uplinkAndDownlinkBandwidthInfo.dlMfbr = result->dlMfbr;
394 uplinkAndDownlinkBandwidthInfo.ulMfbr = result->ulMfbr;
395 uplinkAndDownlinkBandwidthInfo.ulSambr = result->ulSambr;
396 uplinkAndDownlinkBandwidthInfo.dlSambr = result->dlSambr;
397 uplinkAndDownlinkBandwidthInfo.averagingWindow = result->averagingWindow;
398 }
399 return Response(
400 responseInfo, &HDI::Ril::V1_1::IRilCallback::GetLinkBandwidthInfoResponse, uplinkAndDownlinkBandwidthInfo);
401 }
402
SetDataPermittedResponse(int32_t requestNum,HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)403 int32_t HRilData::SetDataPermittedResponse(
404 int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
405 {
406 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDataPermittedResponse);
407 }
408
RegisterDataFuncs(const HRilDataReq * dataFuncs)409 void HRilData::RegisterDataFuncs(const HRilDataReq *dataFuncs)
410 {
411 dataFuncs_ = dataFuncs;
412 }
413 } // namespace Telephony
414 } // namespace OHOS
415