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