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_AT_SIM_H
17 
18 #include <ctype.h>
19 #include <stddef.h>
20 #include <stdlib.h>
21 
22 #include "hril_vendor_sim_defs.h"
23 #include "securec.h"
24 
25 #define OHOS_AT_SIM_H
26 
27 #define BYTE_NUM_0 0x00FF
28 #define BYTE_NUM_1 0xFF00
29 #define BYTE_NUM_2 0xFF
30 #define BYTE_NUM_3 0x80
31 #define BYTE_NUM_4 0x0F
32 #define CMD_GET_RESPONSE 192
33 #define DECIMAL_MAX 10
34 #define EF_TYPE_TRANSPARENT 0
35 #define EF_TYPE_LINEAR_FIXED 1
36 #define EF_TYPE_CYCLIC 3
37 #define FCP_TEMP_T 0x62
38 #define FIVE_LEN 5
39 #define GET_RESPONSE_EF_SIZE_BYTES 15
40 #define HALF_BYTE_LEN 4
41 #define HALF_LEN 2
42 #define HEX_DIGITS_LEN 16
43 #define RESPONSE_DATA_FILE_SIZE_1 2
44 #define RESPONSE_DATA_FILE_SIZE_2 3
45 #define RESPONSE_DATA_FILE_ID_1 4
46 #define RESPONSE_DATA_FILE_ID_2 5
47 #define RESPONSE_DATA_FILE_TYPE 6
48 #define RESPONSE_DATA_FILE_STATUS 11
49 #define RESPONSE_DATA_LENGTH 12
50 #define RESPONSE_DATA_STRUCTURE 13
51 #define RESPONSE_DATA_RECORD_LENGTH 14
52 #define THIRD_INDEX 3
53 #define TYPE_DF 2
54 #define TYPE_EF 4
55 #define VALID_FILE_STATUS 0x01
56 
57 typedef enum {
58     FCP_FILE_DES_T = 0x82,
59     FCP_FILE_ID_T = 0x83,
60 } UsimFcpTag;
61 
62 typedef struct {
63     uint8_t fd;
64     uint8_t dataCoding;
65     uint16_t recLen;
66     uint8_t numRec;
67     uint16_t dataSize;
68 } UsimFileDescriptor;
69 
70 
71 typedef struct {
72     uint16_t fileId;
73 } UsimFileIdentifier;
74 
75 uint8_t *ConvertByteArrayToHexString(uint8_t *byteArray, int byteArrayLen);
76 void ConvertHexStringToByteArray(uint8_t *originHexString, int responseLen, uint8_t *byteArray, int fcpLen);
77 void ConvertUsimFcpToSimRsp(uint8_t **simResponse);
78 void CreateSimRspByte(uint8_t simRspByte[], int responseLen, UsimFileIdentifier *fId, UsimFileDescriptor *fDescriptor);
79 uint8_t FcpFileDescriptorQuery(uint8_t *fcpByte, uint16_t fcpLen, UsimFileDescriptor *filledStructPtr);
80 uint8_t FcpFileIdentifierQuery(uint8_t *fcpByte, uint16_t fcpLen, UsimFileIdentifier *filledStructPtr);
81 uint8_t FcpTlvSearchTag(uint8_t *dataPtr, uint16_t len, UsimFcpTag tag, uint8_t **outPtr);
82 uint8_t IsCyclicFile(uint8_t fd);
83 uint8_t IsDedicatedFile(uint8_t fd);
84 uint8_t IsLinearFixedFile(uint8_t fd);
85 uint8_t IsTransparentFile(uint8_t fd);
86 void ReqGetSimStatus(const ReqDataInfo *requestInfo);
87 void ReqGetSimIO(const ReqDataInfo *requestInfo, const HRilSimIO *data, size_t dataLen);
88 void ReqGetSimImsi(const ReqDataInfo *requestInfo);
89 void ReqGetSimLockStatus(const ReqDataInfo *requestInfo, const HRilSimClock *data, size_t dataLen);
90 void ReqSetSimLock(const ReqDataInfo *requestInfo, const HRilSimClock *data, size_t dataLen);
91 void ReqChangeSimPassword(const ReqDataInfo *requestInfo, const HRilSimPassword *data, size_t dataLen);
92 void ReqUnlockPin(const ReqDataInfo *requestInfo, const char *pin);
93 void ReqUnlockPuk(const ReqDataInfo *requestInfo, const char *puk, const char *pin);
94 void ReqGetSimPinInputTimes(const ReqDataInfo *requestInfo);
95 void ReqGetSimPinInputTimesRemain(const ReqDataInfo *requestInfo, HRilPinInputTimes *pinInputTimes);
96 void ReqUnlockPin2(const ReqDataInfo *requestInfo, const char *pin2);
97 void ReqUnlockPuk2(const ReqDataInfo *requestInfo, const char *puk2, const char *pin2);
98 void ReqGetSimPin2InputTimes(const ReqDataInfo *requestInfo);
99 void ReqSetActiveSim(const ReqDataInfo *requestInfo, int32_t index, int32_t enable);
100 void ReqSimStkSendTerminalResponse(const ReqDataInfo *requestInfo, const char *strCmd);
101 void ReqSimStkSendEnvelope(const ReqDataInfo *requestInfo, const char *strCmd);
102 void ReqSimStkSendCallSetupRequestResult(const ReqDataInfo *requestInfo, int32_t accept);
103 void ReqSimStkIsReady(const ReqDataInfo *requestInfo);
104 void ReqGetRadioProtocol(const ReqDataInfo *requestInfo);
105 void ReqSetRadioProtocol(const ReqDataInfo *requestInfo, const HRilRadioProtocol *data);
106 void ReqSimOpenLogicalChannel(const ReqDataInfo *requestInfo, const char *appID, int32_t p2);
107 void ReqSimCloseLogicalChannel(const ReqDataInfo *requestInfo, int32_t channelId);
108 void ReqSimTransmitApduLogicalChannel(const ReqDataInfo *requestInfo, HRilApduSimIO *data, size_t dataLen);
109 void ReqSimAuthentication(const ReqDataInfo *requestInfo, HRilSimAuthenticationRequestInfo *data, size_t dataLen);
110 void ReqUnlockSimLock(const ReqDataInfo *requestInfo, int32_t lockType, const char *password);
111 void ReqSendSimMatchedOperatorInfo(const ReqDataInfo *requestInfo, HRilNcfgOperatorInfo *data, size_t dataLen);
112 uint8_t ToByte(char c);
113 #endif // OHOS_AT_SIM_H
114