1 /*
2 * Copyright (C) 2021-2022 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_network.h"
17
18 #include "hril_notification.h"
19 #include "hril_request.h"
20
21 namespace OHOS {
22 namespace Telephony {
23 enum class NetworkParameter : int32_t {
24 RESPONSE_VALUE = 3,
25 INVALID_RESPONSE_VALUE = 11,
26 };
27
HRilNetwork(int32_t slotId,IHRilReporter & hrilReporter)28 HRilNetwork::HRilNetwork(int32_t slotId, IHRilReporter &hrilReporter) : HRilBase(slotId, hrilReporter)
29 {
30 AddHandlerToMap();
31 }
32
AddHandlerToMap()33 void HRilNetwork::AddHandlerToMap()
34 {
35 // indication
36 notiMemberFuncMap_[HNOTI_NETWORK_CS_REG_STATUS_UPDATED] = &HRilNetwork::NetworkCsRegStatusUpdated;
37 notiMemberFuncMap_[HNOTI_NETWORK_SIGNAL_STRENGTH_UPDATED] = &HRilNetwork::SignalStrengthUpdated;
38 notiMemberFuncMap_[HNOTI_NETWORK_TIME_UPDATED] = &HRilNetwork::NetworkTimeUpdated;
39 notiMemberFuncMap_[HNOTI_NETWORK_TIME_ZONE_UPDATED] = &HRilNetwork::NetworkTimeZoneUpdated;
40 notiMemberFuncMap_[HNOTI_NETWORK_PS_REG_STATUS_UPDATED] = &HRilNetwork::NetworkPsRegStatusUpdated;
41 notiMemberFuncMap_[HNOTI_NETWORK_PHY_CHNL_CFG_UPDATED] = &HRilNetwork::NetworkPhyChnlCfgUpdated;
42 notiMemberFuncMap_[HNOTI_NETWORK_CURRENT_CELL_UPDATED] = &HRilNetwork::NetworkCurrentCellUpdated_1_1;
43 notiMemberFuncMap_[HNOTI_NETWORK_RRC_CONNECTION_STATE_UPDATED] = &HRilNetwork::GetRrcConnectionStateUpdated;
44
45 // Response
46 respMemberFuncMap_[HREQ_NETWORK_GET_SIGNAL_STRENGTH] = &HRilNetwork::GetSignalStrengthResponse;
47 respMemberFuncMap_[HREQ_NETWORK_GET_CS_REG_STATUS] = &HRilNetwork::GetCsRegStatusResponse;
48 respMemberFuncMap_[HREQ_NETWORK_GET_PS_REG_STATUS] = &HRilNetwork::GetPsRegStatusResponse;
49 respMemberFuncMap_[HREQ_NETWORK_GET_OPERATOR_INFO] = &HRilNetwork::GetOperatorInfoResponse;
50 respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION] = &HRilNetwork::GetNetworkSearchInformationResponse;
51 respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SELECTION_MODE] = &HRilNetwork::GetNetworkSelectionModeResponse;
52 respMemberFuncMap_[HREQ_NETWORK_SET_NETWORK_SELECTION_MODE] = &HRilNetwork::SetNetworkSelectionModeResponse;
53 respMemberFuncMap_[HREQ_NETWORK_SET_PREFERRED_NETWORK] = &HRilNetwork::SetPreferredNetworkResponse;
54 respMemberFuncMap_[HREQ_NETWORK_GET_PREFERRED_NETWORK] = &HRilNetwork::GetPreferredNetworkResponse;
55 respMemberFuncMap_[HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST] = &HRilNetwork::GetNeighboringCellInfoListResponse;
56 respMemberFuncMap_[HREQ_NETWORK_GET_CURRENT_CELL_INFO] = &HRilNetwork::GetCurrentCellInfoResponse_1_1;
57 respMemberFuncMap_[HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG] = &HRilNetwork::GetPhysicalChannelConfigResponse;
58 respMemberFuncMap_[HREQ_NETWORK_SET_LOCATE_UPDATES] = &HRilNetwork::SetLocateUpdatesResponse;
59 respMemberFuncMap_[HREQ_NETWORK_SET_NOTIFICATION_FILTER] = &HRilNetwork::SetNotificationFilterResponse;
60 respMemberFuncMap_[HREQ_NETWORK_SET_DEVICE_STATE] = &HRilNetwork::SetDeviceStateResponse;
61 respMemberFuncMap_[HREQ_NETWORK_SET_NR_OPTION_MODE] = &HRilNetwork::SetNrOptionModeResponse;
62 respMemberFuncMap_[HREQ_NETWORK_GET_NR_OPTION_MODE] = &HRilNetwork::GetNrOptionModeResponse;
63 respMemberFuncMap_[HREQ_NETWORK_GET_RRC_CONNECTION_STATE] = &HRilNetwork::GetRrcConnectionStateResponse;
64 }
65
GetSignalStrength(int32_t serialId)66 int32_t HRilNetwork::GetSignalStrength(int32_t serialId)
67 {
68 return RequestVendor(serialId, HREQ_NETWORK_GET_SIGNAL_STRENGTH, networkFuncs_, &HRilNetworkReq::GetSignalStrength);
69 }
70
GetCsRegStatus(int32_t serialId)71 int32_t HRilNetwork::GetCsRegStatus(int32_t serialId)
72 {
73 return RequestVendor(serialId, HREQ_NETWORK_GET_CS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetCsRegStatus);
74 }
75
GetPsRegStatus(int32_t serialId)76 int32_t HRilNetwork::GetPsRegStatus(int32_t serialId)
77 {
78 return RequestVendor(serialId, HREQ_NETWORK_GET_PS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetPsRegStatus);
79 }
80
GetOperatorInfo(int32_t serialId)81 int32_t HRilNetwork::GetOperatorInfo(int32_t serialId)
82 {
83 return RequestVendor(serialId, HREQ_NETWORK_GET_OPERATOR_INFO, networkFuncs_, &HRilNetworkReq::GetOperatorInfo);
84 }
85
GetNeighboringCellInfoList(int32_t serialId)86 int32_t HRilNetwork::GetNeighboringCellInfoList(int32_t serialId)
87 {
88 return RequestVendor(serialId, HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST, networkFuncs_,
89 &HRilNetworkReq::GetNeighboringCellInfoList);
90 }
91
GetCurrentCellInfo(int32_t serialId)92 int32_t HRilNetwork::GetCurrentCellInfo(int32_t serialId)
93 {
94 return RequestVendor(
95 serialId, HREQ_NETWORK_GET_CURRENT_CELL_INFO, networkFuncs_, &HRilNetworkReq::GetCurrentCellInfo);
96 }
97
GetNetworkSearchInformation(int32_t serialId)98 int32_t HRilNetwork::GetNetworkSearchInformation(int32_t serialId)
99 {
100 return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION, networkFuncs_,
101 &HRilNetworkReq::GetNetworkSearchInformation);
102 }
103
GetNetworkSelectionMode(int32_t serialId)104 int32_t HRilNetwork::GetNetworkSelectionMode(int32_t serialId)
105 {
106 return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SELECTION_MODE, networkFuncs_,
107 &HRilNetworkReq::GetNetworkSelectionMode);
108 }
109
SetNetworkSelectionMode(int32_t serialId,const HDI::Ril::V1_1::SetNetworkModeInfo & networkModeInfo)110 int32_t HRilNetwork::SetNetworkSelectionMode(
111 int32_t serialId, const HDI::Ril::V1_1::SetNetworkModeInfo &networkModeInfo)
112 {
113 HRilSetNetworkModeInfo setNetworkModeInfo = {};
114 setNetworkModeInfo.selectMode = networkModeInfo.selectMode;
115 ConvertToString(&setNetworkModeInfo.oper, networkModeInfo.oper);
116 TELEPHONY_LOGI("HRilNetwork::SetNetworkSelectionMode selectMode = %{public}d", setNetworkModeInfo.selectMode);
117 return RequestVendor(serialId, HREQ_NETWORK_SET_NETWORK_SELECTION_MODE, networkFuncs_,
118 &HRilNetworkReq::SetNetworkSelectionMode, &setNetworkModeInfo);
119 }
120
SetPreferredNetwork(int32_t serialId,int32_t preferredNetworkType)121 int32_t HRilNetwork::SetPreferredNetwork(int32_t serialId, int32_t preferredNetworkType)
122 {
123 return RequestVendor(serialId, HREQ_NETWORK_SET_PREFERRED_NETWORK, networkFuncs_,
124 &HRilNetworkReq::SetPreferredNetwork, &preferredNetworkType);
125 }
126
GetPreferredNetwork(int32_t serialId)127 int32_t HRilNetwork::GetPreferredNetwork(int32_t serialId)
128 {
129 return RequestVendor(serialId, HREQ_NETWORK_GET_PREFERRED_NETWORK, networkFuncs_,
130 &HRilNetworkReq::GetPreferredNetwork);
131 }
132
GetPhysicalChannelConfig(int32_t serialId)133 int32_t HRilNetwork::GetPhysicalChannelConfig(int32_t serialId)
134 {
135 return RequestVendor(serialId, HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG, networkFuncs_,
136 &HRilNetworkReq::GetPhysicalChannelConfig);
137 }
138
SetLocateUpdates(int32_t serialId,const HDI::Ril::V1_1::RilRegNotifyMode mode)139 int32_t HRilNetwork::SetLocateUpdates(int32_t serialId, const HDI::Ril::V1_1::RilRegNotifyMode mode)
140 {
141 HRilRegNotifyMode regNotifyMode = static_cast<HRilRegNotifyMode>(mode);
142 if ((regNotifyMode < REG_NOT_NOTIFY) || (regNotifyMode > REG_NOTIFY_STAT_LAC_CELLID)) {
143 TELEPHONY_LOGE("SetLocateUpdates Invalid regNotifyMode parameter");
144 return HRIL_ERR_INVALID_PARAMETER;
145 }
146 return RequestVendor(serialId, HREQ_NETWORK_SET_LOCATE_UPDATES, networkFuncs_,
147 &HRilNetworkReq::SetLocateUpdates, static_cast<HRilRegNotifyMode>(mode));
148 }
149
SetNotificationFilter(int32_t serialId,int32_t newFilter)150 int32_t HRilNetwork::SetNotificationFilter(int32_t serialId, int32_t newFilter)
151 {
152 return RequestVendor(serialId, HREQ_NETWORK_SET_NOTIFICATION_FILTER, networkFuncs_,
153 &HRilNetworkReq::SetNotificationFilter, &newFilter);
154 }
155
SetDeviceState(int32_t serialId,int32_t deviceStateType,int32_t deviceStateOn)156 int32_t HRilNetwork::SetDeviceState(int32_t serialId, int32_t deviceStateType, int32_t deviceStateOn)
157 {
158 return RequestVendor(serialId, HREQ_NETWORK_SET_DEVICE_STATE, networkFuncs_,
159 &HRilNetworkReq::SetDeviceState, &deviceStateType, &deviceStateOn);
160 }
161
SetNrOptionMode(int32_t serialId,int32_t mode)162 int32_t HRilNetwork::SetNrOptionMode(int32_t serialId, int32_t mode)
163 {
164 return RequestVendor(
165 serialId, HREQ_NETWORK_SET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::SetNrOptionMode, &mode);
166 }
167
GetNrOptionMode(int32_t serialId)168 int32_t HRilNetwork::GetNrOptionMode(int32_t serialId)
169 {
170 return RequestVendor(serialId, HREQ_NETWORK_GET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::GetNrOptionMode);
171 }
172
GetRrcConnectionState(int32_t serialId)173 int32_t HRilNetwork::GetRrcConnectionState(int32_t serialId)
174 {
175 return RequestVendor(
176 serialId, HREQ_NETWORK_GET_RRC_CONNECTION_STATE, networkFuncs_, &HRilNetworkReq::GetRrcConnectionState);
177 }
178
GetSignalStrengthResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)179 int32_t HRilNetwork::GetSignalStrengthResponse(
180 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
181 {
182 HDI::Ril::V1_1::Rssi rssi = {};
183 if (response == nullptr || responseLen != sizeof(HRilRssi)) {
184 TELEPHONY_LOGE("GetSignalStrengthResponse response is invalid");
185 if (responseInfo.error == HRilErrType::NONE) {
186 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
187 }
188 } else {
189 ExchangeRilRssiToHdf(response, rssi);
190 }
191 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSignalStrengthResponse, rssi);
192 }
193
GetCsRegStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)194 int32_t HRilNetwork::GetCsRegStatusResponse(
195 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
196 {
197 HDI::Ril::V1_1::CsRegStatusInfo csRegStatusInfo = {};
198 if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
199 TELEPHONY_LOGE("GetCsRegStatusResponse response is invalid");
200 if (responseInfo.error == HRilErrType::NONE) {
201 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
202 }
203 } else {
204 const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
205 csRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode;
206 csRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
207 csRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode;
208 csRegStatusInfo.cellId = hrilRegStatusInfo->cellId;
209 csRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
210 TELEPHONY_LOGI("GetCsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, "
211 "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d",
212 csRegStatusInfo.notifyType, csRegStatusInfo.regStatus, csRegStatusInfo.lacCode, csRegStatusInfo.cellId,
213 csRegStatusInfo.radioTechnology);
214 }
215 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCsRegStatusResponse, csRegStatusInfo);
216 }
217
GetPsRegStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)218 int32_t HRilNetwork::GetPsRegStatusResponse(
219 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
220 {
221 HDI::Ril::V1_1::PsRegStatusInfo psRegStatusInfo = {};
222 if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
223 TELEPHONY_LOGE("GetPsRegStatusResponse response is invalid");
224 if (responseInfo.error == HRilErrType::NONE) {
225 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
226 }
227 } else {
228 const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
229 psRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode;
230 psRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
231 psRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode;
232 psRegStatusInfo.cellId = hrilRegStatusInfo->cellId;
233 psRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
234 psRegStatusInfo.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted;
235 psRegStatusInfo.isNrAvailable = hrilRegStatusInfo->isNrAvailable;
236 psRegStatusInfo.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable;
237 TELEPHONY_LOGI(
238 "GetPsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, "
239 "cellId:%{private}d, technology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, "
240 "isEnDcAvailable:%{private}d",
241 psRegStatusInfo.notifyType, psRegStatusInfo.regStatus, psRegStatusInfo.lacCode, psRegStatusInfo.cellId,
242 psRegStatusInfo.radioTechnology, psRegStatusInfo.isDcNrRestricted, psRegStatusInfo.isNrAvailable,
243 psRegStatusInfo.isEnDcAvailable);
244 }
245 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPsRegStatusResponse, psRegStatusInfo);
246 }
247
GetOperatorInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)248 int32_t HRilNetwork::GetOperatorInfoResponse(
249 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
250 {
251 HDI::Ril::V1_1::OperatorInfo operatorInfoResult = {};
252 if (response == nullptr || responseLen == 0) {
253 TELEPHONY_LOGE("GetOperatorInfoResponse response is invalid");
254 if (responseInfo.error == HRilErrType::NONE) {
255 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
256 }
257 } else {
258 char **resp = static_cast<char **>(const_cast<void *>(response));
259 operatorInfoResult.longName = (resp[HRIL_LONE_NAME] == nullptr) ? "" : resp[HRIL_LONE_NAME];
260 operatorInfoResult.shortName = (resp[HRIL_SHORT_NAME] == nullptr) ? "" : resp[HRIL_SHORT_NAME];
261 operatorInfoResult.numeric = (resp[HRIL_NUMERIC] == nullptr) ? "" : resp[HRIL_NUMERIC];
262 TELEPHONY_LOGD("GetOperatorInfoResponse longName:%{public}s, shortName:%{public}s, numeric:%{public}s",
263 operatorInfoResult.longName.c_str(), operatorInfoResult.shortName.c_str(),
264 operatorInfoResult.numeric.c_str());
265 }
266 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetOperatorInfoResponse, operatorInfoResult);
267 }
268
GetNetworkSearchInformationResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)269 int32_t HRilNetwork::GetNetworkSearchInformationResponse(
270 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
271 {
272 HDI::Ril::V1_1::AvailableNetworkList availableNetworkList = {};
273 if (response == nullptr || responseLen == 0) {
274 TELEPHONY_LOGE("GetNetworkSearchInformationResponse response is invalid");
275 if (responseInfo.error == HRilErrType::NONE) {
276 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
277 }
278 } else {
279 availableNetworkList.itemNum = 0;
280 BuildOperatorList(availableNetworkList, response, responseLen);
281 }
282 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSearchInformationResponse,
283 availableNetworkList);
284 }
285
GetNetworkSelectionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)286 int32_t HRilNetwork::GetNetworkSelectionModeResponse(
287 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
288 {
289 HDI::Ril::V1_1::SetNetworkModeInfo selectModeInfo = {};
290 if (response == nullptr || responseLen != sizeof(int32_t)) {
291 TELEPHONY_LOGE("GetNetworkSelectionModeResponse response is invalid");
292 if (responseInfo.error == HRilErrType::NONE) {
293 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
294 }
295 } else {
296 int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response));
297 selectModeInfo.selectMode = *resp;
298 TELEPHONY_LOGI("GetNetworkSelectionModeResponse selectMode: %{public}d", selectModeInfo.selectMode);
299 }
300 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSelectionModeResponse, selectModeInfo);
301 }
302
SetNetworkSelectionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)303 int32_t HRilNetwork::SetNetworkSelectionModeResponse(
304 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
305 {
306 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNetworkSelectionModeResponse);
307 }
308
SetPreferredNetworkResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)309 int32_t HRilNetwork::SetPreferredNetworkResponse(
310 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
311 {
312 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetPreferredNetworkResponse);
313 }
314
GetPreferredNetworkResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)315 int32_t HRilNetwork::GetPreferredNetworkResponse(
316 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
317 {
318 HDI::Ril::V1_1::PreferredNetworkTypeInfo preferredNetworkTypeInfo = {};
319 if (response == nullptr || responseLen != sizeof(int32_t)) {
320 TELEPHONY_LOGE("GetPreferredNetworkResponse response is invalid");
321 if (responseInfo.error == HRilErrType::NONE) {
322 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
323 }
324 } else {
325 int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response));
326 preferredNetworkTypeInfo.preferredNetworkType = *resp;
327 TELEPHONY_LOGI("GetPreferredNetworkResponse preferredNetworkType: %{public}d", *resp);
328 }
329 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPreferredNetworkResponse, preferredNetworkTypeInfo);
330 }
331
GetNeighboringCellInfoListResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)332 int32_t HRilNetwork::GetNeighboringCellInfoListResponse(
333 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
334 {
335 HDI::Ril::V1_1::CellListNearbyInfo cellInfoList;
336 if (response == nullptr || responseLen != sizeof(CellInfoList)) {
337 TELEPHONY_LOGE("GetNeighboringCellInfoListResponse response is invalid");
338 if (responseInfo.error == HRilErrType::NONE) {
339 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
340 }
341 } else {
342 cellInfoList.itemNum = 0;
343 cellInfoList.cellNearbyInfo.clear();
344 if (BuildNeighboringCellList(cellInfoList, response, responseLen) != 0) {
345 TELEPHONY_LOGE("GetNeighboringCellInfoListResponse BuildNeighboringCellList failed");
346 return HRIL_ERR_GENERIC_FAILURE;
347 }
348 }
349 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNeighboringCellInfoListResponse, cellInfoList);
350 }
351
GetCurrentCellInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)352 int32_t HRilNetwork::GetCurrentCellInfoResponse(
353 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
354 {
355 HDI::Ril::V1_1::CellListCurrentInfo cellList;
356 if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
357 TELEPHONY_LOGE("GetCurrentCellInfoResponse response is invalid");
358 if (responseInfo.error == HRilErrType::NONE) {
359 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
360 }
361 } else {
362 cellList.itemNum = 0;
363 cellList.cellCurrentInfo.clear();
364 if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
365 TELEPHONY_LOGE("GetCurrentCellInfoResponse BuildCurrentCellList failed");
366 return HRIL_ERR_GENERIC_FAILURE;
367 }
368 }
369 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse, cellList);
370 }
371
GetCurrentCellInfoResponse_1_1(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)372 int32_t HRilNetwork::GetCurrentCellInfoResponse_1_1(
373 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
374 {
375 HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList;
376 if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
377 TELEPHONY_LOGE("GetCurrentCellInfoResponse_1_1 response is invalid");
378 if (responseInfo.error == HRilErrType::NONE) {
379 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
380 }
381 } else {
382 cellList.itemNum = 0;
383 cellList.cellCurrentInfo.clear();
384 if (BuildCurrentCellInfoList(cellList, response, responseLen) != 0) {
385 TELEPHONY_LOGE("GetCurrentCellInfoResponse_1_1 BuildCurrentCellInfoList failed");
386 return HRIL_ERR_GENERIC_FAILURE;
387 }
388 }
389 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse_1_1, cellList);
390 }
391
GetPhysicalChannelConfigResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)392 int32_t HRilNetwork::GetPhysicalChannelConfigResponse(
393 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
394 {
395 HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {};
396 if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) {
397 TELEPHONY_LOGE("GetPhysicalChannelConfigResponse response is invalid");
398 if (responseInfo.error == HRilErrType::NONE) {
399 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
400 }
401 } else {
402 phyChnlCfgList.itemNum = 0;
403 phyChnlCfgList.channelConfigInfos.clear();
404 const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response);
405 phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum;
406 for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) {
407 HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg;
408 phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>(
409 hrilChannelConfigList->channelConfigs[i].cellConnStatus);
410 phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz;
411 phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz;
412 phyChnlCfg.ratType =
413 static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType);
414 phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange;
415 phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum;
416 phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum;
417 phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId;
418 phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum;
419 TELEPHONY_LOGI(
420 "GetPhysicalChannelConfigResponse cellConnStatus:%{private}d, "
421 "cellBandwidthDownlinkKhz:%{private}d, cellBandwidthUplinkKhz:%{private}d, physicalCellId:%{private}d, "
422 "ratType:%{private}d, freqRange:%{private}d, downlinkChannelNum:%{private}d, "
423 "uplinkChannelNum:%{private}d, contextIdNum:%{private}d",
424 phyChnlCfg.cellConnStatus, phyChnlCfg.cellBandwidthDownlinkKhz, phyChnlCfg.cellBandwidthUplinkKhz,
425 phyChnlCfg.ratType, phyChnlCfg.freqRange, phyChnlCfg.downlinkChannelNum, phyChnlCfg.uplinkChannelNum,
426 phyChnlCfg.physicalCellId, phyChnlCfg.contextIdNum);
427 for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) {
428 phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]);
429 TELEPHONY_LOGI("contextIds:%{public}d---contextId:%{private}d", j, phyChnlCfg.contextIds[j]);
430 }
431 phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg);
432 }
433 TELEPHONY_LOGI("GetPhysicalChannelConfigResponse itemNum:%{public}d", phyChnlCfgList.itemNum);
434 }
435 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPhysicalChannelConfigResponse, phyChnlCfgList);
436 }
437
SetLocateUpdatesResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)438 int32_t HRilNetwork::SetLocateUpdatesResponse(
439 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
440 {
441 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLocateUpdatesResponse);
442 }
443
SetNotificationFilterResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)444 int32_t HRilNetwork::SetNotificationFilterResponse(
445 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
446 {
447 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNotificationFilterResponse);
448 }
449
SetDeviceStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)450 int32_t HRilNetwork::SetDeviceStateResponse(
451 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
452 {
453 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDeviceStateResponse);
454 }
455
SetNrOptionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)456 int32_t HRilNetwork::SetNrOptionModeResponse(
457 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
458 {
459 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNrOptionModeResponse);
460 }
461
GetNrOptionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)462 int32_t HRilNetwork::GetNrOptionModeResponse(
463 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
464 {
465 int32_t nrOptionMode = 0;
466 if (response == nullptr || responseLen != sizeof(int32_t)) {
467 TELEPHONY_LOGE("GetNrOptionModeResponse response is invalid");
468 if (responseInfo.error == HRilErrType::NONE) {
469 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
470 }
471 } else {
472 nrOptionMode = *(static_cast<const int32_t *>(response));
473 TELEPHONY_LOGI("GetNrOptionModeResponse nrOptionMode: %{public}d", nrOptionMode);
474 }
475 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNrOptionModeResponse, nrOptionMode);
476 }
477
GetRrcConnectionStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)478 int32_t HRilNetwork::GetRrcConnectionStateResponse(
479 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
480 {
481 int32_t rrcConnectionState = 0;
482 if (response == nullptr || responseLen != sizeof(int32_t)) {
483 TELEPHONY_LOGE("GetRrcConnectionStateResponse response is invalid");
484 if (responseInfo.error == HRilErrType::NONE) {
485 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
486 }
487 } else {
488 rrcConnectionState = *(static_cast<const int32_t *>(response));
489 TELEPHONY_LOGD("GetRrcConnectionStateResponse rrcConnectionState: %{public}d", rrcConnectionState);
490 }
491 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateResponse, rrcConnectionState);
492 }
493
NetworkCsRegStatusUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)494 int32_t HRilNetwork::NetworkCsRegStatusUpdated(
495 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
496 {
497 if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
498 TELEPHONY_LOGE("NetworkCsRegStatusUpdated response is invalid");
499 return HRIL_ERR_INVALID_PARAMETER;
500 }
501 HDI::Ril::V1_1::CsRegStatusInfo regStatusInfoNotify = {};
502 const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
503 regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode;
504 regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
505 regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode;
506 regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId;
507 regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
508 TELEPHONY_LOGI("NetworkCsRegStatusUpdated notifyType:%{public}d, regStatus:%{public}d, "
509 "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d",
510 regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode,
511 regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology);
512 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCsRegStatusUpdated, regStatusInfoNotify);
513 }
514
NetworkPsRegStatusUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)515 int32_t HRilNetwork::NetworkPsRegStatusUpdated(
516 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
517 {
518 if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
519 TELEPHONY_LOGE("NetworkPsRegStatusUpdated response is invalid");
520 return HRIL_ERR_INVALID_PARAMETER;
521 }
522 HDI::Ril::V1_1::PsRegStatusInfo regStatusInfoNotify = {};
523 const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
524 regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode;
525 regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
526 regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode;
527 regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId;
528 regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
529 regStatusInfoNotify.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted;
530 regStatusInfoNotify.isNrAvailable = hrilRegStatusInfo->isNrAvailable;
531 regStatusInfoNotify.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable;
532 TELEPHONY_LOGI(
533 "GetPsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, cellId:%{private}d, "
534 "radioTechnology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, "
535 "isEnDcAvailable:%{private}d",
536 regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode,
537 regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology, regStatusInfoNotify.isDcNrRestricted,
538 regStatusInfoNotify.isNrAvailable, regStatusInfoNotify.isEnDcAvailable);
539 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPsRegStatusUpdated, regStatusInfoNotify);
540 }
541
SignalStrengthUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)542 int32_t HRilNetwork::SignalStrengthUpdated(
543 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
544 {
545 if (response == nullptr || responseLen != sizeof(HRilRssi)) {
546 TELEPHONY_LOGE("SignalStrengthUpdated response is invalid");
547 return HRIL_ERR_INVALID_PARAMETER;
548 }
549 HDI::Ril::V1_1::Rssi rssi = {};
550 ExchangeRilRssiToHdf(response, rssi);
551 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::SignalStrengthUpdated, rssi);
552 }
553
NetworkTimeUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)554 int32_t HRilNetwork::NetworkTimeUpdated(
555 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
556 {
557 if (response == nullptr) {
558 TELEPHONY_LOGE("NetworkTimeUpdated response is invalid");
559 return HRIL_ERR_INVALID_PARAMETER;
560 }
561 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeUpdated, (const char *)response);
562 }
563
NetworkTimeZoneUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)564 int32_t HRilNetwork::NetworkTimeZoneUpdated(
565 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
566 {
567 if (response == nullptr) {
568 TELEPHONY_LOGE("NetworkTimeZoneUpdated response is invalid");
569 return HRIL_ERR_INVALID_PARAMETER;
570 }
571 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeZoneUpdated, (const char *)response);
572 }
573
NetworkPhyChnlCfgUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)574 int32_t HRilNetwork::NetworkPhyChnlCfgUpdated(
575 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
576 {
577 if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) {
578 TELEPHONY_LOGE("NetworkPhyChnlCfgUpdated response is invalid");
579 return HRIL_ERR_INVALID_PARAMETER;
580 }
581 HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {};
582 phyChnlCfgList.itemNum = 0;
583 phyChnlCfgList.channelConfigInfos.clear();
584 const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response);
585 phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum;
586 for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) {
587 HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg;
588 phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>(
589 hrilChannelConfigList->channelConfigs[i].cellConnStatus);
590 phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz;
591 phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz;
592 phyChnlCfg.ratType =
593 static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType);
594 phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange;
595 phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum;
596 phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum;
597 phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId;
598 phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum;
599 for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) {
600 phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]);
601 }
602 phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg);
603 }
604 TELEPHONY_LOGI("NetworkPhyChnlCfgUpdated itemNum:%{public}d", phyChnlCfgList.itemNum);
605 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPhyChnlCfgUpdated, phyChnlCfgList);
606 }
607
NetworkCurrentCellUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)608 int32_t HRilNetwork::NetworkCurrentCellUpdated(
609 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
610 {
611 if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
612 TELEPHONY_LOGE("NetworkCurrentCellUpdated response is invalid");
613 return HRIL_ERR_INVALID_PARAMETER;
614 }
615 HDI::Ril::V1_1::CellListCurrentInfo cellList;
616 cellList.itemNum = 0;
617 cellList.cellCurrentInfo.clear();
618 if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
619 TELEPHONY_LOGE("NetworkCurrentCellUpdated BuildCurrentCellList failed");
620 return HRIL_ERR_GENERIC_FAILURE;
621 }
622 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated, cellList);
623 }
624
GetRrcConnectionStateUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)625 int32_t HRilNetwork::GetRrcConnectionStateUpdated(
626 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
627 {
628 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) {
629 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
630 return HRIL_ERR_INVALID_PARAMETER;
631 }
632 if (response == nullptr) {
633 TELEPHONY_LOGE("response is null");
634 return HRIL_ERR_NULL_POINT;
635 }
636 return Notify(
637 indType, error, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateUpdated, *(const int32_t *)response);
638 }
639
NetworkCurrentCellUpdated_1_1(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)640 int32_t HRilNetwork::NetworkCurrentCellUpdated_1_1(
641 int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
642 {
643 if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
644 TELEPHONY_LOGE("NetworkCurrentCellUpdated_1_1 response is invalid");
645 return HRIL_ERR_INVALID_PARAMETER;
646 }
647 HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList;
648 cellList.itemNum = 0;
649 cellList.cellCurrentInfo.clear();
650 if (BuildCurrentCellInfoList(cellList, response, responseLen) != 0) {
651 TELEPHONY_LOGE("NetworkCurrentCellUpdated_1_1 BuildCurrentCellInfoList failed");
652 return HRIL_ERR_GENERIC_FAILURE;
653 }
654 return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated_1_1, cellList);
655 }
656
ExchangeRilRssiToHdf(const void * response,HDI::Ril::V1_1::Rssi & rssi)657 void HRilNetwork::ExchangeRilRssiToHdf(const void *response, HDI::Ril::V1_1::Rssi &rssi)
658 {
659 HRilRssi *rilRssi = (HRilRssi *)response;
660 rssi.gw.rxlev = rilRssi->gsmRssi.rxlev;
661 rssi.gw.ber = rilRssi->gsmRssi.ber;
662 rssi.cdma.absoluteRssi = rilRssi->cdmaRssi.absoluteRssi;
663 rssi.cdma.ecno = rilRssi->cdmaRssi.ecno;
664 rssi.wcdma.rxlev = rilRssi->wcdmaRssi.rxlev;
665 rssi.wcdma.ber = rilRssi->wcdmaRssi.ber;
666 rssi.wcdma.ecio = rilRssi->wcdmaRssi.ecio;
667 rssi.wcdma.rscp = rilRssi->wcdmaRssi.rscp;
668 rssi.lte.rxlev = rilRssi->lteRssi.rxlev;
669 rssi.lte.rsrp = rilRssi->lteRssi.rsrp;
670 rssi.lte.rsrq = rilRssi->lteRssi.rsrq;
671 rssi.lte.snr = rilRssi->lteRssi.snr;
672 rssi.tdScdma.rscp = rilRssi->tdScdmaRssi.rscp;
673 rssi.nr.rsrp = rilRssi->nrRssi.rsrp;
674 rssi.nr.rsrq = rilRssi->nrRssi.rsrq;
675 rssi.nr.sinr = rilRssi->nrRssi.sinr;
676 TELEPHONY_LOGD("ExchangeRilRssiToHdf rxlev:%{public}d, rsrp:%{public}d", rssi.lte.rxlev, rssi.lte.rsrp);
677 }
678
BuildOperatorList(HDI::Ril::V1_1::AvailableNetworkList & availableNetworkList,const void * response,size_t responseLen)679 void HRilNetwork::BuildOperatorList(
680 HDI::Ril::V1_1::AvailableNetworkList &availableNetworkList, const void *response, size_t responseLen)
681 {
682 size_t numStrings = responseLen / sizeof(AvailableOperInfo *);
683 HDI::Ril::V1_1::AvailableNetworkInfo operInfo = {};
684 availableNetworkList.itemNum = numStrings;
685 TELEPHONY_LOGI(
686 "BuildOperatorList availableNetworkList.itemNum: %{public}lu", static_cast<unsigned long>(numStrings));
687 for (size_t i = 0; i < numStrings; i++) {
688 AvailableOperInfo *curPtr = ((AvailableOperInfo **)response)[i];
689 if (curPtr != nullptr) {
690 operInfo.status = curPtr->status;
691 TELEPHONY_LOGI("operInfo.status:%{public}d", curPtr->status);
692 operInfo.longName = (curPtr->longName == nullptr) ? "" : curPtr->longName;
693 TELEPHONY_LOGI("operInfo.longName:%{public}s", curPtr->longName);
694 operInfo.numeric = (curPtr->numeric == nullptr) ? "" : curPtr->numeric;
695 TELEPHONY_LOGI("operInfo.numeric:%{public}s", curPtr->numeric);
696 operInfo.shortName = (curPtr->shortName == nullptr) ? "" : curPtr->shortName;
697 TELEPHONY_LOGI("operInfo.shortName:%{public}s", curPtr->shortName);
698 operInfo.rat = curPtr->rat;
699 TELEPHONY_LOGI("operInfo.rat:%{public}d", curPtr->rat);
700 availableNetworkList.availableNetworkInfo.push_back(operInfo);
701 }
702 }
703 }
704
FillCellNearbyInfo(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * cellPtr)705 void HRilNetwork::FillCellNearbyInfo(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *cellPtr)
706 {
707 cellInfo.ratType = cellPtr->ratType;
708 switch (cellPtr->ratType) {
709 case NETWORK_TYPE_GSM:
710 cellInfo.serviceCells.gsm.band = cellPtr->ServiceCellParas.gsm.band;
711 cellInfo.serviceCells.gsm.arfcn = cellPtr->ServiceCellParas.gsm.arfcn;
712 cellInfo.serviceCells.gsm.bsic = cellPtr->ServiceCellParas.gsm.bsic;
713 cellInfo.serviceCells.gsm.cellId = cellPtr->ServiceCellParas.gsm.cellId;
714 cellInfo.serviceCells.gsm.lac = cellPtr->ServiceCellParas.gsm.lac;
715 cellInfo.serviceCells.gsm.rxlev = cellPtr->ServiceCellParas.gsm.rxlev;
716 break;
717 case NETWORK_TYPE_LTE:
718 cellInfo.serviceCells.lte.arfcn = cellPtr->ServiceCellParas.lte.arfcn;
719 cellInfo.serviceCells.lte.pci = cellPtr->ServiceCellParas.lte.pci;
720 cellInfo.serviceCells.lte.rsrp = cellPtr->ServiceCellParas.lte.rsrp;
721 cellInfo.serviceCells.lte.rsrq = cellPtr->ServiceCellParas.lte.rsrq;
722 cellInfo.serviceCells.lte.rxlev = cellPtr->ServiceCellParas.lte.rxlev;
723 break;
724 case NETWORK_TYPE_WCDMA:
725 cellInfo.serviceCells.wcdma.arfcn = cellPtr->ServiceCellParas.wcdma.arfcn;
726 cellInfo.serviceCells.wcdma.psc = cellPtr->ServiceCellParas.wcdma.psc;
727 cellInfo.serviceCells.wcdma.rscp = cellPtr->ServiceCellParas.wcdma.rscp;
728 cellInfo.serviceCells.wcdma.ecno = cellPtr->ServiceCellParas.wcdma.ecno;
729 break;
730 case NETWORK_TYPE_CDMA:
731 FillCellNearbyInfoCdma(cellInfo, cellPtr);
732 break;
733 case NETWORK_TYPE_TDSCDMA:
734 FillCellNearbyInfoTdscdma(cellInfo, cellPtr);
735 break;
736 case NETWORK_TYPE_NR:
737 cellInfo.serviceCells.nr.nrArfcn = cellPtr->ServiceCellParas.nr.nrArfcn;
738 cellInfo.serviceCells.nr.pci = cellPtr->ServiceCellParas.nr.pci;
739 cellInfo.serviceCells.nr.tac = cellPtr->ServiceCellParas.nr.tac;
740 cellInfo.serviceCells.nr.nci = cellPtr->ServiceCellParas.nr.nci;
741 break;
742 default:
743 cellInfo.serviceCells.gsm.band = 0;
744 cellInfo.serviceCells.gsm.arfcn = 0;
745 cellInfo.serviceCells.gsm.bsic = 0;
746 cellInfo.serviceCells.gsm.cellId = 0;
747 cellInfo.serviceCells.gsm.lac = 0;
748 cellInfo.serviceCells.gsm.rxlev = 0;
749 break;
750 }
751 }
752
FillCellNearbyInfoTdscdma(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * hrilCellPtr)753 void HRilNetwork::FillCellNearbyInfoTdscdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr)
754 {
755 cellInfo.serviceCells.tdscdma.arfcn = hrilCellPtr->ServiceCellParas.tdscdma.arfcn;
756 cellInfo.serviceCells.tdscdma.syncId = hrilCellPtr->ServiceCellParas.tdscdma.syncId;
757 cellInfo.serviceCells.tdscdma.sc = hrilCellPtr->ServiceCellParas.tdscdma.sc;
758 cellInfo.serviceCells.tdscdma.cellId = hrilCellPtr->ServiceCellParas.tdscdma.cellId;
759 cellInfo.serviceCells.tdscdma.lac = hrilCellPtr->ServiceCellParas.tdscdma.lac;
760 cellInfo.serviceCells.tdscdma.rscp = hrilCellPtr->ServiceCellParas.tdscdma.rscp;
761 cellInfo.serviceCells.tdscdma.drx = hrilCellPtr->ServiceCellParas.tdscdma.drx;
762 cellInfo.serviceCells.tdscdma.rac = hrilCellPtr->ServiceCellParas.tdscdma.rac;
763 cellInfo.serviceCells.tdscdma.cpid = hrilCellPtr->ServiceCellParas.tdscdma.cpid;
764 }
765
FillCellNearbyInfoCdma(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * hrilCellPtr)766 void HRilNetwork::FillCellNearbyInfoCdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr)
767 {
768 cellInfo.serviceCells.cdma.systemId = hrilCellPtr->ServiceCellParas.cdma.systemId;
769 cellInfo.serviceCells.cdma.networkId = hrilCellPtr->ServiceCellParas.cdma.networkId;
770 cellInfo.serviceCells.cdma.baseId = hrilCellPtr->ServiceCellParas.cdma.baseId;
771 cellInfo.serviceCells.cdma.zoneId = hrilCellPtr->ServiceCellParas.cdma.zoneId;
772 cellInfo.serviceCells.cdma.pilotPn = hrilCellPtr->ServiceCellParas.cdma.pilotPn;
773 cellInfo.serviceCells.cdma.pilotStrength = hrilCellPtr->ServiceCellParas.cdma.pilotStrength;
774 cellInfo.serviceCells.cdma.channel = hrilCellPtr->ServiceCellParas.cdma.channel;
775 cellInfo.serviceCells.cdma.longitude = hrilCellPtr->ServiceCellParas.cdma.longitude;
776 cellInfo.serviceCells.cdma.latitude = hrilCellPtr->ServiceCellParas.cdma.latitude;
777 }
778
BuildNeighboringCellList(HDI::Ril::V1_1::CellListNearbyInfo & cellInfoList,const void * response,size_t responseLen)779 int32_t HRilNetwork::BuildNeighboringCellList(
780 HDI::Ril::V1_1::CellListNearbyInfo &cellInfoList, const void *response, size_t responseLen)
781 {
782 const CellInfoList *temp = reinterpret_cast<const CellInfoList *>(response);
783 cellInfoList.itemNum = temp->itemNum;
784 TELEPHONY_LOGI("BuildNeighboringCellList cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
785 for (int32_t i = 0; i < temp->itemNum; i++) {
786 HDI::Ril::V1_1::CellNearbyInfo cellInfo;
787 CellInfo *cell = temp->cellNearbyInfo + i;
788 if (cell == nullptr) {
789 TELEPHONY_LOGE("BuildNeighboringCellList cell is nullptr");
790 return HRIL_ERR_GENERIC_FAILURE;
791 }
792 FillCellNearbyInfo(cellInfo, cell);
793 cellInfoList.cellNearbyInfo.push_back(cellInfo);
794 }
795 return HRIL_ERR_SUCCESS;
796 }
797
FillCellInfoType(HDI::Ril::V1_1::CurrentCellInfo & cellInfo,const CurrentCellInfoVendor * hrilCellInfoVendor)798 void HRilNetwork::FillCellInfoType(
799 HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor)
800 {
801 if (hrilCellInfoVendor->ratType == NETWORK_TYPE_WCDMA) {
802 cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn;
803 cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId;
804 cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc;
805 cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac;
806 cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev;
807 cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp;
808 cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno;
809 cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura;
810 cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx;
811 } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_CDMA) {
812 cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId;
813 cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId;
814 cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId;
815 cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId;
816 cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn;
817 cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength;
818 cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel;
819 cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude;
820 cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude;
821 } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_TDSCDMA) {
822 cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn;
823 cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId;
824 cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc;
825 cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId;
826 cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac;
827 cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp;
828 cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx;
829 cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac;
830 cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid;
831 }
832 }
833
FillCellInformationType(HDI::Ril::V1_1::CurrentCellInfo_1_1 & cellInfo,const CurrentCellInfoVendor * hrilCellInfoVendor)834 void HRilNetwork::FillCellInformationType(
835 HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor)
836 {
837 switch (hrilCellInfoVendor->ratType) {
838 case NETWORK_TYPE_WCDMA:
839 cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn;
840 cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId;
841 cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc;
842 cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac;
843 cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev;
844 cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp;
845 cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno;
846 cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura;
847 cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx;
848 break;
849 case NETWORK_TYPE_CDMA:
850 cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId;
851 cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId;
852 cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId;
853 cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId;
854 cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn;
855 cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength;
856 cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel;
857 cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude;
858 cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude;
859 break;
860 case NETWORK_TYPE_TDSCDMA:
861 cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn;
862 cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId;
863 cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc;
864 cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId;
865 cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac;
866 cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp;
867 cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx;
868 cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac;
869 cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid;
870 break;
871 case NETWORK_TYPE_NR:
872 cellInfo.serviceCells.nr.nrArfcn = hrilCellInfoVendor->ServiceCellParas.nr.nrArfcn;
873 cellInfo.serviceCells.nr.pci = hrilCellInfoVendor->ServiceCellParas.nr.pci;
874 cellInfo.serviceCells.nr.tac = hrilCellInfoVendor->ServiceCellParas.nr.tac;
875 cellInfo.serviceCells.nr.nci = hrilCellInfoVendor->ServiceCellParas.nr.nci;
876 cellInfo.serviceCells.nr.rsrp = hrilCellInfoVendor->ServiceCellParas.nr.rsrp;
877 cellInfo.serviceCells.nr.rsrq = hrilCellInfoVendor->ServiceCellParas.nr.rsrq;
878 break;
879 default:
880 break;
881 }
882 }
883
FillCurrentCellInfo(HDI::Ril::V1_1::CurrentCellInfo & cellInfo,const CurrentCellInfoVendor * cellInfoVendor)884 void HRilNetwork::FillCurrentCellInfo(
885 HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *cellInfoVendor)
886 {
887 cellInfo.ratType = cellInfoVendor->ratType;
888 cellInfo.mcc = cellInfoVendor->mcc;
889 cellInfo.mnc = cellInfoVendor->mnc;
890 switch (cellInfoVendor->ratType) {
891 case NETWORK_TYPE_GSM:
892 cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band;
893 cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn;
894 cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic;
895 cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId;
896 cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac;
897 cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev;
898 cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality;
899 cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta;
900 break;
901 case NETWORK_TYPE_LTE:
902 cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn;
903 cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId;
904 cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci;
905 cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac;
906 cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp;
907 cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq;
908 cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi;
909 break;
910 case NETWORK_TYPE_WCDMA:
911 case NETWORK_TYPE_CDMA:
912 case NETWORK_TYPE_TDSCDMA:
913 FillCellInfoType(cellInfo, cellInfoVendor);
914 break;
915 case NETWORK_TYPE_NR:
916 cellInfo.serviceCells.nr.nrArfcn = cellInfoVendor->ServiceCellParas.nr.nrArfcn;
917 cellInfo.serviceCells.nr.pci = cellInfoVendor->ServiceCellParas.nr.pci;
918 cellInfo.serviceCells.nr.tac = cellInfoVendor->ServiceCellParas.nr.tac;
919 cellInfo.serviceCells.nr.nci = cellInfoVendor->ServiceCellParas.nr.nci;
920 break;
921 default:
922 cellInfo.serviceCells.wcdma.arfcn = 0;
923 cellInfo.serviceCells.wcdma.cellId = 0;
924 cellInfo.serviceCells.wcdma.psc = 0;
925 cellInfo.serviceCells.wcdma.lac = 0;
926 cellInfo.serviceCells.wcdma.rxlev = 0;
927 cellInfo.serviceCells.wcdma.rscp = 0;
928 cellInfo.serviceCells.wcdma.ecno = 0;
929 cellInfo.serviceCells.wcdma.drx = 0;
930 cellInfo.serviceCells.wcdma.ura = 0;
931 break;
932 }
933 }
934
FillCurrentCellInformation(HDI::Ril::V1_1::CurrentCellInfo_1_1 & cellInfo,const CurrentCellInfoVendor * cellInfoVendor)935 void HRilNetwork::FillCurrentCellInformation(
936 HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *cellInfoVendor)
937 {
938 cellInfo.ratType = cellInfoVendor->ratType;
939 cellInfo.mcc = cellInfoVendor->mcc;
940 cellInfo.mnc = cellInfoVendor->mnc;
941 switch (cellInfoVendor->ratType) {
942 case NETWORK_TYPE_GSM:
943 cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band;
944 cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn;
945 cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic;
946 cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId;
947 cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac;
948 cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev;
949 cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality;
950 cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta;
951 break;
952 case NETWORK_TYPE_LTE:
953 cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn;
954 cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId;
955 cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci;
956 cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac;
957 cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp;
958 cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq;
959 cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi;
960 break;
961 case NETWORK_TYPE_WCDMA:
962 case NETWORK_TYPE_CDMA:
963 case NETWORK_TYPE_TDSCDMA:
964 case NETWORK_TYPE_NR:
965 FillCellInformationType(cellInfo, cellInfoVendor);
966 break;
967 default:
968 cellInfo.serviceCells.wcdma.arfcn = 0;
969 cellInfo.serviceCells.wcdma.cellId = 0;
970 cellInfo.serviceCells.wcdma.psc = 0;
971 cellInfo.serviceCells.wcdma.lac = 0;
972 cellInfo.serviceCells.wcdma.rxlev = 0;
973 cellInfo.serviceCells.wcdma.rscp = 0;
974 cellInfo.serviceCells.wcdma.ecno = 0;
975 cellInfo.serviceCells.wcdma.drx = 0;
976 cellInfo.serviceCells.wcdma.ura = 0;
977 break;
978 }
979 }
980
BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo & cellInfoList,const void * response,size_t responseLen)981 int32_t HRilNetwork::BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo &cellInfoList,
982 const void *response, size_t responseLen)
983 {
984 const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response);
985 cellInfoList.itemNum = temp->itemNum;
986 TELEPHONY_LOGI("BuildCurrentCellList cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
987 for (int32_t i = 0; i < temp->itemNum; i++) {
988 HDI::Ril::V1_1::CurrentCellInfo cellInfo;
989 CurrentCellInfoVendor *cell = temp->currentCellInfo + i;
990 if (cell == nullptr) {
991 TELEPHONY_LOGE("BuildCurrentCellList cell is nullptr");
992 return HRIL_ERR_GENERIC_FAILURE;
993 }
994 FillCurrentCellInfo(cellInfo, cell);
995 cellInfoList.cellCurrentInfo.push_back(cellInfo);
996 }
997 return HRIL_ERR_SUCCESS;
998 }
999
BuildCurrentCellInfoList(HDI::Ril::V1_1::CellListCurrentInfo_1_1 & cellInfoList,const void * response,size_t responseLen)1000 int32_t HRilNetwork::BuildCurrentCellInfoList(HDI::Ril::V1_1::CellListCurrentInfo_1_1 &cellInfoList,
1001 const void *response, size_t responseLen)
1002 {
1003 const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response);
1004 cellInfoList.itemNum = temp->itemNum;
1005 TELEPHONY_LOGI("BuildCurrentCellInfoList cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
1006 for (int32_t i = 0; i < temp->itemNum; i++) {
1007 HDI::Ril::V1_1::CurrentCellInfo_1_1 cellInfo;
1008 CurrentCellInfoVendor *cell = temp->currentCellInfo + i;
1009 if (cell == nullptr) {
1010 TELEPHONY_LOGE("BuildCurrentCellInfoList cell is nullptr");
1011 return HRIL_ERR_GENERIC_FAILURE;
1012 }
1013 FillCurrentCellInformation(cellInfo, cell);
1014 cellInfoList.cellCurrentInfo.push_back(cellInfo);
1015 }
1016 return HRIL_ERR_SUCCESS;
1017 }
1018
IsNetworkResponse(uint32_t code)1019 bool HRilNetwork::IsNetworkResponse(uint32_t code)
1020 {
1021 return ((code >= HREQ_NETWORK_BASE) && (code < HREQ_COMMON_BASE));
1022 }
1023
IsNetworkNotification(uint32_t code)1024 bool HRilNetwork::IsNetworkNotification(uint32_t code)
1025 {
1026 return ((code >= HNOTI_NETWORK_BASE) && (code < HNOTI_COMMON_BASE));
1027 }
1028
IsNetworkRespOrNotify(uint32_t code)1029 bool HRilNetwork::IsNetworkRespOrNotify(uint32_t code)
1030 {
1031 return IsNetworkResponse(code) || IsNetworkNotification(code);
1032 }
1033
RegisterNetworkFuncs(const HRilNetworkReq * networkFuncs)1034 void HRilNetwork::RegisterNetworkFuncs(const HRilNetworkReq *networkFuncs)
1035 {
1036 networkFuncs_ = networkFuncs;
1037 }
1038 } // namespace Telephony
1039 } // namespace OHOS
1040