• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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