• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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