Files

239 lines
9.6 KiB
C

/******************************************************************************
*(C) Copyright 2008 Marvell International Ltd.
* All Rights Reserved
******************************************************************************/
/*--------------------------------------------------------------------------------------------------------------------
* -------------------------------------------------------------------------------------------------------------------
*
* Filename: sim_api.h
*
* Description: API interface for SIM service
*
* History:
* Oct 16, 2008 - Qiang XU Creation of file
*
* Notes:
*
******************************************************************************/
#ifndef __SIM_API_H__
#define __SIM_API_H__
#include "ci_sim.h"
#include "telsim.h"
/* Enum value of STK cmd type and STK ind msg type */
typedef enum StkCmdTypeTag
{
STK_CMD_ENABLE_SIMAT = 0,
STK_CMD_DOWNLOAD_PROFILE = 1,
STK_CMD_GET_CAP_INFO = 2,
STK_CMD_GET_PROFILE = 3,
STK_CMD_SEND_ENVELOPE = 4,
STK_CMD_PROACTIVE = 11,
STK_CMD_SETUP_CALL = 12,
STK_CMD_DISPLAY_INFO = 13,
STK_CMD_END_SESSION = 14,
STK_CMD_SETUP_CALL_REQ_STATUS, // ----- CI_SIM_PRIM_SIMAT_CC_STATUS_IND
STK_CMD_SETUP_CALL_RESULT, // CI_SIM_PRIM_SIMAT_SEND_CALL_SETUP_RSP_IND
STK_CMD_PROACTIVE_REFRESH,
STK_CMD_PROACTIVE_SEND_SM_REQ_STATUS, // ----- CI_SIM_PRIM_SIMAT_SM_STATUS_IND
STK_CMD_PROACTIVE_SEND_SM_RESULT, // ----- CI_SIM_PRIM_SIMAT_SEND_SM_RSP_IND
STK_CMD_PROACTIVE_SEND_USSD_RESULT, // ----- CI_SIM_PRIM_SIMAT_SEND_SS_USSD_RSP_IND
STK_CMD_SEND_SS_REQ_STATUS, // ----- CI_SIM_PRIM_SIMAT_CC_STATUS_IND
STK_CMD_SEND_USSD_REQ_STATUS, // ----- CI_SIM_PRIM_SIMAT_CC_STATUS_IND
STK_TYPE_INVALID,
STK_TYPE_MAX,
STK_TYPE_MAX_LAST= 0x7FFFFFFF
} StkCmdType;
CiReturnCode SIM_SetCommand(UINT32 atHandle, int cmdLen, CHAR *cmdStr);
CiReturnCode SIM_GetImsi(UINT32 atHandle);
CiReturnCode SIM_GetPinState(UINT32 atHandle, int cpinCmdType);
CiReturnCode SIM_EnterPin(UINT32 atHandle, UINT8 no, UINT8 oper,CHAR* oldPasswd, CHAR* newPasswd);
CiReturnCode SIM_GetSIMInserted(UINT32 atHandle, UINT32 simSlot);
CiReturnCode SIM_SetLockFacility(UINT32 atHandle, int mode, int facType, CHAR* passwd, int passwdStrLen, BOOL pinRequired);
CiReturnCode SIM_RestrictedAccess(UINT32 atHandle, int cmd, int iFileId, char *valStr, int p1, int p2, int p3, char *data, int dataLen, int sessionId);
CiReturnCode SIM_GenericAccess(UINT32 atHandle, int cmdLen, char *cmdStr, int sessionId);
CiReturnCode SIM_GenericAccessCGLA(UINT32 atHandle, int cmdLen, char *cmdStr, int sessionId);
CiReturnCode SIM_CCHO(UINT32 atHandle, char *dfname);
CiReturnCode SIM_CCHC(UINT32 atHandle, UINT16 sessionid);
CiBoolean SIM_ConvertCrsmAtReply(UINT32 atHandle, CiPrimitiveID primId, const void *paras);
CiReturnCode SIM_GetSpn(UINT32 atHandle, int typeVal);
CiReturnCode STK_EnableProactiveCmdIndConfig(UINT32 atHandle, UINT8 enable);
CiReturnCode STK_GetSimProfile(UINT32 atHandle);
CiReturnCode STK_DownloadMeProfile(UINT32 atHandle, char *data, int dataLen);
CiReturnCode STK_SendEnvelopeCmd(UINT32 atHandle, char *data, int dataLen);
CiReturnCode STK_RespProactiveCmd(UINT32 atHandle, char *data, int dataLen);
CiReturnCode STK_RespSetupCall(UINT32 atHandle, UINT8 accept);
CiReturnCode STK_GetSimCapInfo(UINT32 atHandle);
CiReturnCode VSIM_GetVSim(UINT32 atHandle);
CiReturnCode VSIM_SetVSim(UINT32 atHandle);
CiReturnCode SIM_RunGSMAlgorithm(UINT32 atHandle, char *data, int dataLen);
CiReturnCode SIM_RunTContextAuth(UINT32 atHandle, char *rand, int randLen, char *autn, int autnLen, int sessionid);
CiReturnCode SIM_GetATR(UINT32 atHandle);
CiReturnCode SIM_GetApppin_Req(UINT32 atHandle);
CiReturnCode SIM_GetEccList(UINT32 atHandle);
CiReturnCode SIM_GetIsimAid(UINT32 atHandle);
CiReturnCode SIM_GetICCID(UINT32 atHandle);
CiReturnCode SIM_GetSimPoll(UINT32 atHandle);
CiReturnCode SIM_SetSimPoll(UINT32 atHandle, int modVal, int pollCfgVal, int stkPoll, int interval);
#ifdef PLATFORM_FOR_PS_LW
CiReturnCode SIM_BtSapConnect(UINT32 atHandle, UINT16 maxMsgSize);
CiReturnCode SIM_BtSapDisConnect(UINT32 atHandle);
CiReturnCode SIM_BtSapTransferAPDU(UINT32 atHandle, UINT8 apduType, char* apduCommand, int apduCommandLen);
CiReturnCode SIM_BtSapGetATR(UINT32 atHandle);
CiReturnCode SIM_BtSapSimControl(UINT32 atHandle, UINT8 control);
CiReturnCode SIM_BtSapGetCardStatus(UINT32 atHandle);
CiReturnCode SIM_BtSapSetTransportProtocol(UINT32 atHandle, UINT8 protocol);
#endif
CiReturnCode SIM_writesimget(UINT32 atHandle);
void simCnf(CiSgOpaqueHandle opSgCnfHandle, CiServiceGroupID svgId, CiPrimitiveID primId, CiRequestHandle reqHandle, void* paras);
void simInd(CiSgOpaqueHandle opSgOpaqueHandle, CiServiceGroupID svgId, CiPrimitiveID primId,CiIndicationHandle indHandle,void* pParam);
void resetSimParas(void);
void parseICCIDData(char *dst, char *data);
void libConvertNumToHex(char *inData, int inLen, char *outData);
int libConvertHexToNum(char *inData, int inLen, char *outData);
CiReturnCode SIM_GetAppNum(UINT32 atHandle, UINT8 op);
CiReturnCode SIM_GetAppInfo(UINT32 atHandle, UINT8 idx);
enum
{
CMD_TYPE_CPIN,
CMD_TYPE_EPIN,
CMD_TYPE_DETECT,
CMD_TYPE_MEPEPIN,
CMD_TYPE_CPINR,
};
/* Run GSM Algorithm, 3gpp 51.011*/
#define RGA_RAND_LEN 16
#define RGA_AUTN_LEN 16
#define RGA_SRES_LEN 4
#define RGA_CK_LEN 8
typedef enum OPER_NEEDCISIMCHV_TAG {
RESET_ACM = 1,
SET_ACM_MAX,
SET_CPUC,
SET_CLCK_SC,
} _NeedSimChvOper;
#define SIM_CARD_TYPE_USIM_BIT 0
#define SIM_CARD_TYPE_TEST_BIT 1
typedef enum AT_SIM_CARD_TYPE
{
AT_SIM_CARD_TYPE_SIM = 0,
AT_SIM_CARD_TYPE_USIM,
AT_SIM_CARD_TYPE_TEST_SIM,
AT_SIM_CARD_TYPE_TEST_USIM,
AT_SIM_CARD_TYPE_UNKNOWN,
}AtSimCardType;
/*add for AT*ISIMAID*/
typedef struct {
char isim_aid[UICC_AID_MAX_SIZE * 2 + 1];
//pthread_mutex_t sim_mutex;
} GetIsimAid;
typedef struct {
short eccNum;
char eccs[CI_SIM_ECC_LIST_MAX_SIZE * 20]; //strlen("<serviceCategory1>, <number1>,") < 20
} eccList;
typedef struct RespHandle_tag
{
UINT32 respHandle;
UINT16 bWaiting;
} RespHandle;
/************************************************************************************
*
* SIM related const and global variables
*
*************************************************************************************/
#define SIM_SELECT 164
#define READ_BINARY 176
#define READ_RECORD 178
#define GET_RESPONSE 192
#define UPDATE_BINARY 214
#define UPDATE_RECORD 220
#define STATUS 242
#define RETRIEVE_DATA 203
#define SET_DATA 219
#define LAST_RECORD 25
#define FIRST_RECORD 25
#define INVALID_INDEX -1
#define EMPTY 0xFF
#define SIM_CARD_UNKNOWN -1
#define SIM_CARD_ABSENT 0
#define SIM_CARD_PRESENT 1
#define SIM_SLOT_1 1
#define SIM_SLOT_2 2
/* Define some private primitives for SIM service */
#define CI_SIM_PRIM_GENERIC_CMD_ERGA_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 1)
#define CI_SIM_PRIM_GENERIC_CMD_ERTCA_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 2)
#define CI_SIM_PRIM_MEP_READ_STATUS_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 3) // for AT+CLCK="xx",2
#define CI_SIM_PRIM_MEP_READ_STATUS_EXT_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 4) // for AT*CLCK="xx",2
#define CI_SIM_PRIM_MEP_SET_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 5) // for AT+CLCK="xx",0/1 and AT*CLCK="xx",0/1
#define CI_SIM_PRIM_CHV_OPER_CPIN_VERIFY_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 6)
#define CI_SIM_PRIM_CHV_OPER_CPIN_UNBLOCK_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 7)
#define CI_SIM_PRIM_CHV_OPER_CPIN_CHANGE_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 8)
#define CI_SIM_PRIM_RESET_ACM_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 9)
#define CI_SIM_PRIM_SET_ACM_MAX_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 10)
#define CI_SIM_PRIM_SET_CPUC_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 11)
#define CI_SIM_PRIM_GET_EPIN_STATE_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 12)
#define CI_SIM_PRIM_GET_SIM_DETECT_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 13)
#define CI_SIM_PRIM_CSIM_OPEN_CHANNEL_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 14)// AT+CSIM to CCHO
#define CI_SIM_PRIM_CSIM_CLOSE_CHANNEL_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 15)// AT+CSIM to CCHC
#define CI_SIM_PRIM_GET_MEPEPIN_STATE_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 16)//AT*EPIN
#define CI_SIM_PRIM_CSIM_CGLA_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 17) /* AT+CSIM to CGLA */
#define CI_SIM_PRIM_REMAIN_PIN_RETRIES_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 18)//AT+CPINR
#define CI_SIM_PRIM_CLCK_SC_REQ (CI_SIM_PRIM_LAST_COMMON_PRIM + 19)
#define MAX_AID_LENGTH 16
#ifndef AT_PARSE_REFRESH
#define AT_PARSE_REFRESH
#endif
#define TEL_PROCESS_STK_IND_DIRECT
SimFileDir libGetDirFromEFFileID(const SimEfFileId FileIndex, UINT32 atHandle);
BOOL libCheckIsMasterFile(SimEfFileId *EFFileID, SimFileDir *SIMFileDir);
void libGetSIMEfFilePath( UINT16 root, UINT16 FileDir, UINT16 EFFileID, CiSimFilePath* pEfFilePath);
void libConvert2UsimResp(UINT32 len, UINT8 *pData, UINT8 *pUSIMResponse, UINT32 USIMSize);
CiReturnCode ciRequest_Transfer(CiServiceHandle svchandle,
CiPrimitiveID primId,
CiRequestHandle crsm_reqHandle,
void* paras);
void simInd_2(CiSgOpaqueHandle opSgIndHandle,
CiServiceGroupID svgId,
CiPrimitiveID primId,
CiIndicationHandle indHandle,
void* pParam);
void simCnf_2(CiSgOpaqueHandle opSgCnfHandle,
CiServiceGroupID svgId,
CiPrimitiveID primId,
CiRequestHandle reqHandle,
void* paras);
void libDisplaySimRc (CiRequestHandle atHandle, CiSimRc rc);
CiReturnCode SIM_GetCustomServiceProfileReq(UINT32 atHandle);
#endif