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