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 #ifndef OHOS_HRIL_SIM_H
17 #define OHOS_HRIL_SIM_H
18 
19 #include "hril_base.h"
20 
21 namespace OHOS {
22 namespace Telephony {
23 class HRilSim : public HRilBase {
24 public:
25     HRilSim(int32_t slotId);
26     virtual ~HRilSim() = default;
27 
28     void ProcessSimRequest(int32_t code, struct HdfSBuf *data);
29     void ProcessSimResponse(
30         int32_t code, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen);
31     void ProcessSimNotify(const struct ReportInfo *reportInfo, const void *response, size_t responseLen);
32     bool IsSimRespOrNotify(uint32_t code);
33     void RegisterSimFuncs(const HRilSimReq *simFuncs);
34     int32_t GetSimIO(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO);
35     int32_t GetSimStatus(int32_t serialId);
36     int32_t GetImsi(int32_t serialId);
37     int32_t GetSimLockStatus(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo);
38     int32_t SetSimLock(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo);
39     int32_t ChangeSimPassword(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword);
40     int32_t UnlockPin(int32_t serialId, const std::string &pin);
41     int32_t UnlockPuk(int32_t serialId, const std::string &puk, const std::string &pin);
42     int32_t UnlockPin2(int32_t serialId, const std::string &pin2);
43     int32_t UnlockPuk2(int32_t serialId, const std::string &puk2, const std::string &pin2);
44     int32_t SetActiveSim(int32_t serialId, int32_t index, int32_t enable);
45     int32_t SimStkSendTerminalResponse(int32_t serialId, const std::string &strCmd);
46     int32_t SimStkSendEnvelope(int32_t serialId, const std::string &strCmd);
47     int32_t SimStkSendCallSetupRequestResult(int32_t serialId, int32_t accept);
48     int32_t SimStkIsReady(int32_t serialId);
49     int32_t GetRadioProtocol(int32_t serialId);
50     int32_t SetRadioProtocol(int32_t serialId, const HDI::Ril::V1_1::RadioProtocol &radioProtocol);
51     int32_t SimOpenLogicalChannel(int32_t serialId, const std::string &appID, int32_t p2);
52     int32_t SimCloseLogicalChannel(int32_t serialId, int32_t channelId);
53     int32_t SimTransmitApduLogicalChannel(
54         int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO);
55     int32_t SimTransmitApduBasicChannel(int32_t serialId, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO);
56     int32_t SimAuthentication(int32_t serialId, const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo);
57     int32_t UnlockSimLock(int32_t serialId, int32_t lockType, const std::string &key);
58     int32_t SendSimMatchedOperatorInfo(
59         int32_t serialId, const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo);
60 
61 private:
62     void AddBasicHandlerToMap();
63     void AddSimLockHandlerToMap();
64     void AddStkHandlerToMap();
65     void AddNotificationHandlerToMap();
66     int32_t GetSimIOResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
67         const void *response, size_t responseLen);
68     int32_t GetSimCardStatusResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
69         const void *response, size_t responseLen);
70     int32_t GetImsiResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
71         const void *response, size_t responseLen);
72     int32_t GetSimLockStatusResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
73         const void *response, size_t responseLen);
74     int32_t SetSimLockResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
75         const void *response, size_t responseLen);
76     int32_t ChangeSimPasswordResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
77         const void *response, size_t responseLen);
78     int32_t UnlockPinResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
79         const void *response, size_t responseLen);
80     int32_t UnlockPukResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
81         const void *response, size_t responseLen);
82     int32_t UnlockPin2Response(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
83         const void *response, size_t responseLen);
84     int32_t UnlockPuk2Response(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
85         const void *response, size_t responseLen);
86     int32_t SetActiveSimResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
87         const void *response, size_t responseLen);
88     int32_t SimStkSendTerminalResponseResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
89         const void *response, size_t responseLen);
90     int32_t SimStkSendEnvelopeResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
91         const void *response, size_t responseLen);
92     int32_t SimStkSendCallSetupRequestResultResponse(int32_t requestNum,
93         HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen);
94     int32_t SimStkIsReadyResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
95         const void *response, size_t responseLen);
96     int32_t GetRadioProtocolResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
97         const void *response, size_t responseLen);
98     int32_t SetRadioProtocolResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
99         const void *response, size_t responseLen);
100     int32_t SimOpenLogicalChannelResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
101         const void *response, size_t responseLen);
102     int32_t SimCloseLogicalChannelResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
103         const void *response, size_t responseLen);
104     int32_t SimTransmitApduLogicalChannelResponse(int32_t requestNum,
105         HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen);
106     int32_t SimTransmitApduBasicChannelResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
107         const void *response, size_t responseLen);
108     int32_t SimAuthenticationResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
109         const void *response, size_t responseLen);
110     int32_t UnlockSimLockResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
111         const void *response, size_t responseLen);
112     HDI::Ril::V1_1::IccIoResultInfo ProcessIccIoResponse(HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
113         const void *response, size_t responseLen);
114     int32_t SendSimMatchedOperatorInfoResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
115         const void *response, size_t responseLen);
116 
117     int32_t SimStateUpdated(int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
118     int32_t SimStkSessionEndNotify(
119         int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
120     int32_t SimStkProactiveNotify(
121         int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
122     int32_t SimStkAlphaNotify(int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
123     int32_t SimStkEventNotify(int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
124     int32_t SimStkCallSetupNotify(
125         int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
126     int32_t SimRefreshNotify(int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
127     int32_t SimRadioProtocolUpdated(
128         int32_t notifyType, const HRilErrNumber error, const void *response, size_t responseLen);
129 
130 private:
131     bool IsSimResponse(uint32_t code);
132     bool IsSimNotification(uint32_t code);
133     void CopyToHRilSimIO(std::unique_ptr<HRilSimIO> &rilSimIO, const OHOS::HDI::Ril::V1_1::SimIoRequestInfo &simIO);
134     void CopyToHRilSimLock(
135         std::unique_ptr<HRilSimClock> &rilSimLock, const OHOS::HDI::Ril::V1_1::SimLockInfo &simLockInfo);
136     void CopyToHRilSimPassword(
137         std::unique_ptr<HRilSimPassword> &rilSimPassword, const OHOS::HDI::Ril::V1_1::SimPasswordInfo &simPassword);
138     void CopyToHRilApduSimIO(
139         std::unique_ptr<HRilApduSimIO> &rilApduSimIO, const OHOS::HDI::Ril::V1_1::ApduSimIORequestInfo &apduSimIO);
140     void CopyToHRilSimAuthentication(std::unique_ptr<HRilSimAuthenticationRequestInfo> &rilSimAuthInfo,
141         const OHOS::HDI::Ril::V1_1::SimAuthenticationRequestInfo &simAuthInfo);
142     void CopyToHRilNcfgOperatorInfo(std::unique_ptr<HRilNcfgOperatorInfo> &rilNcfgOperatorInfo,
143         const OHOS::HDI::Ril::V1_2::NcfgOperatorInfo &ncfgOperatorInfo);
144     bool BuildLockStatusResp(const void *response, size_t responseLen, HDI::Ril::V1_1::LockStatusResp &lockStatus);
145     void ResponseLockStatus(HDI::Ril::V1_1::LockStatusResp &lockStatus,
146         HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const void *response, size_t responseLen);
147     int32_t BuildSimIOResp(HDI::Ril::V1_1::IccIoResultInfo &result, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
148         const void *response, size_t responseLen);
149     int32_t CheckCharData(const void *response, size_t responseLen);
150     void BuildRadioProtocol(HDI::Ril::V1_1::RadioProtocol &radioProtocol, const void *response);
151     int32_t ConvertRadioProtocolTech(int32_t tech);
152 
153 private:
154     const HRilSimReq *simFuncs_ = nullptr;
155 };
156 } // namespace Telephony
157 } // namespace OHOS
158 #endif // OHOS_HRIL_SIM_H
159