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
57typedef enum {
58    FCP_FILE_DES_T = 0x82,
59    FCP_FILE_ID_T = 0x83,
60} UsimFcpTag;
61
62typedef 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
71typedef struct {
72    uint16_t fileId;
73} UsimFileIdentifier;
74
75uint8_t *ConvertByteArrayToHexString(uint8_t *byteArray, int byteArrayLen);
76void ConvertHexStringToByteArray(uint8_t *originHexString, int responseLen, uint8_t *byteArray, int fcpLen);
77void ConvertUsimFcpToSimRsp(uint8_t **simResponse);
78void CreateSimRspByte(uint8_t simRspByte[], int responseLen, UsimFileIdentifier *fId, UsimFileDescriptor *fDescriptor);
79uint8_t FcpFileDescriptorQuery(uint8_t *fcpByte, uint16_t fcpLen, UsimFileDescriptor *filledStructPtr);
80uint8_t FcpFileIdentifierQuery(uint8_t *fcpByte, uint16_t fcpLen, UsimFileIdentifier *filledStructPtr);
81uint8_t FcpTlvSearchTag(uint8_t *dataPtr, uint16_t len, UsimFcpTag tag, uint8_t **outPtr);
82uint8_t IsCyclicFile(uint8_t fd);
83uint8_t IsDedicatedFile(uint8_t fd);
84uint8_t IsLinearFixedFile(uint8_t fd);
85uint8_t IsTransparentFile(uint8_t fd);
86void ReqGetSimStatus(const ReqDataInfo *requestInfo);
87void ReqGetSimIO(const ReqDataInfo *requestInfo, const HRilSimIO *data, size_t dataLen);
88void ReqGetSimImsi(const ReqDataInfo *requestInfo);
89void ReqGetSimLockStatus(const ReqDataInfo *requestInfo, const HRilSimClock *data, size_t dataLen);
90void ReqSetSimLock(const ReqDataInfo *requestInfo, const HRilSimClock *data, size_t dataLen);
91void ReqChangeSimPassword(const ReqDataInfo *requestInfo, const HRilSimPassword *data, size_t dataLen);
92void ReqUnlockPin(const ReqDataInfo *requestInfo, const char *pin);
93void ReqUnlockPuk(const ReqDataInfo *requestInfo, const char *puk, const char *pin);
94void ReqGetSimPinInputTimes(const ReqDataInfo *requestInfo);
95void ReqGetSimPinInputTimesRemain(const ReqDataInfo *requestInfo, HRilPinInputTimes *pinInputTimes);
96void ReqUnlockPin2(const ReqDataInfo *requestInfo, const char *pin2);
97void ReqUnlockPuk2(const ReqDataInfo *requestInfo, const char *puk2, const char *pin2);
98void ReqGetSimPin2InputTimes(const ReqDataInfo *requestInfo);
99void ReqSetActiveSim(const ReqDataInfo *requestInfo, int32_t index, int32_t enable);
100void ReqSimStkSendTerminalResponse(const ReqDataInfo *requestInfo, const char *strCmd);
101void ReqSimStkSendEnvelope(const ReqDataInfo *requestInfo, const char *strCmd);
102void ReqSimStkSendCallSetupRequestResult(const ReqDataInfo *requestInfo, int32_t accept);
103void ReqSimStkIsReady(const ReqDataInfo *requestInfo);
104void ReqGetRadioProtocol(const ReqDataInfo *requestInfo);
105void ReqSetRadioProtocol(const ReqDataInfo *requestInfo, const HRilRadioProtocol *data);
106void ReqSimOpenLogicalChannel(const ReqDataInfo *requestInfo, const char *appID, int32_t p2);
107void ReqSimCloseLogicalChannel(const ReqDataInfo *requestInfo, int32_t channelId);
108void ReqSimTransmitApduLogicalChannel(const ReqDataInfo *requestInfo, HRilApduSimIO *data, size_t dataLen);
109void ReqSimAuthentication(const ReqDataInfo *requestInfo, HRilSimAuthenticationRequestInfo *data, size_t dataLen);
110void ReqUnlockSimLock(const ReqDataInfo *requestInfo, int32_t lockType, const char *password);
111void ReqSendSimMatchedOperatorInfo(const ReqDataInfo *requestInfo, HRilNcfgOperatorInfo *data, size_t dataLen);
112uint8_t ToByte(char c);
113#endif // OHOS_AT_SIM_H
114