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