• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2024 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)28 HRilNetwork::HRilNetwork(int32_t slotId) : HRilBase(slotId)
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_2;
43     notiMemberFuncMap_[HNOTI_NETWORK_RRC_CONNECTION_STATE_UPDATED] = &HRilNetwork::GetRrcConnectionStateUpdated;
44     notiMemberFuncMap_[HNOTI_NETWORK_RESIDENT_NETWORK_UPDATED] = &HRilNetwork::ResidentNetworkUpdated;
45 
46     // Response
47     respMemberFuncMap_[HREQ_NETWORK_GET_SIGNAL_STRENGTH] = &HRilNetwork::GetSignalStrengthResponse;
48     respMemberFuncMap_[HREQ_NETWORK_GET_CS_REG_STATUS] = &HRilNetwork::GetCsRegStatusResponse;
49     respMemberFuncMap_[HREQ_NETWORK_GET_PS_REG_STATUS] = &HRilNetwork::GetPsRegStatusResponse;
50     respMemberFuncMap_[HREQ_NETWORK_GET_OPERATOR_INFO] = &HRilNetwork::GetOperatorInfoResponse;
51     respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION] = &HRilNetwork::GetNetworkSearchInformationResponse;
52     respMemberFuncMap_[HREQ_NETWORK_GET_NETWORK_SELECTION_MODE] = &HRilNetwork::GetNetworkSelectionModeResponse;
53     respMemberFuncMap_[HREQ_NETWORK_SET_NETWORK_SELECTION_MODE] = &HRilNetwork::SetNetworkSelectionModeResponse;
54     respMemberFuncMap_[HREQ_NETWORK_SET_PREFERRED_NETWORK] = &HRilNetwork::SetPreferredNetworkResponse;
55     respMemberFuncMap_[HREQ_NETWORK_GET_PREFERRED_NETWORK] = &HRilNetwork::GetPreferredNetworkResponse;
56     respMemberFuncMap_[HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST] =
57         &HRilNetwork::GetNeighboringCellInfoListResponse_1_2;
58     respMemberFuncMap_[HREQ_NETWORK_GET_CURRENT_CELL_INFO] = &HRilNetwork::GetCurrentCellInfoResponse_1_2;
59     respMemberFuncMap_[HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG] = &HRilNetwork::GetPhysicalChannelConfigResponse;
60     respMemberFuncMap_[HREQ_NETWORK_SET_LOCATE_UPDATES] = &HRilNetwork::SetLocateUpdatesResponse;
61     respMemberFuncMap_[HREQ_NETWORK_SET_NOTIFICATION_FILTER] = &HRilNetwork::SetNotificationFilterResponse;
62     respMemberFuncMap_[HREQ_NETWORK_SET_DEVICE_STATE] = &HRilNetwork::SetDeviceStateResponse;
63     respMemberFuncMap_[HREQ_NETWORK_SET_NR_OPTION_MODE] = &HRilNetwork::SetNrOptionModeResponse;
64     respMemberFuncMap_[HREQ_NETWORK_GET_NR_OPTION_MODE] = &HRilNetwork::GetNrOptionModeResponse;
65     respMemberFuncMap_[HREQ_NETWORK_GET_RRC_CONNECTION_STATE] = &HRilNetwork::GetRrcConnectionStateResponse;
66     respMemberFuncMap_[HREQ_NETWORK_GET_NR_SSBID_INFO] = &HRilNetwork::GetNrSsbIdResponse;
67 }
68 
GetSignalStrength(int32_t serialId)69 int32_t HRilNetwork::GetSignalStrength(int32_t serialId)
70 {
71     return RequestVendor(serialId, HREQ_NETWORK_GET_SIGNAL_STRENGTH, networkFuncs_, &HRilNetworkReq::GetSignalStrength);
72 }
73 
GetCsRegStatus(int32_t serialId)74 int32_t HRilNetwork::GetCsRegStatus(int32_t serialId)
75 {
76     return RequestVendor(serialId, HREQ_NETWORK_GET_CS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetCsRegStatus);
77 }
78 
GetPsRegStatus(int32_t serialId)79 int32_t HRilNetwork::GetPsRegStatus(int32_t serialId)
80 {
81     return RequestVendor(serialId, HREQ_NETWORK_GET_PS_REG_STATUS, networkFuncs_, &HRilNetworkReq::GetPsRegStatus);
82 }
83 
GetOperatorInfo(int32_t serialId)84 int32_t HRilNetwork::GetOperatorInfo(int32_t serialId)
85 {
86     return RequestVendor(serialId, HREQ_NETWORK_GET_OPERATOR_INFO, networkFuncs_, &HRilNetworkReq::GetOperatorInfo);
87 }
88 
GetNeighboringCellInfoList(int32_t serialId)89 int32_t HRilNetwork::GetNeighboringCellInfoList(int32_t serialId)
90 {
91     return RequestVendor(serialId, HREQ_NETWORK_GET_NEIGHBORING_CELLINFO_LIST, networkFuncs_,
92         &HRilNetworkReq::GetNeighboringCellInfoList);
93 }
94 
GetCurrentCellInfo(int32_t serialId)95 int32_t HRilNetwork::GetCurrentCellInfo(int32_t serialId)
96 {
97     return RequestVendor(
98         serialId, HREQ_NETWORK_GET_CURRENT_CELL_INFO, networkFuncs_, &HRilNetworkReq::GetCurrentCellInfo);
99 }
100 
GetNetworkSearchInformation(int32_t serialId)101 int32_t HRilNetwork::GetNetworkSearchInformation(int32_t serialId)
102 {
103     return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SEARCH_INFORMATION, networkFuncs_,
104         &HRilNetworkReq::GetNetworkSearchInformation);
105 }
106 
GetNetworkSelectionMode(int32_t serialId)107 int32_t HRilNetwork::GetNetworkSelectionMode(int32_t serialId)
108 {
109     return RequestVendor(serialId, HREQ_NETWORK_GET_NETWORK_SELECTION_MODE, networkFuncs_,
110         &HRilNetworkReq::GetNetworkSelectionMode);
111 }
112 
SetNetworkSelectionMode(int32_t serialId,const HDI::Ril::V1_1::SetNetworkModeInfo & networkModeInfo)113 int32_t HRilNetwork::SetNetworkSelectionMode(
114     int32_t serialId, const HDI::Ril::V1_1::SetNetworkModeInfo &networkModeInfo)
115 {
116     HRilSetNetworkModeInfo setNetworkModeInfo = {};
117     setNetworkModeInfo.selectMode = networkModeInfo.selectMode;
118     ConvertToString(&setNetworkModeInfo.oper, networkModeInfo.oper);
119     TELEPHONY_LOGI("HRilNetwork::SetNetworkSelectionMode selectMode = %{public}d", setNetworkModeInfo.selectMode);
120     return RequestVendor(serialId, HREQ_NETWORK_SET_NETWORK_SELECTION_MODE, networkFuncs_,
121         &HRilNetworkReq::SetNetworkSelectionMode, &setNetworkModeInfo);
122 }
123 
SetPreferredNetwork(int32_t serialId,int32_t preferredNetworkType)124 int32_t HRilNetwork::SetPreferredNetwork(int32_t serialId, int32_t preferredNetworkType)
125 {
126     return RequestVendor(serialId, HREQ_NETWORK_SET_PREFERRED_NETWORK, networkFuncs_,
127         &HRilNetworkReq::SetPreferredNetwork, &preferredNetworkType);
128 }
129 
GetPreferredNetwork(int32_t serialId)130 int32_t HRilNetwork::GetPreferredNetwork(int32_t serialId)
131 {
132     return RequestVendor(serialId, HREQ_NETWORK_GET_PREFERRED_NETWORK, networkFuncs_,
133         &HRilNetworkReq::GetPreferredNetwork);
134 }
135 
GetPhysicalChannelConfig(int32_t serialId)136 int32_t HRilNetwork::GetPhysicalChannelConfig(int32_t serialId)
137 {
138     return RequestVendor(serialId, HREQ_NETWORK_GET_PHYSICAL_CHANNEL_CONFIG, networkFuncs_,
139         &HRilNetworkReq::GetPhysicalChannelConfig);
140 }
141 
SetLocateUpdates(int32_t serialId,const HDI::Ril::V1_1::RilRegNotifyMode mode)142 int32_t HRilNetwork::SetLocateUpdates(int32_t serialId, const HDI::Ril::V1_1::RilRegNotifyMode mode)
143 {
144     HRilRegNotifyMode regNotifyMode = static_cast<HRilRegNotifyMode>(mode);
145     if ((regNotifyMode < REG_NOT_NOTIFY) || (regNotifyMode > REG_NOTIFY_STAT_LAC_CELLID)) {
146         TELEPHONY_LOGE("SetLocateUpdates Invalid regNotifyMode parameter");
147         return HRIL_ERR_INVALID_PARAMETER;
148     }
149     return RequestVendor(serialId, HREQ_NETWORK_SET_LOCATE_UPDATES, networkFuncs_,
150         &HRilNetworkReq::SetLocateUpdates, static_cast<HRilRegNotifyMode>(mode));
151 }
152 
SetNotificationFilter(int32_t serialId,int32_t newFilter)153 int32_t HRilNetwork::SetNotificationFilter(int32_t serialId, int32_t newFilter)
154 {
155     return RequestVendor(serialId, HREQ_NETWORK_SET_NOTIFICATION_FILTER, networkFuncs_,
156         &HRilNetworkReq::SetNotificationFilter, &newFilter);
157 }
158 
SetDeviceState(int32_t serialId,int32_t deviceStateType,int32_t deviceStateOn)159 int32_t HRilNetwork::SetDeviceState(int32_t serialId, int32_t deviceStateType, int32_t deviceStateOn)
160 {
161     return RequestVendor(serialId, HREQ_NETWORK_SET_DEVICE_STATE, networkFuncs_,
162         &HRilNetworkReq::SetDeviceState, &deviceStateType, &deviceStateOn);
163 }
164 
SetNrOptionMode(int32_t serialId,int32_t mode)165 int32_t HRilNetwork::SetNrOptionMode(int32_t serialId, int32_t mode)
166 {
167     return RequestVendor(
168         serialId, HREQ_NETWORK_SET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::SetNrOptionMode, &mode);
169 }
170 
GetNrOptionMode(int32_t serialId)171 int32_t HRilNetwork::GetNrOptionMode(int32_t serialId)
172 {
173     return RequestVendor(serialId, HREQ_NETWORK_GET_NR_OPTION_MODE, networkFuncs_, &HRilNetworkReq::GetNrOptionMode);
174 }
175 
GetRrcConnectionState(int32_t serialId)176 int32_t HRilNetwork::GetRrcConnectionState(int32_t serialId)
177 {
178     return RequestVendor(
179         serialId, HREQ_NETWORK_GET_RRC_CONNECTION_STATE, networkFuncs_, &HRilNetworkReq::GetRrcConnectionState);
180 }
181 
GetNrSsbId(int32_t serialId)182 int32_t HRilNetwork::GetNrSsbId(int32_t serialId)
183 {
184     return RequestVendor(
185         serialId, HREQ_NETWORK_GET_NR_SSBID_INFO, networkFuncs_, &HRilNetworkReq::GetNrSsbId);
186 }
187 
GetSignalStrengthResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)188 int32_t HRilNetwork::GetSignalStrengthResponse(
189     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
190 {
191     HDI::Ril::V1_1::Rssi rssi = {};
192     if (response == nullptr || responseLen != sizeof(HRilRssi)) {
193         TELEPHONY_LOGE("GetSignalStrengthResponse response is invalid");
194         if (responseInfo.error == HRilErrType::NONE) {
195             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
196         }
197     } else {
198         ExchangeRilRssiToHdf(response, rssi);
199     }
200     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSignalStrengthResponse, rssi);
201 }
202 
GetCsRegStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)203 int32_t HRilNetwork::GetCsRegStatusResponse(
204     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
205 {
206     HDI::Ril::V1_1::CsRegStatusInfo csRegStatusInfo = {};
207     if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
208         TELEPHONY_LOGE("GetCsRegStatusResponse response is invalid");
209         if (responseInfo.error == HRilErrType::NONE) {
210             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
211         }
212     } else {
213         const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
214         csRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode;
215         csRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
216         csRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode;
217         csRegStatusInfo.cellId = hrilRegStatusInfo->cellId;
218         csRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
219         TELEPHONY_LOGI("GetCsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, "
220                        "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d",
221             csRegStatusInfo.notifyType, csRegStatusInfo.regStatus, csRegStatusInfo.lacCode, csRegStatusInfo.cellId,
222             csRegStatusInfo.radioTechnology);
223     }
224     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCsRegStatusResponse, csRegStatusInfo);
225 }
226 
GetPsRegStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)227 int32_t HRilNetwork::GetPsRegStatusResponse(
228     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
229 {
230     HDI::Ril::V1_1::PsRegStatusInfo psRegStatusInfo = {};
231     if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
232         TELEPHONY_LOGE("GetPsRegStatusResponse response is invalid");
233         if (responseInfo.error == HRilErrType::NONE) {
234             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
235         }
236     } else {
237         const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
238         psRegStatusInfo.notifyType = hrilRegStatusInfo->notifyMode;
239         psRegStatusInfo.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
240         psRegStatusInfo.lacCode = hrilRegStatusInfo->lacCode;
241         psRegStatusInfo.cellId = hrilRegStatusInfo->cellId;
242         psRegStatusInfo.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
243         psRegStatusInfo.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted;
244         psRegStatusInfo.isNrAvailable = hrilRegStatusInfo->isNrAvailable;
245         psRegStatusInfo.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable;
246         TELEPHONY_LOGI(
247             "GetPsRegStatusResponse notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, "
248             "cellId:%{private}d, technology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, "
249             "isEnDcAvailable:%{private}d",
250             psRegStatusInfo.notifyType, psRegStatusInfo.regStatus, psRegStatusInfo.lacCode, psRegStatusInfo.cellId,
251             psRegStatusInfo.radioTechnology, psRegStatusInfo.isDcNrRestricted, psRegStatusInfo.isNrAvailable,
252             psRegStatusInfo.isEnDcAvailable);
253     }
254     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPsRegStatusResponse, psRegStatusInfo);
255 }
256 
GetOperatorInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)257 int32_t HRilNetwork::GetOperatorInfoResponse(
258     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
259 {
260     HDI::Ril::V1_1::OperatorInfo operatorInfoResult = {};
261     if (response == nullptr || responseLen == 0) {
262         TELEPHONY_LOGE("GetOperatorInfoResponse response is invalid");
263         if (responseInfo.error == HRilErrType::NONE) {
264             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
265         }
266     } else {
267         char **resp = static_cast<char **>(const_cast<void *>(response));
268         operatorInfoResult.longName = (resp[HRIL_LONE_NAME] == nullptr) ? "" : resp[HRIL_LONE_NAME];
269         operatorInfoResult.shortName = (resp[HRIL_SHORT_NAME] == nullptr) ? "" : resp[HRIL_SHORT_NAME];
270         operatorInfoResult.numeric = (resp[HRIL_NUMERIC] == nullptr) ? "" : resp[HRIL_NUMERIC];
271         TELEPHONY_LOGD("GetOperatorInfoResponse longName:%{public}s, shortName:%{public}s, numeric:%{public}s",
272             operatorInfoResult.longName.c_str(), operatorInfoResult.shortName.c_str(),
273             operatorInfoResult.numeric.c_str());
274     }
275     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetOperatorInfoResponse, operatorInfoResult);
276 }
277 
GetNetworkSearchInformationResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)278 int32_t HRilNetwork::GetNetworkSearchInformationResponse(
279     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
280 {
281     HDI::Ril::V1_1::AvailableNetworkList availableNetworkList = {};
282     if (response == nullptr || responseLen == 0) {
283         TELEPHONY_LOGE("GetNetworkSearchInformationResponse response is invalid");
284         if (responseInfo.error == HRilErrType::NONE) {
285             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
286         }
287     } else {
288         availableNetworkList.itemNum = 0;
289         BuildOperatorList(availableNetworkList, response, responseLen);
290     }
291     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSearchInformationResponse,
292         availableNetworkList);
293 }
294 
GetNetworkSelectionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)295 int32_t HRilNetwork::GetNetworkSelectionModeResponse(
296     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
297 {
298     HDI::Ril::V1_1::SetNetworkModeInfo selectModeInfo = {};
299     if (response == nullptr || responseLen != sizeof(int32_t)) {
300         TELEPHONY_LOGE("GetNetworkSelectionModeResponse response is invalid");
301         if (responseInfo.error == HRilErrType::NONE) {
302             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
303         }
304     } else {
305         int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response));
306         selectModeInfo.selectMode = *resp;
307         TELEPHONY_LOGI("GetNetworkSelectionModeResponse selectMode: %{public}d", selectModeInfo.selectMode);
308     }
309     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNetworkSelectionModeResponse, selectModeInfo);
310 }
311 
SetNetworkSelectionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)312 int32_t HRilNetwork::SetNetworkSelectionModeResponse(
313     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
314 {
315     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNetworkSelectionModeResponse);
316 }
317 
SetPreferredNetworkResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)318 int32_t HRilNetwork::SetPreferredNetworkResponse(
319     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
320 {
321     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetPreferredNetworkResponse);
322 }
323 
GetPreferredNetworkResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)324 int32_t HRilNetwork::GetPreferredNetworkResponse(
325     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
326 {
327     HDI::Ril::V1_1::PreferredNetworkTypeInfo preferredNetworkTypeInfo = {};
328     if (response == nullptr || responseLen != sizeof(int32_t)) {
329         TELEPHONY_LOGE("GetPreferredNetworkResponse response is invalid");
330         if (responseInfo.error == HRilErrType::NONE) {
331             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
332         }
333     } else {
334         int32_t *resp = static_cast<int32_t *>(const_cast<void *>(response));
335         preferredNetworkTypeInfo.preferredNetworkType = *resp;
336         TELEPHONY_LOGI("GetPreferredNetworkResponse preferredNetworkType: %{public}d", *resp);
337     }
338     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPreferredNetworkResponse, preferredNetworkTypeInfo);
339 }
340 
GetNeighboringCellInfoListResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)341 int32_t HRilNetwork::GetNeighboringCellInfoListResponse(
342     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
343 {
344     HDI::Ril::V1_1::CellListNearbyInfo cellInfoList;
345     if (response == nullptr || responseLen != sizeof(CellInfoList)) {
346         TELEPHONY_LOGE("GetNeighboringCellInfoListResponse response is invalid");
347         if (responseInfo.error == HRilErrType::NONE) {
348             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
349         }
350     } else {
351         cellInfoList.itemNum = 0;
352         cellInfoList.cellNearbyInfo.clear();
353         if (BuildNeighboringCellList(cellInfoList, response, responseLen) != 0) {
354             TELEPHONY_LOGE("GetNeighboringCellInfoListResponse BuildNeighboringCellList failed");
355             return HRIL_ERR_GENERIC_FAILURE;
356         }
357     }
358     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNeighboringCellInfoListResponse, cellInfoList);
359 }
360 
GetNeighboringCellInfoListResponse_1_2(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)361 int32_t HRilNetwork::GetNeighboringCellInfoListResponse_1_2(
362     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
363 {
364     HDI::Ril::V1_2::CellListNearbyInfo_1_2 cellInfoList;
365     if (response == nullptr || responseLen != sizeof(CellInfoList)) {
366         TELEPHONY_LOGE("response is invalid");
367         if (responseInfo.error == HRilErrType::NONE) {
368             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
369         }
370     } else {
371         cellInfoList.itemNum = 0;
372         cellInfoList.cellNearbyInfo.clear();
373         if (BuildNeighboringCellList(cellInfoList, response, responseLen) != 0) {
374             TELEPHONY_LOGE("BuildNeighboringCellList failed");
375             return HRIL_ERR_GENERIC_FAILURE;
376         }
377     }
378     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetNeighboringCellInfoListResponse_1_2, cellInfoList);
379 }
380 
GetCurrentCellInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)381 int32_t HRilNetwork::GetCurrentCellInfoResponse(
382     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
383 {
384     HDI::Ril::V1_1::CellListCurrentInfo cellList;
385     if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
386         TELEPHONY_LOGE("GetCurrentCellInfoResponse response is invalid");
387         if (responseInfo.error == HRilErrType::NONE) {
388             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
389         }
390     } else {
391         cellList.itemNum = 0;
392         cellList.cellCurrentInfo.clear();
393         if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
394             TELEPHONY_LOGE("GetCurrentCellInfoResponse BuildCurrentCellList failed");
395             return HRIL_ERR_GENERIC_FAILURE;
396         }
397     }
398     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse, cellList);
399 }
400 
GetCurrentCellInfoResponse_1_1(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)401 int32_t HRilNetwork::GetCurrentCellInfoResponse_1_1(
402     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
403 {
404     HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList;
405     if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
406         TELEPHONY_LOGE("response is invalid");
407         if (responseInfo.error == HRilErrType::NONE) {
408             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
409         }
410     } else {
411         cellList.itemNum = 0;
412         cellList.cellCurrentInfo.clear();
413         if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
414             TELEPHONY_LOGE("BuildCurrentCellList failed");
415             return HRIL_ERR_GENERIC_FAILURE;
416         }
417     }
418     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetCurrentCellInfoResponse_1_1, cellList);
419 }
420 
GetCurrentCellInfoResponse_1_2(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)421 int32_t HRilNetwork::GetCurrentCellInfoResponse_1_2(
422     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
423 {
424     HDI::Ril::V1_2::CellListCurrentInfo_1_2 cellList;
425     if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
426         TELEPHONY_LOGE("response is invalid");
427         if (responseInfo.error == HRilErrType::NONE) {
428             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
429         }
430     } else {
431         cellList.itemNum = 0;
432         cellList.cellCurrentInfo.clear();
433         if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
434             TELEPHONY_LOGE("BuildCurrentCellList failed");
435             return HRIL_ERR_GENERIC_FAILURE;
436         }
437     }
438     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetCurrentCellInfoResponse_1_2, cellList);
439 }
440 
GetPhysicalChannelConfigResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)441 int32_t HRilNetwork::GetPhysicalChannelConfigResponse(
442     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
443 {
444     HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {};
445     if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) {
446         TELEPHONY_LOGE("GetPhysicalChannelConfigResponse response is invalid");
447         if (responseInfo.error == HRilErrType::NONE) {
448             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
449         }
450     } else {
451         phyChnlCfgList.itemNum = 0;
452         phyChnlCfgList.channelConfigInfos.clear();
453         const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response);
454         phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum;
455         for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) {
456             HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg;
457             phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>(
458                 hrilChannelConfigList->channelConfigs[i].cellConnStatus);
459             phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz;
460             phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz;
461             phyChnlCfg.ratType =
462                 static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType);
463             phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange;
464             phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum;
465             phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum;
466             phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId;
467             phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum;
468             TELEPHONY_LOGI(
469                 "GetPhysicalChannelConfigResponse cellConnStatus:%{private}d, "
470                 "cellBandwidthDownlinkKhz:%{private}d, cellBandwidthUplinkKhz:%{private}d, physicalCellId:%{private}d, "
471                 "ratType:%{private}d, freqRange:%{private}d, downlinkChannelNum:%{private}d, "
472                 "uplinkChannelNum:%{private}d, contextIdNum:%{private}d",
473                 phyChnlCfg.cellConnStatus, phyChnlCfg.cellBandwidthDownlinkKhz, phyChnlCfg.cellBandwidthUplinkKhz,
474                 phyChnlCfg.ratType, phyChnlCfg.freqRange, phyChnlCfg.downlinkChannelNum, phyChnlCfg.uplinkChannelNum,
475                 phyChnlCfg.physicalCellId, phyChnlCfg.contextIdNum);
476             for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) {
477                 phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]);
478                 TELEPHONY_LOGI("contextIds:%{public}d---contextId:%{private}d", j, phyChnlCfg.contextIds[j]);
479             }
480             phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg);
481         }
482         TELEPHONY_LOGI("GetPhysicalChannelConfigResponse itemNum:%{public}d", phyChnlCfgList.itemNum);
483     }
484     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetPhysicalChannelConfigResponse, phyChnlCfgList);
485 }
486 
SetLocateUpdatesResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)487 int32_t HRilNetwork::SetLocateUpdatesResponse(
488     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
489 {
490     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetLocateUpdatesResponse);
491 }
492 
SetNotificationFilterResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)493 int32_t HRilNetwork::SetNotificationFilterResponse(
494     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
495 {
496     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNotificationFilterResponse);
497 }
498 
SetDeviceStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)499 int32_t HRilNetwork::SetDeviceStateResponse(
500     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
501 {
502     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetDeviceStateResponse);
503 }
504 
SetNrOptionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)505 int32_t HRilNetwork::SetNrOptionModeResponse(
506     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
507 {
508     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetNrOptionModeResponse);
509 }
510 
GetNrOptionModeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)511 int32_t HRilNetwork::GetNrOptionModeResponse(
512     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
513 {
514     int32_t nrOptionMode = 0;
515     if (response == nullptr || responseLen != sizeof(int32_t)) {
516         TELEPHONY_LOGE("GetNrOptionModeResponse response is invalid");
517         if (responseInfo.error == HRilErrType::NONE) {
518             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
519         }
520     } else {
521         nrOptionMode = *(static_cast<const int32_t *>(response));
522         TELEPHONY_LOGI("GetNrOptionModeResponse nrOptionMode: %{public}d", nrOptionMode);
523     }
524     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetNrOptionModeResponse, nrOptionMode);
525 }
526 
GetRrcConnectionStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)527 int32_t HRilNetwork::GetRrcConnectionStateResponse(
528     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
529 {
530     int32_t rrcConnectionState = 0;
531     if (response == nullptr || responseLen != sizeof(int32_t)) {
532         TELEPHONY_LOGE("GetRrcConnectionStateResponse response is invalid");
533         if (responseInfo.error == HRilErrType::NONE) {
534             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
535         }
536     } else {
537         rrcConnectionState = *(static_cast<const int32_t *>(response));
538         TELEPHONY_LOGD("GetRrcConnectionStateResponse rrcConnectionState: %{public}d", rrcConnectionState);
539     }
540     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateResponse, rrcConnectionState);
541 }
542 
GetNrSsbIdResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)543 int32_t HRilNetwork::GetNrSsbIdResponse(
544     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
545 {
546     HDI::Ril::V1_2::NrCellSsbIds nrCellSsbIds;
547     if (response == nullptr || responseLen != sizeof(NrCellSsbIdsVendor)) {
548         TELEPHONY_LOGE("Response is invalid");
549         if (responseInfo.error == HRilErrType::NONE) {
550             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
551         }
552     } else {
553         nrCellSsbIds.arfcn = 0;
554         nrCellSsbIds.cid = 0;
555         nrCellSsbIds.pic = 0;
556         nrCellSsbIds.rsrp = 0;
557         nrCellSsbIds.sinr = 0;
558         nrCellSsbIds.timeAdvance = 0;
559         nrCellSsbIds.sCellSsbList.clear();
560         nrCellSsbIds.nbCellCount = 0;
561         nrCellSsbIds.nbCellSsbList.clear();
562         if (BuildNrCellSsbIdsInfo(nrCellSsbIds, response, responseLen) != 0) {
563             TELEPHONY_LOGE("BuildNrCellSsbIdsInfo failed");
564             return HRIL_ERR_GENERIC_FAILURE;
565         }
566     }
567     return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::GetNrSsbIdResponse, nrCellSsbIds);
568 }
569 
NetworkCsRegStatusUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)570 int32_t HRilNetwork::NetworkCsRegStatusUpdated(
571     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
572 {
573     if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
574         TELEPHONY_LOGE("response is invalid");
575         return HRIL_ERR_INVALID_PARAMETER;
576     }
577     HDI::Ril::V1_1::CsRegStatusInfo regStatusInfoNotify = {};
578     const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
579     regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode;
580     regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
581     regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode;
582     regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId;
583     regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
584     TELEPHONY_LOGD("notifyType:%{public}d, regStatus:%{public}d, "
585                    "lacCode:%{private}d, cellId:%{private}d, radioTechnology:%{public}d",
586         regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode,
587         regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology);
588     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCsRegStatusUpdated, regStatusInfoNotify);
589 }
590 
NetworkPsRegStatusUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)591 int32_t HRilNetwork::NetworkPsRegStatusUpdated(
592     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
593 {
594     if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
595         TELEPHONY_LOGE("response is invalid");
596         return HRIL_ERR_INVALID_PARAMETER;
597     }
598     HDI::Ril::V1_1::PsRegStatusInfo regStatusInfoNotify = {};
599     const HRilRegStatusInfo *hrilRegStatusInfo = static_cast<const HRilRegStatusInfo *>(response);
600     regStatusInfoNotify.notifyType = hrilRegStatusInfo->notifyMode;
601     regStatusInfoNotify.regStatus = static_cast<HDI::Ril::V1_1::RilRegStatus>(hrilRegStatusInfo->regStatus);
602     regStatusInfoNotify.lacCode = hrilRegStatusInfo->lacCode;
603     regStatusInfoNotify.cellId = hrilRegStatusInfo->cellId;
604     regStatusInfoNotify.radioTechnology = static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilRegStatusInfo->actType);
605     regStatusInfoNotify.isDcNrRestricted = hrilRegStatusInfo->isDcNrRestricted;
606     regStatusInfoNotify.isNrAvailable = hrilRegStatusInfo->isNrAvailable;
607     regStatusInfoNotify.isEnDcAvailable = hrilRegStatusInfo->isEnDcAvailable;
608     TELEPHONY_LOGD(
609         "notifyType:%{public}d, regStatus:%{public}d, lacCode:%{private}d, cellId:%{private}d, "
610         "radioTechnology:%{public}d, isDcNrRestricted:%{private}d, isNrAvailable:%{private}d, "
611         "isEnDcAvailable:%{private}d",
612         regStatusInfoNotify.notifyType, regStatusInfoNotify.regStatus, regStatusInfoNotify.lacCode,
613         regStatusInfoNotify.cellId, regStatusInfoNotify.radioTechnology, regStatusInfoNotify.isDcNrRestricted,
614         regStatusInfoNotify.isNrAvailable, regStatusInfoNotify.isEnDcAvailable);
615     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPsRegStatusUpdated, regStatusInfoNotify);
616 }
617 
SignalStrengthUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)618 int32_t HRilNetwork::SignalStrengthUpdated(
619     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
620 {
621     if (response == nullptr || responseLen != sizeof(HRilRssi)) {
622         TELEPHONY_LOGE("SignalStrengthUpdated response is invalid");
623         return HRIL_ERR_INVALID_PARAMETER;
624     }
625     HDI::Ril::V1_1::Rssi rssi = {};
626     ExchangeRilRssiToHdf(response, rssi);
627     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::SignalStrengthUpdated, rssi);
628 }
629 
NetworkTimeUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)630 int32_t HRilNetwork::NetworkTimeUpdated(
631     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
632 {
633     if (response == nullptr) {
634         TELEPHONY_LOGE("NetworkTimeUpdated response is invalid");
635         return HRIL_ERR_INVALID_PARAMETER;
636     }
637     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeUpdated, (const char *)response);
638 }
639 
NetworkTimeZoneUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)640 int32_t HRilNetwork::NetworkTimeZoneUpdated(
641     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
642 {
643     if (response == nullptr) {
644         TELEPHONY_LOGE("NetworkTimeZoneUpdated response is invalid");
645         return HRIL_ERR_INVALID_PARAMETER;
646     }
647     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkTimeZoneUpdated, (const char *)response);
648 }
649 
NetworkPhyChnlCfgUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)650 int32_t HRilNetwork::NetworkPhyChnlCfgUpdated(
651     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
652 {
653     if (response == nullptr || responseLen != sizeof(HRilChannelConfigList)) {
654         TELEPHONY_LOGE("NetworkPhyChnlCfgUpdated response is invalid");
655         return HRIL_ERR_INVALID_PARAMETER;
656     }
657     HDI::Ril::V1_1::ChannelConfigInfoList phyChnlCfgList = {};
658     phyChnlCfgList.itemNum = 0;
659     phyChnlCfgList.channelConfigInfos.clear();
660     const HRilChannelConfigList *hrilChannelConfigList = static_cast<const HRilChannelConfigList *>(response);
661     phyChnlCfgList.itemNum = hrilChannelConfigList->itemNum;
662     for (int32_t i = 0; i < phyChnlCfgList.itemNum; i++) {
663         HDI::Ril::V1_1::PhysicalChannelConfig phyChnlCfg;
664         phyChnlCfg.cellConnStatus = static_cast<HDI::Ril::V1_1::RilCellConnectionStatus>(
665             hrilChannelConfigList->channelConfigs[i].cellConnStatus);
666         phyChnlCfg.cellBandwidthDownlinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthDownlinkKhz;
667         phyChnlCfg.cellBandwidthUplinkKhz = hrilChannelConfigList->channelConfigs[i].cellBandwidthUplinkKhz;
668         phyChnlCfg.ratType =
669             static_cast<HDI::Ril::V1_1::RilRadioTech>(hrilChannelConfigList->channelConfigs[i].ratType);
670         phyChnlCfg.freqRange = hrilChannelConfigList->channelConfigs[i].freqRange;
671         phyChnlCfg.downlinkChannelNum = hrilChannelConfigList->channelConfigs[i].downlinkChannelNum;
672         phyChnlCfg.uplinkChannelNum = hrilChannelConfigList->channelConfigs[i].uplinkChannelNum;
673         phyChnlCfg.physicalCellId = hrilChannelConfigList->channelConfigs[i].physicalCellId;
674         phyChnlCfg.contextIdNum = hrilChannelConfigList->channelConfigs[i].contextIdNum;
675         for (int32_t j = 0; j < phyChnlCfg.contextIdNum; j++) {
676             phyChnlCfg.contextIds.push_back(hrilChannelConfigList->channelConfigs[i].contextIds[j]);
677         }
678         phyChnlCfgList.channelConfigInfos.push_back(phyChnlCfg);
679     }
680     TELEPHONY_LOGI("NetworkPhyChnlCfgUpdated itemNum:%{public}d", phyChnlCfgList.itemNum);
681     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkPhyChnlCfgUpdated, phyChnlCfgList);
682 }
683 
NetworkCurrentCellUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)684 int32_t HRilNetwork::NetworkCurrentCellUpdated(
685     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
686 {
687     if (response == nullptr || responseLen != sizeof(HRilRegStatusInfo)) {
688         TELEPHONY_LOGE("NetworkCurrentCellUpdated response is invalid");
689         return HRIL_ERR_INVALID_PARAMETER;
690     }
691     HDI::Ril::V1_1::CellListCurrentInfo cellList;
692     cellList.itemNum = 0;
693     cellList.cellCurrentInfo.clear();
694     if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
695         TELEPHONY_LOGE("NetworkCurrentCellUpdated BuildCurrentCellList failed");
696         return HRIL_ERR_GENERIC_FAILURE;
697     }
698     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated, cellList);
699 }
700 
NetworkCurrentCellUpdated_1_2(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)701 int32_t HRilNetwork::NetworkCurrentCellUpdated_1_2(
702     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
703 {
704     if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
705         TELEPHONY_LOGE("response is invalid");
706         return HRIL_ERR_INVALID_PARAMETER;
707     }
708     HDI::Ril::V1_2::CellListCurrentInfo_1_2 cellList;
709     cellList.itemNum = 0;
710     cellList.cellCurrentInfo.clear();
711     if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
712         TELEPHONY_LOGE("BuildCurrentCellInfoList failed");
713         return HRIL_ERR_GENERIC_FAILURE;
714     }
715     return Notify(indType, error, &HDI::Ril::V1_2::IRilCallback::NetworkCurrentCellUpdated_1_2, cellList);
716 }
717 
GetRrcConnectionStateUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)718 int32_t HRilNetwork::GetRrcConnectionStateUpdated(
719     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
720 {
721     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) {
722         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
723         return HRIL_ERR_INVALID_PARAMETER;
724     }
725     if (response == nullptr) {
726         TELEPHONY_LOGE("response is null");
727         return HRIL_ERR_NULL_POINT;
728     }
729     return Notify(
730         indType, error, &HDI::Ril::V1_1::IRilCallback::GetRrcConnectionStateUpdated, *(const int32_t *)response);
731 }
732 
NetworkCurrentCellUpdated_1_1(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)733 int32_t HRilNetwork::NetworkCurrentCellUpdated_1_1(
734     int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
735 {
736     if (response == nullptr || responseLen != sizeof(CurrentCellInfoList)) {
737         TELEPHONY_LOGE("response is invalid");
738         return HRIL_ERR_INVALID_PARAMETER;
739     }
740     HDI::Ril::V1_1::CellListCurrentInfo_1_1 cellList;
741     cellList.itemNum = 0;
742     cellList.cellCurrentInfo.clear();
743     if (BuildCurrentCellList(cellList, response, responseLen) != 0) {
744         TELEPHONY_LOGE("BuildCurrentCellList failed");
745         return HRIL_ERR_GENERIC_FAILURE;
746     }
747     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::NetworkCurrentCellUpdated_1_1, cellList);
748 }
749 
ResidentNetworkUpdated(int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)750 int32_t HRilNetwork::ResidentNetworkUpdated(int32_t indType, const HRilErrNumber error, const void *response,
751     size_t responseLen)
752 {
753     if (response == nullptr) {
754         TELEPHONY_LOGE("ResidentNetworkUpdated response is invalid");
755         return HRIL_ERR_INVALID_PARAMETER;
756     }
757     return Notify(indType, error, &HDI::Ril::V1_2::IRilCallback::ResidentNetworkUpdated, (const char *)response);
758 }
759 
ExchangeRilRssiToHdf(const void * response,HDI::Ril::V1_1::Rssi & rssi)760 void HRilNetwork::ExchangeRilRssiToHdf(const void *response, HDI::Ril::V1_1::Rssi &rssi)
761 {
762     HRilRssi *rilRssi = (HRilRssi *)response;
763     rssi.gw.rxlev = rilRssi->gsmRssi.rxlev;
764     rssi.gw.ber = rilRssi->gsmRssi.ber;
765     rssi.cdma.absoluteRssi = rilRssi->cdmaRssi.absoluteRssi;
766     rssi.cdma.ecno = rilRssi->cdmaRssi.ecno;
767     rssi.wcdma.rxlev = rilRssi->wcdmaRssi.rxlev;
768     rssi.wcdma.ber = rilRssi->wcdmaRssi.ber;
769     rssi.wcdma.ecio = rilRssi->wcdmaRssi.ecio;
770     rssi.wcdma.rscp = rilRssi->wcdmaRssi.rscp;
771     rssi.lte.rxlev = rilRssi->lteRssi.rxlev;
772     rssi.lte.rsrp = rilRssi->lteRssi.rsrp;
773     rssi.lte.rsrq = rilRssi->lteRssi.rsrq;
774     rssi.lte.snr = rilRssi->lteRssi.snr;
775     rssi.tdScdma.rscp = rilRssi->tdScdmaRssi.rscp;
776     rssi.nr.rsrp = rilRssi->nrRssi.rsrp;
777     rssi.nr.rsrq = rilRssi->nrRssi.rsrq;
778     rssi.nr.sinr = rilRssi->nrRssi.sinr;
779     TELEPHONY_LOGD("ExchangeRilRssiToHdf rxlev:%{public}d, rsrp:%{public}d", rssi.lte.rxlev, rssi.lte.rsrp);
780 }
781 
BuildOperatorList(HDI::Ril::V1_1::AvailableNetworkList & availableNetworkList,const void * response,size_t responseLen)782 void HRilNetwork::BuildOperatorList(
783     HDI::Ril::V1_1::AvailableNetworkList &availableNetworkList, const void *response, size_t responseLen)
784 {
785     size_t numStrings = responseLen / sizeof(AvailableOperInfo *);
786     HDI::Ril::V1_1::AvailableNetworkInfo operInfo = {};
787     availableNetworkList.itemNum = numStrings;
788     TELEPHONY_LOGI(
789         "BuildOperatorList availableNetworkList.itemNum: %{public}lu", static_cast<unsigned long>(numStrings));
790     for (size_t i = 0; i < numStrings; i++) {
791         AvailableOperInfo *curPtr = ((AvailableOperInfo **)response)[i];
792         if (curPtr != nullptr) {
793             operInfo.status = curPtr->status;
794             TELEPHONY_LOGI("operInfo.status:%{public}d", curPtr->status);
795             operInfo.longName = (curPtr->longName == nullptr) ? "" : curPtr->longName;
796             TELEPHONY_LOGI("operInfo.longName:%{public}s", curPtr->longName);
797             operInfo.numeric = (curPtr->numeric == nullptr) ? "" : curPtr->numeric;
798             TELEPHONY_LOGI("operInfo.numeric:%{public}s", curPtr->numeric);
799             operInfo.shortName = (curPtr->shortName == nullptr) ? "" : curPtr->shortName;
800             TELEPHONY_LOGI("operInfo.shortName:%{public}s", curPtr->shortName);
801             operInfo.rat = curPtr->rat;
802             TELEPHONY_LOGI("operInfo.rat:%{public}d", curPtr->rat);
803             availableNetworkList.availableNetworkInfo.push_back(operInfo);
804         }
805     }
806 }
807 
FillCellNearbyInfo(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * cellPtr)808 void HRilNetwork::FillCellNearbyInfo(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *cellPtr)
809 {
810     cellInfo.ratType = cellPtr->ratType;
811     switch (cellPtr->ratType) {
812         case NETWORK_TYPE_GSM:
813             cellInfo.serviceCells.gsm.band = cellPtr->ServiceCellParas.gsm.band;
814             cellInfo.serviceCells.gsm.arfcn = cellPtr->ServiceCellParas.gsm.arfcn;
815             cellInfo.serviceCells.gsm.bsic = cellPtr->ServiceCellParas.gsm.bsic;
816             cellInfo.serviceCells.gsm.cellId = cellPtr->ServiceCellParas.gsm.cellId;
817             cellInfo.serviceCells.gsm.lac = cellPtr->ServiceCellParas.gsm.lac;
818             cellInfo.serviceCells.gsm.rxlev = cellPtr->ServiceCellParas.gsm.rxlev;
819             break;
820         case NETWORK_TYPE_LTE:
821             cellInfo.serviceCells.lte.arfcn = cellPtr->ServiceCellParas.lte.arfcn;
822             cellInfo.serviceCells.lte.pci = cellPtr->ServiceCellParas.lte.pci;
823             cellInfo.serviceCells.lte.rsrp = cellPtr->ServiceCellParas.lte.rsrp;
824             cellInfo.serviceCells.lte.rsrq = cellPtr->ServiceCellParas.lte.rsrq;
825             cellInfo.serviceCells.lte.rxlev = cellPtr->ServiceCellParas.lte.rxlev;
826             break;
827         case NETWORK_TYPE_WCDMA:
828             cellInfo.serviceCells.wcdma.arfcn = cellPtr->ServiceCellParas.wcdma.arfcn;
829             cellInfo.serviceCells.wcdma.psc = cellPtr->ServiceCellParas.wcdma.psc;
830             cellInfo.serviceCells.wcdma.rscp = cellPtr->ServiceCellParas.wcdma.rscp;
831             cellInfo.serviceCells.wcdma.ecno = cellPtr->ServiceCellParas.wcdma.ecno;
832             break;
833         case NETWORK_TYPE_CDMA:
834             FillCellNearbyInfoCdma(cellInfo, cellPtr);
835             break;
836         case NETWORK_TYPE_TDSCDMA:
837             FillCellNearbyInfoTdscdma(cellInfo, cellPtr);
838             break;
839         case NETWORK_TYPE_NR:
840             cellInfo.serviceCells.nr.nrArfcn = cellPtr->ServiceCellParas.nr.nrArfcn;
841             cellInfo.serviceCells.nr.pci = cellPtr->ServiceCellParas.nr.pci;
842             cellInfo.serviceCells.nr.tac = cellPtr->ServiceCellParas.nr.tac;
843             cellInfo.serviceCells.nr.nci = cellPtr->ServiceCellParas.nr.nci;
844             break;
845         default:
846             cellInfo.serviceCells.gsm.band = 0;
847             cellInfo.serviceCells.gsm.arfcn = 0;
848             cellInfo.serviceCells.gsm.bsic = 0;
849             cellInfo.serviceCells.gsm.cellId = 0;
850             cellInfo.serviceCells.gsm.lac = 0;
851             cellInfo.serviceCells.gsm.rxlev = 0;
852             break;
853     }
854 }
855 
FillCellNearbyInfoTdscdma(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * hrilCellPtr)856 void HRilNetwork::FillCellNearbyInfoTdscdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr)
857 {
858     cellInfo.serviceCells.tdscdma.arfcn = hrilCellPtr->ServiceCellParas.tdscdma.arfcn;
859     cellInfo.serviceCells.tdscdma.syncId = hrilCellPtr->ServiceCellParas.tdscdma.syncId;
860     cellInfo.serviceCells.tdscdma.sc = hrilCellPtr->ServiceCellParas.tdscdma.sc;
861     cellInfo.serviceCells.tdscdma.cellId = hrilCellPtr->ServiceCellParas.tdscdma.cellId;
862     cellInfo.serviceCells.tdscdma.lac = hrilCellPtr->ServiceCellParas.tdscdma.lac;
863     cellInfo.serviceCells.tdscdma.rscp = hrilCellPtr->ServiceCellParas.tdscdma.rscp;
864     cellInfo.serviceCells.tdscdma.drx = hrilCellPtr->ServiceCellParas.tdscdma.drx;
865     cellInfo.serviceCells.tdscdma.rac = hrilCellPtr->ServiceCellParas.tdscdma.rac;
866     cellInfo.serviceCells.tdscdma.cpid = hrilCellPtr->ServiceCellParas.tdscdma.cpid;
867 }
868 
FillCellNearbyInfoCdma(HDI::Ril::V1_1::CellNearbyInfo & cellInfo,const CellInfo * hrilCellPtr)869 void HRilNetwork::FillCellNearbyInfoCdma(HDI::Ril::V1_1::CellNearbyInfo &cellInfo, const CellInfo *hrilCellPtr)
870 {
871     cellInfo.serviceCells.cdma.systemId = hrilCellPtr->ServiceCellParas.cdma.systemId;
872     cellInfo.serviceCells.cdma.networkId = hrilCellPtr->ServiceCellParas.cdma.networkId;
873     cellInfo.serviceCells.cdma.baseId = hrilCellPtr->ServiceCellParas.cdma.baseId;
874     cellInfo.serviceCells.cdma.zoneId = hrilCellPtr->ServiceCellParas.cdma.zoneId;
875     cellInfo.serviceCells.cdma.pilotPn = hrilCellPtr->ServiceCellParas.cdma.pilotPn;
876     cellInfo.serviceCells.cdma.pilotStrength = hrilCellPtr->ServiceCellParas.cdma.pilotStrength;
877     cellInfo.serviceCells.cdma.channel = hrilCellPtr->ServiceCellParas.cdma.channel;
878     cellInfo.serviceCells.cdma.longitude = hrilCellPtr->ServiceCellParas.cdma.longitude;
879     cellInfo.serviceCells.cdma.latitude = hrilCellPtr->ServiceCellParas.cdma.latitude;
880 }
881 
FillCellNearbyInfo(HDI::Ril::V1_2::CellNearbyInfo_1_2 & cellInfo,const CellInfo * cellPtr)882 void HRilNetwork::FillCellNearbyInfo(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *cellPtr)
883 {
884     cellInfo.ratType = cellPtr->ratType;
885     switch (cellPtr->ratType) {
886         case NETWORK_TYPE_GSM:
887             cellInfo.serviceCells.gsm.band = cellPtr->ServiceCellParas.gsm.band;
888             cellInfo.serviceCells.gsm.arfcn = cellPtr->ServiceCellParas.gsm.arfcn;
889             cellInfo.serviceCells.gsm.bsic = cellPtr->ServiceCellParas.gsm.bsic;
890             cellInfo.serviceCells.gsm.cellId = cellPtr->ServiceCellParas.gsm.cellId;
891             cellInfo.serviceCells.gsm.lac = cellPtr->ServiceCellParas.gsm.lac;
892             cellInfo.serviceCells.gsm.rxlev = cellPtr->ServiceCellParas.gsm.rxlev;
893             break;
894         case NETWORK_TYPE_LTE:
895             cellInfo.serviceCells.lte.arfcn = cellPtr->ServiceCellParas.lte.arfcn;
896             cellInfo.serviceCells.lte.pci = cellPtr->ServiceCellParas.lte.pci;
897             cellInfo.serviceCells.lte.rsrp = cellPtr->ServiceCellParas.lte.rsrp;
898             cellInfo.serviceCells.lte.rsrq = cellPtr->ServiceCellParas.lte.rsrq;
899             cellInfo.serviceCells.lte.rxlev = cellPtr->ServiceCellParas.lte.rxlev;
900             break;
901         case NETWORK_TYPE_WCDMA:
902             cellInfo.serviceCells.wcdma.arfcn = cellPtr->ServiceCellParas.wcdma.arfcn;
903             cellInfo.serviceCells.wcdma.psc = cellPtr->ServiceCellParas.wcdma.psc;
904             cellInfo.serviceCells.wcdma.rscp = cellPtr->ServiceCellParas.wcdma.rscp;
905             cellInfo.serviceCells.wcdma.ecno = cellPtr->ServiceCellParas.wcdma.ecno;
906             break;
907         case NETWORK_TYPE_CDMA:
908             FillCellNearbyInfoCdma(cellInfo, cellPtr);
909             break;
910         case NETWORK_TYPE_TDSCDMA:
911             FillCellNearbyInfoTdscdma(cellInfo, cellPtr);
912             break;
913         case NETWORK_TYPE_NR:
914             cellInfo.serviceCells.nr.nrArfcn = cellPtr->ServiceCellParas.nr.nrArfcn;
915             cellInfo.serviceCells.nr.pci = cellPtr->ServiceCellParas.nr.pci;
916             cellInfo.serviceCells.nr.tac = cellPtr->ServiceCellParas.nr.tac;
917             cellInfo.serviceCells.nr.nci = cellPtr->ServiceCellParas.nr.nci;
918             cellInfo.serviceCells.nr.rsrp = cellPtr->ServiceCellParas.nr.rsrp;
919             cellInfo.serviceCells.nr.rsrq = cellPtr->ServiceCellParas.nr.rsrq;
920             break;
921         default:
922             cellInfo.serviceCells.gsm.band = 0;
923             cellInfo.serviceCells.gsm.arfcn = 0;
924             cellInfo.serviceCells.gsm.bsic = 0;
925             cellInfo.serviceCells.gsm.cellId = 0;
926             cellInfo.serviceCells.gsm.lac = 0;
927             cellInfo.serviceCells.gsm.rxlev = 0;
928             break;
929     }
930 }
931 
FillCellNearbyInfoTdscdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 & cellInfo,const CellInfo * hrilCellPtr)932 void HRilNetwork::FillCellNearbyInfoTdscdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *hrilCellPtr)
933 {
934     cellInfo.serviceCells.tdscdma.arfcn = hrilCellPtr->ServiceCellParas.tdscdma.arfcn;
935     cellInfo.serviceCells.tdscdma.syncId = hrilCellPtr->ServiceCellParas.tdscdma.syncId;
936     cellInfo.serviceCells.tdscdma.sc = hrilCellPtr->ServiceCellParas.tdscdma.sc;
937     cellInfo.serviceCells.tdscdma.cellId = hrilCellPtr->ServiceCellParas.tdscdma.cellId;
938     cellInfo.serviceCells.tdscdma.lac = hrilCellPtr->ServiceCellParas.tdscdma.lac;
939     cellInfo.serviceCells.tdscdma.rscp = hrilCellPtr->ServiceCellParas.tdscdma.rscp;
940     cellInfo.serviceCells.tdscdma.drx = hrilCellPtr->ServiceCellParas.tdscdma.drx;
941     cellInfo.serviceCells.tdscdma.rac = hrilCellPtr->ServiceCellParas.tdscdma.rac;
942     cellInfo.serviceCells.tdscdma.cpid = hrilCellPtr->ServiceCellParas.tdscdma.cpid;
943 }
944 
FillCellNearbyInfoCdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 & cellInfo,const CellInfo * hrilCellPtr)945 void HRilNetwork::FillCellNearbyInfoCdma(HDI::Ril::V1_2::CellNearbyInfo_1_2 &cellInfo, const CellInfo *hrilCellPtr)
946 {
947     cellInfo.serviceCells.cdma.systemId = hrilCellPtr->ServiceCellParas.cdma.systemId;
948     cellInfo.serviceCells.cdma.networkId = hrilCellPtr->ServiceCellParas.cdma.networkId;
949     cellInfo.serviceCells.cdma.baseId = hrilCellPtr->ServiceCellParas.cdma.baseId;
950     cellInfo.serviceCells.cdma.zoneId = hrilCellPtr->ServiceCellParas.cdma.zoneId;
951     cellInfo.serviceCells.cdma.pilotPn = hrilCellPtr->ServiceCellParas.cdma.pilotPn;
952     cellInfo.serviceCells.cdma.pilotStrength = hrilCellPtr->ServiceCellParas.cdma.pilotStrength;
953     cellInfo.serviceCells.cdma.channel = hrilCellPtr->ServiceCellParas.cdma.channel;
954     cellInfo.serviceCells.cdma.longitude = hrilCellPtr->ServiceCellParas.cdma.longitude;
955     cellInfo.serviceCells.cdma.latitude = hrilCellPtr->ServiceCellParas.cdma.latitude;
956 }
957 
BuildNeighboringCellList(HDI::Ril::V1_1::CellListNearbyInfo & cellInfoList,const void * response,size_t responseLen)958 int32_t HRilNetwork::BuildNeighboringCellList(
959     HDI::Ril::V1_1::CellListNearbyInfo &cellInfoList, const void *response, size_t responseLen)
960 {
961     const CellInfoList *temp = reinterpret_cast<const CellInfoList *>(response);
962     cellInfoList.itemNum = temp->itemNum;
963     TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
964     for (int32_t i = 0; i < temp->itemNum; i++) {
965         HDI::Ril::V1_1::CellNearbyInfo cellInfo;
966         CellInfo *cell = temp->cellNearbyInfo + i;
967         if (cell == nullptr) {
968             TELEPHONY_LOGE("cell is nullptr");
969             return HRIL_ERR_GENERIC_FAILURE;
970         }
971         FillCellNearbyInfo(cellInfo, cell);
972         cellInfoList.cellNearbyInfo.push_back(cellInfo);
973     }
974     return HRIL_ERR_SUCCESS;
975 }
976 
BuildNeighboringCellList(HDI::Ril::V1_2::CellListNearbyInfo_1_2 & cellInfoList,const void * response,size_t responseLen)977 int32_t HRilNetwork::BuildNeighboringCellList(
978     HDI::Ril::V1_2::CellListNearbyInfo_1_2 &cellInfoList, const void *response, size_t responseLen)
979 {
980     const CellInfoList *temp = reinterpret_cast<const CellInfoList *>(response);
981     cellInfoList.itemNum = temp->itemNum;
982     TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
983     for (int32_t i = 0; i < temp->itemNum; i++) {
984         HDI::Ril::V1_2::CellNearbyInfo_1_2 cellInfo;
985         CellInfo *cell = temp->cellNearbyInfo + i;
986         if (cell == nullptr) {
987             TELEPHONY_LOGE("cell is nullptr");
988             return HRIL_ERR_GENERIC_FAILURE;
989         }
990         FillCellNearbyInfo(cellInfo, cell);
991         cellInfoList.cellNearbyInfo.push_back(cellInfo);
992     }
993     return HRIL_ERR_SUCCESS;
994 }
995 
FillCellInfoType(HDI::Ril::V1_1::CurrentCellInfo & cellInfo,const CurrentCellInfoVendor * hrilCellInfoVendor)996 void HRilNetwork::FillCellInfoType(
997     HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor)
998 {
999     if (hrilCellInfoVendor->ratType == NETWORK_TYPE_WCDMA) {
1000         cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn;
1001         cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId;
1002         cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc;
1003         cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac;
1004         cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev;
1005         cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp;
1006         cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno;
1007         cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura;
1008         cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx;
1009     } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_CDMA) {
1010         cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId;
1011         cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId;
1012         cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId;
1013         cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId;
1014         cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn;
1015         cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength;
1016         cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel;
1017         cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude;
1018         cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude;
1019     } else if (hrilCellInfoVendor->ratType == NETWORK_TYPE_TDSCDMA) {
1020         cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn;
1021         cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId;
1022         cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc;
1023         cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId;
1024         cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac;
1025         cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp;
1026         cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx;
1027         cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac;
1028         cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid;
1029     }
1030 }
1031 
FillCellInfoType(HDI::Ril::V1_1::CurrentCellInfo_1_1 & cellInfo,const CurrentCellInfoVendor * hrilCellInfoVendor)1032 void HRilNetwork::FillCellInfoType(
1033     HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor)
1034 {
1035     switch (hrilCellInfoVendor->ratType) {
1036         case NETWORK_TYPE_WCDMA:
1037             cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn;
1038             cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId;
1039             cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc;
1040             cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac;
1041             cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev;
1042             cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp;
1043             cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno;
1044             cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura;
1045             cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx;
1046             break;
1047         case NETWORK_TYPE_CDMA:
1048             cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId;
1049             cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId;
1050             cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId;
1051             cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId;
1052             cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn;
1053             cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength;
1054             cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel;
1055             cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude;
1056             cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude;
1057             break;
1058         case NETWORK_TYPE_TDSCDMA:
1059             cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn;
1060             cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId;
1061             cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc;
1062             cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId;
1063             cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac;
1064             cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp;
1065             cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx;
1066             cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac;
1067             cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid;
1068             break;
1069         case NETWORK_TYPE_NR:
1070             cellInfo.serviceCells.nr.nrArfcn = hrilCellInfoVendor->ServiceCellParas.nr.nrArfcn;
1071             cellInfo.serviceCells.nr.pci = hrilCellInfoVendor->ServiceCellParas.nr.pci;
1072             cellInfo.serviceCells.nr.tac = hrilCellInfoVendor->ServiceCellParas.nr.tac;
1073             cellInfo.serviceCells.nr.nci = hrilCellInfoVendor->ServiceCellParas.nr.nci;
1074             cellInfo.serviceCells.nr.rsrp = hrilCellInfoVendor->ServiceCellParas.nr.rsrp;
1075             cellInfo.serviceCells.nr.rsrq = hrilCellInfoVendor->ServiceCellParas.nr.rsrq;
1076             break;
1077         default:
1078             break;
1079     }
1080 }
1081 
FillCellInfoType(HDI::Ril::V1_2::CurrentCellInfo_1_2 & cellInfo,const CurrentCellInfoVendor * hrilCellInfoVendor)1082 void HRilNetwork::FillCellInfoType(
1083     HDI::Ril::V1_2::CurrentCellInfo_1_2 &cellInfo, const CurrentCellInfoVendor *hrilCellInfoVendor)
1084 {
1085     switch (hrilCellInfoVendor->ratType) {
1086         case NETWORK_TYPE_WCDMA:
1087             cellInfo.serviceCells.wcdma.arfcn = hrilCellInfoVendor->ServiceCellParas.wcdma.arfcn;
1088             cellInfo.serviceCells.wcdma.cellId = hrilCellInfoVendor->ServiceCellParas.wcdma.cellId;
1089             cellInfo.serviceCells.wcdma.psc = hrilCellInfoVendor->ServiceCellParas.wcdma.psc;
1090             cellInfo.serviceCells.wcdma.lac = hrilCellInfoVendor->ServiceCellParas.wcdma.lac;
1091             cellInfo.serviceCells.wcdma.rxlev = hrilCellInfoVendor->ServiceCellParas.wcdma.rxlev;
1092             cellInfo.serviceCells.wcdma.rscp = hrilCellInfoVendor->ServiceCellParas.wcdma.rscp;
1093             cellInfo.serviceCells.wcdma.ecno = hrilCellInfoVendor->ServiceCellParas.wcdma.ecno;
1094             cellInfo.serviceCells.wcdma.ura = hrilCellInfoVendor->ServiceCellParas.wcdma.ura;
1095             cellInfo.serviceCells.wcdma.drx = hrilCellInfoVendor->ServiceCellParas.wcdma.drx;
1096             break;
1097         case NETWORK_TYPE_CDMA:
1098             cellInfo.serviceCells.cdma.systemId = hrilCellInfoVendor->ServiceCellParas.cdma.systemId;
1099             cellInfo.serviceCells.cdma.networkId = hrilCellInfoVendor->ServiceCellParas.cdma.networkId;
1100             cellInfo.serviceCells.cdma.baseId = hrilCellInfoVendor->ServiceCellParas.cdma.baseId;
1101             cellInfo.serviceCells.cdma.zoneId = hrilCellInfoVendor->ServiceCellParas.cdma.zoneId;
1102             cellInfo.serviceCells.cdma.pilotPn = hrilCellInfoVendor->ServiceCellParas.cdma.pilotPn;
1103             cellInfo.serviceCells.cdma.pilotStrength = hrilCellInfoVendor->ServiceCellParas.cdma.pilotStrength;
1104             cellInfo.serviceCells.cdma.channel = hrilCellInfoVendor->ServiceCellParas.cdma.channel;
1105             cellInfo.serviceCells.cdma.longitude = hrilCellInfoVendor->ServiceCellParas.cdma.longitude;
1106             cellInfo.serviceCells.cdma.latitude = hrilCellInfoVendor->ServiceCellParas.cdma.latitude;
1107             break;
1108         case NETWORK_TYPE_TDSCDMA:
1109             cellInfo.serviceCells.tdscdma.arfcn = hrilCellInfoVendor->ServiceCellParas.tdscdma.arfcn;
1110             cellInfo.serviceCells.tdscdma.syncId = hrilCellInfoVendor->ServiceCellParas.tdscdma.syncId;
1111             cellInfo.serviceCells.tdscdma.sc = hrilCellInfoVendor->ServiceCellParas.tdscdma.sc;
1112             cellInfo.serviceCells.tdscdma.cellId = hrilCellInfoVendor->ServiceCellParas.tdscdma.cellId;
1113             cellInfo.serviceCells.tdscdma.lac = hrilCellInfoVendor->ServiceCellParas.tdscdma.lac;
1114             cellInfo.serviceCells.tdscdma.rscp = hrilCellInfoVendor->ServiceCellParas.tdscdma.rscp;
1115             cellInfo.serviceCells.tdscdma.drx = hrilCellInfoVendor->ServiceCellParas.tdscdma.drx;
1116             cellInfo.serviceCells.tdscdma.rac = hrilCellInfoVendor->ServiceCellParas.tdscdma.rac;
1117             cellInfo.serviceCells.tdscdma.cpid = hrilCellInfoVendor->ServiceCellParas.tdscdma.cpid;
1118             break;
1119         case NETWORK_TYPE_NR:
1120             cellInfo.serviceCells.nr.nrArfcn = hrilCellInfoVendor->ServiceCellParas.nr.nrArfcn;
1121             cellInfo.serviceCells.nr.pci = hrilCellInfoVendor->ServiceCellParas.nr.pci;
1122             cellInfo.serviceCells.nr.tac = hrilCellInfoVendor->ServiceCellParas.nr.tac;
1123             cellInfo.serviceCells.nr.nci = hrilCellInfoVendor->ServiceCellParas.nr.nci;
1124             cellInfo.serviceCells.nr.rsrp = hrilCellInfoVendor->ServiceCellParas.nr.rsrp;
1125             cellInfo.serviceCells.nr.rsrq = hrilCellInfoVendor->ServiceCellParas.nr.rsrq;
1126             break;
1127         default:
1128             break;
1129     }
1130 }
1131 
FillCurrentCellInfo(HDI::Ril::V1_1::CurrentCellInfo & cellInfo,const CurrentCellInfoVendor * cellInfoVendor)1132 void HRilNetwork::FillCurrentCellInfo(
1133     HDI::Ril::V1_1::CurrentCellInfo &cellInfo, const CurrentCellInfoVendor *cellInfoVendor)
1134 {
1135     cellInfo.ratType = cellInfoVendor->ratType;
1136     cellInfo.mcc = cellInfoVendor->mcc;
1137     cellInfo.mnc = cellInfoVendor->mnc;
1138     switch (cellInfoVendor->ratType) {
1139         case NETWORK_TYPE_GSM:
1140             cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band;
1141             cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn;
1142             cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic;
1143             cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId;
1144             cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac;
1145             cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev;
1146             cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality;
1147             cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta;
1148             break;
1149         case NETWORK_TYPE_LTE:
1150             cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn;
1151             cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId;
1152             cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci;
1153             cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac;
1154             cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp;
1155             cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq;
1156             cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi;
1157             break;
1158         case NETWORK_TYPE_WCDMA:
1159         case NETWORK_TYPE_CDMA:
1160         case NETWORK_TYPE_TDSCDMA:
1161             FillCellInfoType(cellInfo, cellInfoVendor);
1162             break;
1163         case NETWORK_TYPE_NR:
1164             cellInfo.serviceCells.nr.nrArfcn = cellInfoVendor->ServiceCellParas.nr.nrArfcn;
1165             cellInfo.serviceCells.nr.pci = cellInfoVendor->ServiceCellParas.nr.pci;
1166             cellInfo.serviceCells.nr.tac = cellInfoVendor->ServiceCellParas.nr.tac;
1167             cellInfo.serviceCells.nr.nci = cellInfoVendor->ServiceCellParas.nr.nci;
1168             break;
1169         default:
1170             cellInfo.serviceCells.wcdma.arfcn = 0;
1171             cellInfo.serviceCells.wcdma.cellId = 0;
1172             cellInfo.serviceCells.wcdma.psc = 0;
1173             cellInfo.serviceCells.wcdma.lac = 0;
1174             cellInfo.serviceCells.wcdma.rxlev = 0;
1175             cellInfo.serviceCells.wcdma.rscp = 0;
1176             cellInfo.serviceCells.wcdma.ecno = 0;
1177             cellInfo.serviceCells.wcdma.drx = 0;
1178             cellInfo.serviceCells.wcdma.ura = 0;
1179             break;
1180     }
1181 }
1182 
FillCurrentCellInfo(HDI::Ril::V1_1::CurrentCellInfo_1_1 & cellInfo,const CurrentCellInfoVendor * cellInfoVendor)1183 void HRilNetwork::FillCurrentCellInfo(
1184     HDI::Ril::V1_1::CurrentCellInfo_1_1 &cellInfo, const CurrentCellInfoVendor *cellInfoVendor)
1185 {
1186     cellInfo.ratType = cellInfoVendor->ratType;
1187     cellInfo.mcc = cellInfoVendor->mcc;
1188     cellInfo.mnc = cellInfoVendor->mnc;
1189     switch (cellInfoVendor->ratType) {
1190         case NETWORK_TYPE_GSM:
1191             cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band;
1192             cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn;
1193             cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic;
1194             cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId;
1195             cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac;
1196             cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev;
1197             cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality;
1198             cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta;
1199             break;
1200         case NETWORK_TYPE_LTE:
1201             cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn;
1202             cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId;
1203             cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci;
1204             cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac;
1205             cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp;
1206             cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq;
1207             cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi;
1208             break;
1209         case NETWORK_TYPE_WCDMA:
1210         case NETWORK_TYPE_CDMA:
1211         case NETWORK_TYPE_TDSCDMA:
1212         case NETWORK_TYPE_NR:
1213             FillCellInfoType(cellInfo, cellInfoVendor);
1214             break;
1215         default:
1216             cellInfo.serviceCells.wcdma.arfcn = 0;
1217             cellInfo.serviceCells.wcdma.cellId = 0;
1218             cellInfo.serviceCells.wcdma.psc = 0;
1219             cellInfo.serviceCells.wcdma.lac = 0;
1220             cellInfo.serviceCells.wcdma.rxlev = 0;
1221             cellInfo.serviceCells.wcdma.rscp = 0;
1222             cellInfo.serviceCells.wcdma.ecno = 0;
1223             cellInfo.serviceCells.wcdma.drx = 0;
1224             cellInfo.serviceCells.wcdma.ura = 0;
1225             break;
1226     }
1227 }
1228 
FillCurrentCellInfo(HDI::Ril::V1_2::CurrentCellInfo_1_2 & cellInfo,const CurrentCellInfoVendor * cellInfoVendor)1229 void HRilNetwork::FillCurrentCellInfo(
1230     HDI::Ril::V1_2::CurrentCellInfo_1_2 &cellInfo, const CurrentCellInfoVendor *cellInfoVendor)
1231 {
1232     cellInfo.ratType = cellInfoVendor->ratType;
1233     cellInfo.mcc = cellInfoVendor->mcc;
1234     cellInfo.mnc = cellInfoVendor->mnc;
1235     switch (cellInfoVendor->ratType) {
1236         case NETWORK_TYPE_GSM:
1237             cellInfo.serviceCells.gsm.band = cellInfoVendor->ServiceCellParas.gsm.band;
1238             cellInfo.serviceCells.gsm.arfcn = cellInfoVendor->ServiceCellParas.gsm.arfcn;
1239             cellInfo.serviceCells.gsm.bsic = cellInfoVendor->ServiceCellParas.gsm.bsic;
1240             cellInfo.serviceCells.gsm.cellId = cellInfoVendor->ServiceCellParas.gsm.cellId;
1241             cellInfo.serviceCells.gsm.lac = cellInfoVendor->ServiceCellParas.gsm.lac;
1242             cellInfo.serviceCells.gsm.rxlev = cellInfoVendor->ServiceCellParas.gsm.rxlev;
1243             cellInfo.serviceCells.gsm.rxQuality = cellInfoVendor->ServiceCellParas.gsm.rxQuality;
1244             cellInfo.serviceCells.gsm.ta = cellInfoVendor->ServiceCellParas.gsm.ta;
1245             break;
1246         case NETWORK_TYPE_LTE:
1247             cellInfo.serviceCells.lte.arfcn = cellInfoVendor->ServiceCellParas.lte.arfcn;
1248             cellInfo.serviceCells.lte.cellId = cellInfoVendor->ServiceCellParas.lte.cellId;
1249             cellInfo.serviceCells.lte.pci = cellInfoVendor->ServiceCellParas.lte.pci;
1250             cellInfo.serviceCells.lte.tac = cellInfoVendor->ServiceCellParas.lte.tac;
1251             cellInfo.serviceCells.lte.rsrp = cellInfoVendor->ServiceCellParas.lte.rsrp;
1252             cellInfo.serviceCells.lte.rsrq = cellInfoVendor->ServiceCellParas.lte.rsrq;
1253             cellInfo.serviceCells.lte.rssi = cellInfoVendor->ServiceCellParas.lte.rssi;
1254             break;
1255         case NETWORK_TYPE_WCDMA:
1256         case NETWORK_TYPE_CDMA:
1257         case NETWORK_TYPE_TDSCDMA:
1258         case NETWORK_TYPE_NR:
1259             FillCellInfoType(cellInfo, cellInfoVendor);
1260             break;
1261         default:
1262             cellInfo.serviceCells.wcdma.arfcn = 0;
1263             cellInfo.serviceCells.wcdma.cellId = 0;
1264             cellInfo.serviceCells.wcdma.psc = 0;
1265             cellInfo.serviceCells.wcdma.lac = 0;
1266             cellInfo.serviceCells.wcdma.rxlev = 0;
1267             cellInfo.serviceCells.wcdma.rscp = 0;
1268             cellInfo.serviceCells.wcdma.ecno = 0;
1269             cellInfo.serviceCells.wcdma.drx = 0;
1270             cellInfo.serviceCells.wcdma.ura = 0;
1271             break;
1272     }
1273 }
1274 
BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo & cellInfoList,const void * response,size_t responseLen)1275 int32_t HRilNetwork::BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo &cellInfoList,
1276     const void *response, size_t responseLen)
1277 {
1278     const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response);
1279     cellInfoList.itemNum = temp->itemNum;
1280     TELEPHONY_LOGI("BuildCurrentCellList cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
1281     for (int32_t i = 0; i < temp->itemNum; i++) {
1282         HDI::Ril::V1_1::CurrentCellInfo cellInfo;
1283         CurrentCellInfoVendor *cell = temp->currentCellInfo + i;
1284         if (cell == nullptr) {
1285             TELEPHONY_LOGE("BuildCurrentCellList cell is nullptr");
1286             return HRIL_ERR_GENERIC_FAILURE;
1287         }
1288         FillCurrentCellInfo(cellInfo, cell);
1289         cellInfoList.cellCurrentInfo.push_back(cellInfo);
1290     }
1291     return HRIL_ERR_SUCCESS;
1292 }
1293 
BuildCurrentCellList(HDI::Ril::V1_1::CellListCurrentInfo_1_1 & cellInfoList,const void * response,size_t responseLen)1294 int32_t HRilNetwork::BuildCurrentCellList(
1295     HDI::Ril::V1_1::CellListCurrentInfo_1_1 &cellInfoList, const void *response, size_t responseLen)
1296 {
1297     const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response);
1298     cellInfoList.itemNum = temp->itemNum;
1299     TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
1300     for (int32_t i = 0; i < temp->itemNum; i++) {
1301         HDI::Ril::V1_1::CurrentCellInfo_1_1 cellInfo;
1302         CurrentCellInfoVendor *cell = temp->currentCellInfo + i;
1303         if (cell == nullptr) {
1304             TELEPHONY_LOGE("cell is nullptr");
1305             return HRIL_ERR_GENERIC_FAILURE;
1306         }
1307         FillCurrentCellInfo(cellInfo, cell);
1308         cellInfoList.cellCurrentInfo.push_back(cellInfo);
1309     }
1310     return HRIL_ERR_SUCCESS;
1311 }
1312 
BuildCurrentCellList(HDI::Ril::V1_2::CellListCurrentInfo_1_2 & cellInfoList,const void * response,size_t responseLen)1313 int32_t HRilNetwork::BuildCurrentCellList(
1314     HDI::Ril::V1_2::CellListCurrentInfo_1_2 &cellInfoList, const void *response, size_t responseLen)
1315 {
1316     const CurrentCellInfoList *temp = reinterpret_cast<const CurrentCellInfoList *>(response);
1317     cellInfoList.itemNum = temp->itemNum;
1318     TELEPHONY_LOGI("cellInfoList.itemNum = %{public}d", cellInfoList.itemNum);
1319     for (int32_t i = 0; i < temp->itemNum; i++) {
1320         HDI::Ril::V1_2::CurrentCellInfo_1_2 cellInfo;
1321         CurrentCellInfoVendor *cell = temp->currentCellInfo + i;
1322         if (cell == nullptr) {
1323             TELEPHONY_LOGE("cell is nullptr");
1324             return HRIL_ERR_GENERIC_FAILURE;
1325         }
1326         FillCurrentCellInfo(cellInfo, cell);
1327         cellInfoList.cellCurrentInfo.push_back(cellInfo);
1328     }
1329     return HRIL_ERR_SUCCESS;
1330 }
1331 
BuildNrCellSsbIdsInfo(HDI::Ril::V1_2::NrCellSsbIds & nrCellSsbIds,const void * response,size_t responseLen)1332 int32_t HRilNetwork::BuildNrCellSsbIdsInfo(HDI::Ril::V1_2::NrCellSsbIds &nrCellSsbIds,
1333     const void *response, size_t responseLen)
1334 {
1335     const NrCellSsbIdsVendor *temp = reinterpret_cast<const NrCellSsbIdsVendor *>(response);
1336     if (temp->nbCellCount > MAX_NBCELL_COUNT) {
1337         TELEPHONY_LOGE("NbCellCount > max size 4");
1338         return HRIL_ERR_GENERIC_FAILURE;
1339     }
1340     nrCellSsbIds.arfcn = temp->arfcn;
1341     nrCellSsbIds.cid = temp->cid;
1342     nrCellSsbIds.pic = temp->pic;
1343     nrCellSsbIds.rsrp = temp->rsrp;
1344     nrCellSsbIds.sinr = temp->sinr;
1345     nrCellSsbIds.timeAdvance = temp->timeAdvance;
1346     nrCellSsbIds.nbCellCount = temp->nbCellCount;
1347     for (int32_t i = 0; i < SCELL_SSB_LIST; i++) {
1348         HDI::Ril::V1_2::SsbIdInfo ssbIdInfo = {0};
1349         SsbIdInfoVendor *sCellSsbList = temp->sCellSsbList + i;
1350         ssbIdInfo.ssbId = sCellSsbList->ssbId;
1351         ssbIdInfo.rsrp = sCellSsbList->rsrp;
1352         nrCellSsbIds.sCellSsbList.push_back(ssbIdInfo);
1353     }
1354     for (int32_t i = 0; i < temp->nbCellCount; i++) {
1355         HDI::Ril::V1_2::NeighboringCellSsbInfo neighboringCellSsbInfo;
1356         neighboringCellSsbInfo.pci = temp->nbCellSsbList[i].pci;
1357         neighboringCellSsbInfo.arfcn = temp->nbCellSsbList[i].arfcn;
1358         neighboringCellSsbInfo.rsrp = temp->nbCellSsbList[i].rsrp;
1359         neighboringCellSsbInfo.sinr = temp->nbCellSsbList[i].sinr;
1360         for (int32_t j = 0; j < NBCELL_SSB_LIST; j++) {
1361             HDI::Ril::V1_2::SsbIdInfo ssbIdInfo = {0};
1362             SsbIdInfoVendor *sCellSsbList = temp->nbCellSsbList[i].ssbIdList + j;
1363             ssbIdInfo.ssbId = sCellSsbList->ssbId;
1364             ssbIdInfo.rsrp = sCellSsbList->rsrp;
1365             neighboringCellSsbInfo.ssbIdList.push_back(ssbIdInfo);
1366         }
1367         nrCellSsbIds.nbCellSsbList.push_back(neighboringCellSsbInfo);
1368     }
1369     return HRIL_ERR_SUCCESS;
1370 }
1371 
IsNetworkResponse(uint32_t code)1372 bool HRilNetwork::IsNetworkResponse(uint32_t code)
1373 {
1374     return ((code >= HREQ_NETWORK_BASE) && (code < HREQ_COMMON_BASE));
1375 }
1376 
IsNetworkNotification(uint32_t code)1377 bool HRilNetwork::IsNetworkNotification(uint32_t code)
1378 {
1379     return ((code >= HNOTI_NETWORK_BASE) && (code < HNOTI_COMMON_BASE));
1380 }
1381 
IsNetworkRespOrNotify(uint32_t code)1382 bool HRilNetwork::IsNetworkRespOrNotify(uint32_t code)
1383 {
1384     return IsNetworkResponse(code) || IsNetworkNotification(code);
1385 }
1386 
RegisterNetworkFuncs(const HRilNetworkReq * networkFuncs)1387 void HRilNetwork::RegisterNetworkFuncs(const HRilNetworkReq *networkFuncs)
1388 {
1389     networkFuncs_ = networkFuncs;
1390 }
1391 } // namespace Telephony
1392 } // namespace OHOS
1393