1 /*
2 * Copyright (C) 2021 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_sim.h"
17
18 #include "hril_notification.h"
19 #include "hril_request.h"
20 namespace OHOS {
21 namespace Telephony {
HRilSim(int32_t slotId)22 HRilSim::HRilSim(int32_t slotId) : HRilBase(slotId)
23 {
24 AddNotificationHandlerToMap();
25 AddHandlerToMap();
26 }
27
IsSimRespOrNotify(uint32_t code)28 bool HRilSim::IsSimRespOrNotify(uint32_t code)
29 {
30 return IsSimResponse(code) || IsSimNotification(code);
31 }
32
RegisterSimFuncs(const HRilSimReq * simFuncs)33 void HRilSim::RegisterSimFuncs(const HRilSimReq *simFuncs)
34 {
35 simFuncs_ = simFuncs;
36 }
37
AddHandlerToMap()38 void HRilSim::AddHandlerToMap()
39 {
40 // response
41 respMemberFuncMap_[HREQ_SIM_GET_SIM_IO] = &HRilSim::GetSimIOResponse;
42 respMemberFuncMap_[HREQ_SIM_GET_SIM_STATUS] = &HRilSim::GetSimStatusResponse;
43 respMemberFuncMap_[HREQ_SIM_GET_IMSI] = &HRilSim::GetImsiResponse;
44 respMemberFuncMap_[HREQ_SIM_GET_SIM_LOCK_STATUS] = &HRilSim::GetSimLockStatusResponse;
45 respMemberFuncMap_[HREQ_SIM_SET_SIM_LOCK] = &HRilSim::SetSimLockResponse;
46 respMemberFuncMap_[HREQ_SIM_CHANGE_SIM_PASSWORD] = &HRilSim::ChangeSimPasswordResponse;
47 respMemberFuncMap_[HREQ_SIM_UNLOCK_PIN] = &HRilSim::UnlockPinResponse;
48 respMemberFuncMap_[HREQ_SIM_UNLOCK_PUK] = &HRilSim::UnlockPukResponse;
49 respMemberFuncMap_[HREQ_SIM_UNLOCK_PIN2] = &HRilSim::UnlockPin2Response;
50 respMemberFuncMap_[HREQ_SIM_UNLOCK_PUK2] = &HRilSim::UnlockPuk2Response;
51 respMemberFuncMap_[HREQ_SIM_SET_ACTIVE_SIM] = &HRilSim::SetActiveSimResponse;
52 respMemberFuncMap_[HREQ_SIM_STK_SEND_TERMINAL_RESPONSE] = &HRilSim::SimStkSendTerminalResponseResponse;
53 respMemberFuncMap_[HREQ_SIM_STK_SEND_ENVELOPE] = &HRilSim::SimStkSendEnvelopeResponse;
54 respMemberFuncMap_[HREQ_SIM_STK_SEND_CALL_SETUP_REQUEST_RESULT] =
55 &HRilSim::SimStkSendCallSetupRequestResultResponse;
56 respMemberFuncMap_[HREQ_SIM_STK_IS_READY] = &HRilSim::SimStkIsReadyResponse;
57 respMemberFuncMap_[HREQ_SIM_GET_RADIO_PROTOCOL] = &HRilSim::GetRadioProtocolResponse;
58 respMemberFuncMap_[HREQ_SIM_SET_RADIO_PROTOCOL] = &HRilSim::SetRadioProtocolResponse;
59 respMemberFuncMap_[HREQ_SIM_OPEN_LOGICAL_CHANNEL] = &HRilSim::SimOpenLogicalChannelResponse;
60 respMemberFuncMap_[HREQ_SIM_CLOSE_LOGICAL_CHANNEL] = &HRilSim::SimCloseLogicalChannelResponse;
61 respMemberFuncMap_[HREQ_SIM_TRANSMIT_APDU_LOGICAL_CHANNEL] = &HRilSim::SimTransmitApduLogicalChannelResponse;
62 respMemberFuncMap_[HREQ_SIM_TRANSMIT_APDU_BASIC_CHANNEL] = &HRilSim::SimTransmitApduBasicChannelResponse;
63 respMemberFuncMap_[HREQ_SIM_AUTHENTICATION] = &HRilSim::SimAuthenticationResponse;
64 respMemberFuncMap_[HREQ_SIM_UNLOCK_SIM_LOCK] = &HRilSim::UnlockSimLockResponse;
65 respMemberFuncMap_[HREQ_SIM_SEND_NCFG_OPER_INFO] = &HRilSim::SendSimMatchedOperatorInfoResponse;
66 }
67
AddNotificationHandlerToMap()68 void HRilSim::AddNotificationHandlerToMap()
69 {
70 // Notification
71 notiMemberFuncMap_[HNOTI_SIM_STATUS_CHANGED] = &HRilSim::SimStateUpdated;
72 notiMemberFuncMap_[HNOTI_SIM_STK_SESSION_END_NOTIFY] = &HRilSim::SimStkSessionEndNotify;
73 notiMemberFuncMap_[HNOTI_SIM_STK_PROACTIVE_NOTIFY] = &HRilSim::SimStkProactiveNotify;
74 notiMemberFuncMap_[HNOTI_SIM_STK_ALPHA_NOTIFY] = &HRilSim::SimStkAlphaNotify;
75 notiMemberFuncMap_[HNOTI_SIM_STK_EVENT_NOTIFY] = &HRilSim::SimStkEventNotify;
76 notiMemberFuncMap_[HNOTI_SIM_STK_CALL_SETUP_NOTIFY] = &HRilSim::SimStkCallSetupNotify;
77 notiMemberFuncMap_[HNOTI_SIM_REFRESH_NOTIFY] = &HRilSim::SimRefreshNotify;
78 notiMemberFuncMap_[HNOTI_SIM_RADIO_PROTOCOL_UPDATED] = &HRilSim::SimRadioProtocolUpdated;
79 }
80
GetSimIO(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimIoRequestInfo & simIO)81 int32_t HRilSim::GetSimIO(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO)
82 {
83 std::unique_ptr<HRilSimIO> rilSimIO = std::make_unique<HRilSimIO>();
84 CopyToHRilSimIO(rilSimIO, simIO);
85 int32_t ret = RequestVendor(
86 serialId, HREQ_SIM_GET_SIM_IO, simFuncs_, &HRilSimReq::GetSimIO, rilSimIO.get(), sizeof(*rilSimIO));
87 SafeFrees(rilSimIO->data, rilSimIO->pathid, rilSimIO->pin2);
88 return ret;
89 }
90
GetSimStatus(int32_t serialId)91 int32_t HRilSim::GetSimStatus(int32_t serialId)
92 {
93 return RequestVendor(serialId, HREQ_SIM_GET_SIM_STATUS, simFuncs_, &HRilSimReq::GetSimStatus);
94 }
95
GetImsi(int32_t serialId)96 int32_t HRilSim::GetImsi(int32_t serialId)
97 {
98 return RequestVendor(serialId, HREQ_SIM_GET_IMSI, simFuncs_, &HRilSimReq::GetSimImsi);
99 }
100
GetSimLockStatus(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)101 int32_t HRilSim::GetSimLockStatus(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
102 {
103 std::unique_ptr<HRilSimClock> rilSimLock = std::make_unique<HRilSimClock>();
104 CopyToHRilSimLock(rilSimLock, simLockInfo);
105 int32_t ret = RequestVendor(serialId, HREQ_SIM_GET_SIM_LOCK_STATUS, simFuncs_, &HRilSimReq::GetSimLockStatus,
106 rilSimLock.get(), sizeof(*rilSimLock));
107 SafeFrees(rilSimLock->fac, rilSimLock->passwd);
108 return ret;
109 }
110
SetSimLock(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)111 int32_t HRilSim::SetSimLock(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
112 {
113 std::unique_ptr<HRilSimClock> rilSimLock = std::make_unique<HRilSimClock>();
114 CopyToHRilSimLock(rilSimLock, simLockInfo);
115 int32_t ret = RequestVendor(
116 serialId, HREQ_SIM_SET_SIM_LOCK, simFuncs_, &HRilSimReq::SetSimLock, rilSimLock.get(), sizeof(*rilSimLock));
117 SafeFrees(rilSimLock->fac, rilSimLock->passwd);
118 return ret;
119 }
120
ChangeSimPassword(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimPasswordInfo & simPassword)121 int32_t HRilSim::ChangeSimPassword(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword)
122 {
123 std::unique_ptr<HRilSimPassword> rilSimPassword = std::make_unique<HRilSimPassword>();
124 CopyToHRilSimPassword(rilSimPassword, simPassword);
125 int32_t ret = RequestVendor(serialId, HREQ_SIM_CHANGE_SIM_PASSWORD, simFuncs_, &HRilSimReq::ChangeSimPassword,
126 rilSimPassword.get(), sizeof(*rilSimPassword));
127 SafeFrees(rilSimPassword->fac, rilSimPassword->oldPassword, rilSimPassword->newPassword);
128 return ret;
129 }
130
UnlockPin(int32_t serialId,const std::string & pin)131 int32_t HRilSim::UnlockPin(int32_t serialId, const std::string &pin)
132 {
133 char *pinPoint = nullptr;
134 CopyToCharPoint(&pinPoint, pin);
135 int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PIN, simFuncs_, &HRilSimReq::UnlockPin, pinPoint);
136 SafeFrees(pinPoint);
137 return ret;
138 }
139
UnlockPuk(int32_t serialId,const std::string & puk,const std::string & pin)140 int32_t HRilSim::UnlockPuk(int32_t serialId, const std::string &puk, const std::string &pin)
141 {
142 char *pukPoint = nullptr;
143 CopyToCharPoint(&pukPoint, puk);
144 char *pinPoint = nullptr;
145 CopyToCharPoint(&pinPoint, pin);
146 int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PUK, simFuncs_, &HRilSimReq::UnlockPuk, pukPoint, pinPoint);
147 SafeFrees(pukPoint, pinPoint);
148 return ret;
149 }
150
UnlockPin2(int32_t serialId,const std::string & pin2)151 int32_t HRilSim::UnlockPin2(int32_t serialId, const std::string &pin2)
152 {
153 char *pin2Point = nullptr;
154 CopyToCharPoint(&pin2Point, pin2);
155 int32_t ret = RequestVendor(serialId, HREQ_SIM_UNLOCK_PIN2, simFuncs_, &HRilSimReq::UnlockPin2, pin2Point);
156 SafeFrees(pin2Point);
157 return ret;
158 }
159
UnlockPuk2(int32_t serialId,const std::string & puk2,const std::string & pin2)160 int32_t HRilSim::UnlockPuk2(int32_t serialId, const std::string &puk2, const std::string &pin2)
161 {
162 char *puk2Point = nullptr;
163 CopyToCharPoint(&puk2Point, puk2);
164 char *pin2Point = nullptr;
165 CopyToCharPoint(&pin2Point, pin2);
166 int32_t ret =
167 RequestVendor(serialId, HREQ_SIM_UNLOCK_PUK2, simFuncs_, &HRilSimReq::UnlockPuk2, puk2Point, pin2Point);
168 SafeFrees(puk2Point, pin2Point);
169 return ret;
170 }
171
SetActiveSim(int32_t serialId,int32_t index,int32_t enable)172 int32_t HRilSim::SetActiveSim(int32_t serialId, int32_t index, int32_t enable)
173 {
174 return RequestVendor(serialId, HREQ_SIM_SET_ACTIVE_SIM, simFuncs_, &HRilSimReq::SetActiveSim, index, enable);
175 }
176
SimStkSendTerminalResponse(int32_t serialId,const std::string & strCmd)177 int32_t HRilSim::SimStkSendTerminalResponse(int32_t serialId, const std::string &strCmd)
178 {
179 char *strCmdPoint = nullptr;
180 CopyToCharPoint(&strCmdPoint, strCmd);
181 int32_t ret = RequestVendor(
182 serialId, HREQ_SIM_STK_SEND_TERMINAL_RESPONSE, simFuncs_, &HRilSimReq::SimStkSendTerminalResponse, strCmdPoint);
183 SafeFrees(strCmdPoint);
184 return ret;
185 }
186
SimStkSendEnvelope(int32_t serialId,const std::string & strCmd)187 int32_t HRilSim::SimStkSendEnvelope(int32_t serialId, const std::string &strCmd)
188 {
189 char *strCmdPoint = nullptr;
190 CopyToCharPoint(&strCmdPoint, strCmd);
191 int32_t ret =
192 RequestVendor(serialId, HREQ_SIM_STK_SEND_ENVELOPE, simFuncs_, &HRilSimReq::SimStkSendEnvelope, strCmdPoint);
193 SafeFrees(strCmdPoint);
194 return ret;
195 }
196
SimStkSendCallSetupRequestResult(int32_t serialId,int32_t accept)197 int32_t HRilSim::SimStkSendCallSetupRequestResult(int32_t serialId, int32_t accept)
198 {
199 return RequestVendor(serialId, HREQ_SIM_STK_SEND_CALL_SETUP_REQUEST_RESULT, simFuncs_,
200 &HRilSimReq::SimStkSendCallSetupRequestResult, accept);
201 }
202
SimStkIsReady(int32_t serialId)203 int32_t HRilSim::SimStkIsReady(int32_t serialId)
204 {
205 return RequestVendor(serialId, HREQ_SIM_STK_IS_READY, simFuncs_, &HRilSimReq::SimStkIsReady);
206 }
207
GetRadioProtocol(int32_t serialId)208 int32_t HRilSim::GetRadioProtocol(int32_t serialId)
209 {
210 TELEPHONY_LOGI("HRilSim::GetRadioProtocol slotId:%{public}d", GetSlotId());
211 return RequestVendor(serialId, HREQ_SIM_GET_RADIO_PROTOCOL, simFuncs_, &HRilSimReq::GetRadioProtocol);
212 }
213
SetRadioProtocol(int32_t serialId,const HDI::Ril::V1_1::RadioProtocol & radioProtocol)214 int32_t HRilSim::SetRadioProtocol(int32_t serialId, const HDI::Ril::V1_1::RadioProtocol &radioProtocol)
215 {
216 HRilRadioProtocol hrilRadioProtocol = {};
217 hrilRadioProtocol.sessionId = radioProtocol.sessionId;
218 hrilRadioProtocol.phase = static_cast<HRilRadioProtocolPhase>(radioProtocol.phase);
219 hrilRadioProtocol.technology = radioProtocol.technology;
220 hrilRadioProtocol.modemId = radioProtocol.modemId;
221 hrilRadioProtocol.status = static_cast<HRilRadioProtocolStatus>(radioProtocol.status);
222 TELEPHONY_LOGI("HRilSim::SetRadioProtocol slotId:%{public}d, serialId:%{public}d"
223 "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
224 GetSlotId(), serialId, hrilRadioProtocol.sessionId, hrilRadioProtocol.phase, hrilRadioProtocol.technology,
225 hrilRadioProtocol.modemId, hrilRadioProtocol.status);
226 return RequestVendor(serialId, HREQ_SIM_SET_RADIO_PROTOCOL, simFuncs_,
227 &HRilSimReq::SetRadioProtocol, &hrilRadioProtocol);
228 }
229
SimOpenLogicalChannel(int32_t serialId,const std::string & appID,int32_t p2)230 int32_t HRilSim::SimOpenLogicalChannel(int32_t serialId, const std::string &appID, int32_t p2)
231 {
232 char *appIDPoint = nullptr;
233 CopyToCharPoint(&appIDPoint, appID);
234 int32_t ret = RequestVendor(
235 serialId, HREQ_SIM_OPEN_LOGICAL_CHANNEL, simFuncs_, &HRilSimReq::SimOpenLogicalChannel, appIDPoint, p2);
236 SafeFrees(appIDPoint);
237 return ret;
238 }
239
SimCloseLogicalChannel(int32_t serialId,int32_t channelId)240 int32_t HRilSim::SimCloseLogicalChannel(int32_t serialId, int32_t channelId)
241 {
242 return RequestVendor(
243 serialId, HREQ_SIM_CLOSE_LOGICAL_CHANNEL, simFuncs_, &HRilSimReq::SimCloseLogicalChannel, channelId);
244 }
245
SimTransmitApduLogicalChannel(int32_t serialId,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)246 int32_t HRilSim::SimTransmitApduLogicalChannel(
247 int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
248 {
249 std::unique_ptr<HRilApduSimIO> rilApduSimIO = std::make_unique<HRilApduSimIO>();
250 CopyToHRilApduSimIO(rilApduSimIO, apduSimIO);
251 int32_t ret = RequestVendor(serialId, HREQ_SIM_TRANSMIT_APDU_LOGICAL_CHANNEL, simFuncs_,
252 &HRilSimReq::SimTransmitApduLogicalChannel, rilApduSimIO.get(), sizeof(*rilApduSimIO));
253 SafeFrees(rilApduSimIO->data);
254 return ret;
255 }
256
SimTransmitApduBasicChannel(int32_t serialId,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)257 int32_t HRilSim::SimTransmitApduBasicChannel(
258 int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
259 {
260 std::unique_ptr<HRilApduSimIO> rilApduSimIO = std::make_unique<HRilApduSimIO>();
261 CopyToHRilApduSimIO(rilApduSimIO, apduSimIO);
262 int32_t ret = RequestVendor(serialId, HREQ_SIM_TRANSMIT_APDU_BASIC_CHANNEL, simFuncs_,
263 &HRilSimReq::SimTransmitApduBasicChannel, rilApduSimIO.get(), sizeof(*rilApduSimIO));
264 SafeFrees(rilApduSimIO->data);
265 return ret;
266 }
267
SimAuthentication(int32_t serialId,const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo & simAuthInfo)268 int32_t HRilSim::SimAuthentication(
269 int32_t serialId, const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo)
270 {
271 std::unique_ptr<HRilSimAuthenticationRequestInfo> rilSimAuthInfo =
272 std::make_unique<HRilSimAuthenticationRequestInfo>();
273 CopyToHRilSimAuthentication(rilSimAuthInfo, simAuthInfo);
274 int32_t ret = RequestVendor(serialId, HREQ_SIM_AUTHENTICATION, simFuncs_, &HRilSimReq::SimAuthentication,
275 rilSimAuthInfo.get(), sizeof(*rilSimAuthInfo));
276 SafeFrees(rilSimAuthInfo->aid, rilSimAuthInfo->data);
277 return ret;
278 }
279
UnlockSimLock(int32_t serialId,int32_t lockType,const std::string & key)280 int32_t HRilSim::UnlockSimLock(int32_t serialId, int32_t lockType, const std::string &key)
281 {
282 char *keyPoint = nullptr;
283 CopyToCharPoint(&keyPoint, key);
284 int32_t ret =
285 RequestVendor(serialId, HREQ_SIM_UNLOCK_SIM_LOCK, simFuncs_, &HRilSimReq::UnlockSimLock, lockType, keyPoint);
286 SafeFrees(keyPoint);
287 return ret;
288 }
289
SendSimMatchedOperatorInfo(int32_t serialId,const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo & ncfgOperatorInfo)290 int32_t HRilSim::SendSimMatchedOperatorInfo(
291 int32_t serialId, const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo)
292 {
293 std::unique_ptr<HRilNcfgOperatorInfo> rilNcfgOperatorInfo =
294 std::make_unique<HRilNcfgOperatorInfo>();
295 CopyToHRilNcfgOperatorInfo(rilNcfgOperatorInfo, ncfgOperatorInfo);
296 int32_t ret = RequestVendor(serialId, HREQ_SIM_SEND_NCFG_OPER_INFO, simFuncs_,
297 &HRilSimReq::SendSimMatchedOperatorInfo, rilNcfgOperatorInfo.get(), sizeof(*rilNcfgOperatorInfo));
298 SafeFrees(rilNcfgOperatorInfo->operName, rilNcfgOperatorInfo->operKey, rilNcfgOperatorInfo->reserve);
299 return ret;
300 }
301
GetSimIOResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)302 int32_t HRilSim::GetSimIOResponse(
303 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
304 {
305 HDI::Ril::V1_1::IccIoResultInfo result = {};
306 int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
307 if (ret != HRIL_ERR_SUCCESS) {
308 return ret;
309 }
310 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimIOResponse, result);
311 }
312
GetSimStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)313 int32_t HRilSim::GetSimStatusResponse(
314 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
315 {
316 HDI::Ril::V1_1::CardStatusInfo rilCardStatus = {};
317 if ((response == nullptr && responseLen != 0) ||
318 (response != nullptr && responseLen != sizeof(HRilCardState))) {
319 TELEPHONY_LOGE("Invalid response: Vendor exception!");
320 return HRIL_ERR_INVALID_PARAMETER;
321 }
322 if (response == nullptr && responseLen == 0) {
323 TELEPHONY_LOGE("response is null");
324 if (responseInfo.error == HRilErrType::NONE) {
325 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
326 }
327 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimStatusResponse, rilCardStatus);
328 }
329 const HRilCardState *curPtr = static_cast<const HRilCardState *>(response);
330 rilCardStatus.index = curPtr->index;
331 rilCardStatus.simType = curPtr->simType;
332 rilCardStatus.simState = curPtr->simState;
333 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimStatusResponse, rilCardStatus);
334 }
335
GetImsiResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)336 int32_t HRilSim::GetImsiResponse(
337 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
338 {
339 int32_t ret = CheckCharData(response, responseLen);
340 if (ret != HRIL_ERR_SUCCESS) {
341 return ret;
342 }
343 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetImsiResponse, (const char *)response);
344 }
345
GetSimLockStatusResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)346 int32_t HRilSim::GetSimLockStatusResponse(
347 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
348 {
349 int32_t simLockStatus = 0;
350 if (response == nullptr || responseLen != sizeof(int32_t)) {
351 TELEPHONY_LOGE("GetSimStatusResponse: Invalid response");
352 if (responseInfo.error == HRilErrType::NONE) {
353 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
354 }
355 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimLockStatusResponse, simLockStatus);
356 }
357 simLockStatus = *(static_cast<const int32_t *>(response));
358 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetSimLockStatusResponse, simLockStatus);
359 }
360
SetSimLockResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)361 int32_t HRilSim::SetSimLockResponse(
362 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
363 {
364 HDI::Ril::V1_1::LockStatusResp result = {};
365 ResponseLockStatus(result, responseInfo, response, responseLen);
366 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetSimLockResponse, result);
367 }
368
ChangeSimPasswordResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)369 int32_t HRilSim::ChangeSimPasswordResponse(
370 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
371 {
372 HDI::Ril::V1_1::LockStatusResp result = {};
373 ResponseLockStatus(result, responseInfo, response, responseLen);
374 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ChangeSimPasswordResponse, result);
375 }
376
UnlockPinResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)377 int32_t HRilSim::UnlockPinResponse(
378 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
379 {
380 HDI::Ril::V1_1::LockStatusResp result = {};
381 ResponseLockStatus(result, responseInfo, response, responseLen);
382 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPinResponse, result);
383 }
384
UnlockPukResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)385 int32_t HRilSim::UnlockPukResponse(
386 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
387 {
388 HDI::Ril::V1_1::LockStatusResp result = {};
389 ResponseLockStatus(result, responseInfo, response, responseLen);
390 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPukResponse, result);
391 }
392
UnlockPin2Response(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)393 int32_t HRilSim::UnlockPin2Response(
394 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
395 {
396 HDI::Ril::V1_1::LockStatusResp result = {};
397 ResponseLockStatus(result, responseInfo, response, responseLen);
398 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPin2Response, result);
399 }
400
UnlockPuk2Response(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)401 int32_t HRilSim::UnlockPuk2Response(
402 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
403 {
404 HDI::Ril::V1_1::LockStatusResp result = {};
405 ResponseLockStatus(result, responseInfo, response, responseLen);
406 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockPuk2Response, result);
407 }
408
SetActiveSimResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)409 int32_t HRilSim::SetActiveSimResponse(
410 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
411 {
412 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetActiveSimResponse);
413 }
414
SimStkSendTerminalResponseResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)415 int32_t HRilSim::SimStkSendTerminalResponseResponse(
416 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
417 {
418 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendTerminalResponseResponse);
419 }
420
SimStkSendEnvelopeResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)421 int32_t HRilSim::SimStkSendEnvelopeResponse(
422 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
423 {
424 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendEnvelopeResponse);
425 }
426
SimStkSendCallSetupRequestResultResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)427 int32_t HRilSim::SimStkSendCallSetupRequestResultResponse(
428 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
429 {
430 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkSendCallSetupRequestResultResponse);
431 }
432
SimStkIsReadyResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)433 int32_t HRilSim::SimStkIsReadyResponse(
434 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
435 {
436 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimStkIsReadyResponse);
437 }
438
GetRadioProtocolResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)439 int32_t HRilSim::GetRadioProtocolResponse(
440 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
441 {
442 HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
443 if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
444 TELEPHONY_LOGE("GetRadioProtocolResponse response is invalid");
445 if (responseInfo.error == HRilErrType::NONE) {
446 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
447 }
448 } else {
449 BuildRadioProtocol(radioProtocol, response);
450 TELEPHONY_LOGI("HRilSim::GetRadioProtocolResponse slotId:%{public}d, serial:%{public}d"
451 "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
452 GetSlotId(), responseInfo.serial, radioProtocol.sessionId, radioProtocol.phase, radioProtocol.technology,
453 radioProtocol.modemId, radioProtocol.status);
454 }
455 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRadioProtocolResponse, radioProtocol);
456 }
457
SetRadioProtocolResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)458 int32_t HRilSim::SetRadioProtocolResponse(
459 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
460 {
461 HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
462 if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
463 TELEPHONY_LOGE("SetRadioProtocolResponse response is invalid");
464 if (responseInfo.error == HRilErrType::NONE) {
465 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
466 }
467 } else {
468 BuildRadioProtocol(radioProtocol, response);
469 TELEPHONY_LOGI("HRilSim::SetRadioProtocolResponse slotId:%{public}d, serial:%{public}d"
470 "sessionId:%{public}d, phase:%{public}d, technology:%{public}d, modemId:%{public}d, status:%{public}d",
471 GetSlotId(), responseInfo.serial, radioProtocol.sessionId, radioProtocol.phase, radioProtocol.technology,
472 radioProtocol.modemId, radioProtocol.status);
473 }
474 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetRadioProtocolResponse, radioProtocol);
475 }
476
SimOpenLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)477 int32_t HRilSim::SimOpenLogicalChannelResponse(
478 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
479 {
480 HDI::Ril::V1_1::OpenLogicalChannelResponse pOpenLogicalChannelResponse = {};
481 if (response == nullptr || responseLen != sizeof(HRilOpenLogicalChannelResponse)) {
482 TELEPHONY_LOGE("Invalid response: response is nullptr");
483 return HRIL_ERR_INVALID_PARAMETER;
484 }
485 const HRilOpenLogicalChannelResponse *pRilResponse = static_cast<const HRilOpenLogicalChannelResponse *>(response);
486 pOpenLogicalChannelResponse.sw1 = pRilResponse->sw1;
487 pOpenLogicalChannelResponse.sw2 = pRilResponse->sw2;
488 pOpenLogicalChannelResponse.channelId = pRilResponse->channelId;
489 pOpenLogicalChannelResponse.response = (pRilResponse->response == nullptr) ? "" : pRilResponse->response;
490 return Response(
491 responseInfo, &HDI::Ril::V1_1::IRilCallback::SimOpenLogicalChannelResponse, pOpenLogicalChannelResponse);
492 }
493
SimCloseLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)494 int32_t HRilSim::SimCloseLogicalChannelResponse(
495 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
496 {
497 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimCloseLogicalChannelResponse);
498 }
499
SimTransmitApduLogicalChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)500 int32_t HRilSim::SimTransmitApduLogicalChannelResponse(
501 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
502 {
503 HDI::Ril::V1_1::IccIoResultInfo result = {};
504 int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
505 if (ret != HRIL_ERR_SUCCESS) {
506 return ret;
507 }
508 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimTransmitApduLogicalChannelResponse, result);
509 }
510
SimTransmitApduBasicChannelResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)511 int32_t HRilSim::SimTransmitApduBasicChannelResponse(
512 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
513 {
514 HDI::Ril::V1_1::IccIoResultInfo result = {};
515 int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
516 if (ret != HRIL_ERR_SUCCESS) {
517 return ret;
518 }
519 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimTransmitApduBasicChannelResponse, result);
520 }
521
SimAuthenticationResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)522 int32_t HRilSim::SimAuthenticationResponse(
523 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
524 {
525 HDI::Ril::V1_1::IccIoResultInfo result = {};
526 int32_t ret = BuildSimIOResp(result, responseInfo, response, responseLen);
527 if (ret != HRIL_ERR_SUCCESS) {
528 return ret;
529 }
530 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SimAuthenticationResponse, result);
531 }
532
UnlockSimLockResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)533 int32_t HRilSim::UnlockSimLockResponse(
534 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
535 {
536 HDI::Ril::V1_1::LockStatusResp result = {};
537 ResponseLockStatus(result, responseInfo, response, responseLen);
538 return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::UnlockSimLockResponse, result);
539 }
540
ProcessIccIoResponse(HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)541 HDI::Ril::V1_1::IccIoResultInfo HRilSim::ProcessIccIoResponse(
542 HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
543 {
544 HDI::Ril::V1_1::IccIoResultInfo result = {};
545 if (response == nullptr || responseLen != sizeof(HRilSimIOResponse)) {
546 TELEPHONY_LOGI("Invalid response: response is nullptr");
547 if (responseInfo.error == HRilErrType::NONE) {
548 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
549 }
550 result.response = std::string("");
551 return result;
552 }
553 const HRilSimIOResponse *resp = static_cast<const HRilSimIOResponse *>(response);
554 result.sw1 = resp->sw1;
555 result.sw2 = resp->sw2;
556 result.response = (resp->response == nullptr) ? "" : std::string(resp->response);
557 return result;
558 }
559
SendSimMatchedOperatorInfoResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)560 int32_t HRilSim::SendSimMatchedOperatorInfoResponse(
561 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
562 {
563 return Response(responseInfo, &HDI::Ril::V1_2::IRilCallback::SendSimMatchedOperatorInfoResponse);
564 }
565
SimStateUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)566 int32_t HRilSim::SimStateUpdated(
567 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
568 {
569 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStateUpdated);
570 }
571
SimStkSessionEndNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)572 int32_t HRilSim::SimStkSessionEndNotify(
573 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
574 {
575 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkSessionEndNotify);
576 }
577
SimStkProactiveNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)578 int32_t HRilSim::SimStkProactiveNotify(
579 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
580 {
581 int32_t ret = CheckCharData(response, responseLen);
582 if (ret != HRIL_ERR_SUCCESS) {
583 return ret;
584 }
585 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkProactiveNotify, (const char *)response);
586 }
587
SimStkAlphaNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)588 int32_t HRilSim::SimStkAlphaNotify(
589 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
590 {
591 int32_t ret = CheckCharData(response, responseLen);
592 if (ret != HRIL_ERR_SUCCESS) {
593 return ret;
594 }
595 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkAlphaNotify, (const char *)response);
596 }
597
SimStkEventNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)598 int32_t HRilSim::SimStkEventNotify(
599 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
600 {
601 int32_t ret = CheckCharData(response, responseLen);
602 if (ret != HRIL_ERR_SUCCESS) {
603 return ret;
604 }
605 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkEventNotify, (const char *)response);
606 }
607
SimStkCallSetupNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)608 int32_t HRilSim::SimStkCallSetupNotify(
609 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
610 {
611 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimStkCallSetupNotify);
612 }
613
SimRefreshNotify(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)614 int32_t HRilSim::SimRefreshNotify(
615 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
616 {
617 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimRefreshNotify);
618 }
619
SimRadioProtocolUpdated(int32_t notifyType,const HRilErrNumber error,const void * response,size_t responseLen)620 int32_t HRilSim::SimRadioProtocolUpdated(
621 int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen)
622 {
623 if (response == nullptr || responseLen != sizeof(HRilRadioProtocol)) {
624 TELEPHONY_LOGE("SimRadioProtocolUpdated response is invalid");
625 return HRIL_ERR_INVALID_PARAMETER;
626 }
627 HDI::Ril::V1_1::RadioProtocol radioProtocol = {};
628 BuildRadioProtocol(radioProtocol, response);
629 TELEPHONY_LOGI("SimRadioProtocolUpdated slotId:%{public}d, sessionId:%{public}d, phase:%{public}d, "
630 "technology:%{public}d, modemId:%{public}d, status:%{public}d",
631 radioProtocol.slotId, radioProtocol.sessionId, static_cast<int32_t>(radioProtocol.phase),
632 radioProtocol.technology, radioProtocol.modemId, static_cast<int32_t>(radioProtocol.status));
633 return Notify(notifyType, error, &HDI::Ril::V1_1::IRilCallback::SimRadioProtocolUpdated, radioProtocol);
634 }
635
IsSimResponse(uint32_t code)636 bool HRilSim::IsSimResponse(uint32_t code)
637 {
638 return ((code >= HREQ_SIM_BASE) && (code < HREQ_DATA_BASE));
639 }
640
IsSimNotification(uint32_t code)641 bool HRilSim::IsSimNotification(uint32_t code)
642 {
643 return ((code >= HNOTI_SIM_BASE) && (code < HNOTI_DATA_BASE));
644 }
645
CopyToHRilSimIO(std::unique_ptr<HRilSimIO> & rilSimIO,const OHOS::HDI::Ril::V1_1::SimIoRequestInfo & simIO)646 void HRilSim::CopyToHRilSimIO(std::unique_ptr<HRilSimIO> &rilSimIO, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO)
647 {
648 rilSimIO->command = simIO.command;
649 rilSimIO->fileid = simIO.fileId;
650 rilSimIO->p1 = simIO.p1;
651 rilSimIO->p2 = simIO.p2;
652 rilSimIO->p3 = simIO.p3;
653 TELEPHONY_LOGD("CopyToHRilSimIO.data: %{public}s, path: %{public}s, pin2: %{public}s", simIO.data.c_str(),
654 simIO.path.c_str(), simIO.pin2.c_str());
655 CopyToCharPoint(&(rilSimIO->data), simIO.data);
656 CopyToCharPoint(&(rilSimIO->pathid), simIO.path);
657 CopyToCharPoint(&(rilSimIO->pin2), simIO.pin2);
658 TELEPHONY_LOGD("CopyToHRilSimIO.result: %{public}s, pathid: %{public}s, pin2: %{public}s", rilSimIO->data,
659 rilSimIO->pathid, rilSimIO->pin2);
660 }
661
CopyToHRilSimLock(std::unique_ptr<HRilSimClock> & rilSimLock,const OHOS::HDI::Ril::V1_1::SimLockInfo & simLockInfo)662 void HRilSim::CopyToHRilSimLock(
663 std::unique_ptr<HRilSimClock> &rilSimLock, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo)
664 {
665 rilSimLock->mode = simLockInfo.mode;
666 rilSimLock->status = simLockInfo.status;
667 rilSimLock->classx = simLockInfo.classx;
668 CopyToCharPoint(&(rilSimLock->fac), simLockInfo.fac);
669 CopyToCharPoint(&(rilSimLock->passwd), simLockInfo.passwd);
670 }
671
CopyToHRilSimPassword(std::unique_ptr<HRilSimPassword> & rilSimPassword,const OHOS::HDI::Ril::V1_1::SimPasswordInfo & simPassword)672 void HRilSim::CopyToHRilSimPassword(
673 std::unique_ptr<HRilSimPassword> &rilSimPassword, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword)
674 {
675 CopyToCharPoint(&(rilSimPassword->fac), simPassword.fac);
676 CopyToCharPoint(&(rilSimPassword->oldPassword), simPassword.oldPassword);
677 CopyToCharPoint(&(rilSimPassword->newPassword), simPassword.newPassword);
678 rilSimPassword->passwordLength = simPassword.passwordLength;
679 }
680
CopyToHRilApduSimIO(std::unique_ptr<HRilApduSimIO> & rilApduSimIO,const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo & apduSimIO)681 void HRilSim::CopyToHRilApduSimIO(
682 std::unique_ptr<HRilApduSimIO> &rilApduSimIO, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO)
683 {
684 rilApduSimIO->channelId = apduSimIO.channelId;
685 rilApduSimIO->type = apduSimIO.type;
686 rilApduSimIO->instruction = apduSimIO.instruction;
687 rilApduSimIO->p1 = apduSimIO.p1;
688 rilApduSimIO->p2 = apduSimIO.p2;
689 rilApduSimIO->p3 = apduSimIO.p3;
690 CopyToCharPoint(&(rilApduSimIO->data), apduSimIO.data);
691 }
692
CopyToHRilSimAuthentication(std::unique_ptr<HRilSimAuthenticationRequestInfo> & rilSimAuthInfo,const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo & simAuthInfo)693 void HRilSim::CopyToHRilSimAuthentication(std::unique_ptr<HRilSimAuthenticationRequestInfo> &rilSimAuthInfo,
694 const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo)
695 {
696 rilSimAuthInfo->serial = simAuthInfo.serial;
697 CopyToCharPoint(&(rilSimAuthInfo->aid), simAuthInfo.aid);
698 CopyToCharPoint(&(rilSimAuthInfo->data), simAuthInfo.authData);
699 }
700
CopyToHRilNcfgOperatorInfo(std::unique_ptr<HRilNcfgOperatorInfo> & rilNcfgOperatorInfo,const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo & ncfgOperatorInfo)701 void HRilSim::CopyToHRilNcfgOperatorInfo(std::unique_ptr<HRilNcfgOperatorInfo> &rilNcfgOperatorInfo,
702 const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo)
703 {
704 CopyToCharPoint(&(rilNcfgOperatorInfo->operName), ncfgOperatorInfo.operName);
705 CopyToCharPoint(&(rilNcfgOperatorInfo->operKey), ncfgOperatorInfo.operKey);
706 rilNcfgOperatorInfo->state = ncfgOperatorInfo.state;
707 CopyToCharPoint(&(rilNcfgOperatorInfo->reserve), ncfgOperatorInfo.reserve);
708 }
709
BuildLockStatusResp(const void * response,size_t responseLen,HDI::Ril::V1_1::LockStatusResp & lockStatus)710 bool HRilSim::BuildLockStatusResp(const void *response, size_t responseLen, HDI::Ril::V1_1::LockStatusResp &lockStatus)
711 {
712 if (response == nullptr || responseLen != sizeof(HRilLockStatus)) {
713 return false;
714 }
715 const HRilLockStatus *resp = static_cast<const HRilLockStatus *>(response);
716 lockStatus.result = resp->result;
717 lockStatus.remain = resp->remain;
718 return true;
719 }
720
ResponseLockStatus(HDI::Ril::V1_1::LockStatusResp & lockStatus,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)721 void HRilSim::ResponseLockStatus(HDI::Ril::V1_1::LockStatusResp &lockStatus, HRilRadioResponseInfo &responseInfo,
722 const void *response, size_t responseLen)
723 {
724 if (!BuildLockStatusResp(response, responseLen, lockStatus)) {
725 TELEPHONY_LOGE("Invalid ResponseLockStatus: response is error");
726 if (responseInfo.error == HRilErrType::NONE) {
727 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
728 }
729 }
730 }
731
BuildSimIOResp(HDI::Ril::V1_1::IccIoResultInfo & result,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)732 int32_t HRilSim::BuildSimIOResp(HDI::Ril::V1_1::IccIoResultInfo &result, HRilRadioResponseInfo &responseInfo,
733 const void *response, size_t responseLen)
734 {
735 if ((response == nullptr && responseLen != 0) ||
736 (response != nullptr && responseLen != sizeof(HRilSimIOResponse))) {
737 TELEPHONY_LOGE("Invalid BuildSimIOResp: Vendor exception!");
738 return HRIL_ERR_INVALID_PARAMETER;
739 }
740 if (response == nullptr && responseLen == 0) {
741 TELEPHONY_LOGE("BuildSimIOResp response is null");
742 if (responseInfo.error == HRilErrType::NONE) {
743 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
744 }
745 }
746 result = ProcessIccIoResponse(responseInfo, response, responseLen);
747 return HRIL_ERR_SUCCESS;
748 }
749
CheckCharData(const void * response,size_t responseLen)750 int32_t HRilSim::CheckCharData(const void *response, size_t responseLen)
751 {
752 if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(char)) != 0) {
753 TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
754 return HRIL_ERR_INVALID_PARAMETER;
755 }
756 if (response == nullptr && responseLen == 0) {
757 TELEPHONY_LOGE("response is null");
758 return HRIL_ERR_NULL_POINT;
759 }
760 return HRIL_ERR_SUCCESS;
761 }
762
BuildRadioProtocol(HDI::Ril::V1_1::RadioProtocol & radioProtocol,const void * response)763 void HRilSim::BuildRadioProtocol(HDI::Ril::V1_1::RadioProtocol &radioProtocol, const void *response)
764 {
765 const HRilRadioProtocol *hrilRadioProtocol = static_cast<const HRilRadioProtocol *>(response);
766 radioProtocol.slotId = GetSlotId();
767 radioProtocol.sessionId = hrilRadioProtocol->sessionId;
768 radioProtocol.phase = static_cast<HDI::Ril::V1_1::RadioProtocolPhase>(hrilRadioProtocol->phase);
769 radioProtocol.technology = ConvertRadioProtocolTech(hrilRadioProtocol->technology);
770 radioProtocol.modemId = hrilRadioProtocol->modemId;
771 radioProtocol.status = static_cast<HDI::Ril::V1_1::RadioProtocolStatus>(hrilRadioProtocol->status);
772 }
773
ConvertRadioProtocolTech(int32_t tech)774 int32_t HRilSim::ConvertRadioProtocolTech(int32_t tech)
775 {
776 uint32_t radioProtocolTech = HRIL_RADIO_PROTOCOL_TECH_UNKNOWN;
777 for (uint32_t radioTech = RADIO_TECHNOLOGY_GSM; radioTech <= RADIO_TECHNOLOGY_NR; radioTech++) {
778 uint32_t protocolTech = 1 << radioTech;
779 if ((static_cast<uint32_t>(tech) & protocolTech) != 0) {
780 radioProtocolTech |= protocolTech;
781 }
782 }
783 return static_cast<int32_t>(radioProtocolTech);
784 }
785 } // namespace Telephony
786 } // namespace OHOS
787