📄 sim.h
字号:
#define SIM_SEEK 0xA2
#define SIM_INCREASE 0x32
#define SIM_VERIFY_CHV 0x20
#define SIM_CHANGE_CHV 0x24
#define SIM_DISABLE_CHV 0x26
#define SIM_ENABLE_CHV 0x28
#define SIM_UNBLOCK_CHV 0x2C
#define SIM_INVALIDATE 0x04
#define SIM_REHABILITATE 0x44
#define SIM_RUN_GSM_ALGO 0x88
#define SIM_GET_RESPONSE 0xC0
#define SIM_TERMINAL_PROFILE 0x10
#define SIM_FETCH 0x12
#define SIM_TERMINAL_RESPONSE 0x14
#define SIM_ENVELOPE 0xC2
// SIM file identifiers
#define MF 0x3F00
#define EF_ICCID 0x2FE2
#define DF_GSM 0x7F20
#define DF_DCS1800 0x7F21
#define EF_LP 0x6F05
#define EF_IMSI 0x6F07
#define EF_KC 0x6F20
#define EF_PLMNSEL 0x6F30
#define EF_HPLMN 0x6F31
#define EF_ACMAX 0x6F37
#define EF_SST 0x6F38
#define EF_ACM 0x6F39
#define EF_PUCT 0x6F41
#define EF_CBMI 0x6F45
#define EF_BCCH 0x6F74
#define EF_ACC 0x6F78
#define EF_FPLMN 0x6F7B
#define EF_LOCI 0x6F7E
#define EF_AD 0x6FAD
#define EF_PHASE 0x6FAE
#define DF_TELECOM 0x7F10
#define EF_ADN 0x6F3A
#define EF_FDN 0x6F3B
#define EF_SMS 0x6F3C
#define EF_CCP 0x6F3D
#define EF_MSISDN 0x6F40
#define EF_SMSP 0x6F42
#define EF_SMSS 0x6F43
#define EF_LND 0x6F44
#define EF_EXT1 0x6F4A
#define EF_EXT2 0x6F4B
#define EF_ECC 0x6FB7
#define MASK_INS 0xFE
#define MASK_CMD 0x11
#define MASK_RST 0x10
// Buffer sizes
#define RSIMBUFSIZE 256
#define RSIZESW1SW2 2
#define XSIMBUFSIZE 256
// Structures
typedef struct
{
volatile unsigned short cmd;
volatile unsigned short stat;
volatile unsigned short conf1;
volatile unsigned short conf2;
volatile unsigned short it;
volatile unsigned short rx;
volatile unsigned short tx;
volatile unsigned short maskit;
#if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12))
volatile unsigned short it_cd;
#endif
} SIM_CONTROLLER;
typedef struct
{
SIM_CONTROLLER *c;
SYS_UWORD8 *xIn; // xmit input pointer
SYS_UWORD8 *xOut; // xmit output pointer
unsigned errorSIM; // code return in case of error detectd
unsigned short conf1; // image of the configuration register - avoids read/mod/write cycles
volatile unsigned short txParityErr;
unsigned short rxParityErr; // if 0 no parity error on receipt, 1 if...
SYS_UWORD8 Freq_Algo; //use to determine which sim clk freq to choose for running GSM algo
SYS_UWORD8 PTS_Try; //use to calculate how many PTS try were already done
SYS_UWORD8 FileC; //value of File Characteristic
SYS_UWORD16 etu9600;
SYS_UWORD16 etu400;
SYS_UWORD16 startclock; //744 clock cycle translated in ETU
SYS_UWORD16 stopclock; //1860 clock cycle translated in ETU
SYS_UWORD8 moderx; //inform that we are in receive mode
// 0 : mode of normal reception without procedure
// 1 : mode of wait for acknowledge during reception of char
// 2 : mode of reception of data by bloc
// 3 : mode of reception of data char by char (proc char)
// 4 : mode of reception of data char by char (data)
// 5 : mode of reception of procedure char SW1/SW2
// 6 : mode of wait for acknowledge char after transmission of char
SYS_UWORD16 expected_data; //number of expected char in receive mode proc char
SYS_UWORD8 ack; //acknowledge char
SYS_UWORD8 null_received; //indicates if a NULL char was received
SYS_UWORD8 hw_mask; //mask used because of pole112 hw prb
SYS_UWORD8 rbuf[RSIMBUFSIZE];
SYS_UWORD8 rx_index; // receive index on rbuf buffer
SYS_UWORD8 xbuf[XSIMBUFSIZE];
SYS_UWORD8 rSW12[RSIZESW1SW2]; //buffer to store SW1 and SW2
SYS_UWORD8 SWcount; //static counter
void (*InsertFunc)(void);
void (*RemoveFunc)(void);
}
SIM_PORT;
typedef struct
{
SYS_UWORD8 Inverse;
SYS_UWORD8 AtrSize;
SYS_UWORD8 AtrData[MAX_ATR_SIZE];
} SIM_CARD;
/*
* Prototypes
*/
void SIM_IntHandler(void);
#if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12))
void SIM_CD_IntHandler(void);
#endif
void SIM_WriteBuffer(SIM_PORT *p, SYS_UWORD16 offset, SYS_UWORD16 n);
SYS_UWORD16 SIM_Command(SIM_PORT *p, SYS_UWORD16 n, SYS_UWORD8 *rP, SYS_UWORD8 *lP);
SYS_UWORD16 SIM_Dummy(void);
void SIM_InitLog(void);
void SIM_Init(void (Insert(void)), void (Remove(void)));
void SIM_Initialize(void);
SYS_UWORD16 SIM_Register(void (Insert(void)), void (Remove(void)));
SYS_UWORD16 SIM_Reset(SIM_CARD *c);
SYS_UWORD16 SIM_Select(SYS_UWORD16 id, SYS_UWORD8 *dat, SYS_UWORD8 *size);
SYS_UWORD16 SIM_Status(SYS_UWORD8 *dat, SYS_UWORD8 *size);
SYS_UWORD16 SIM_ReadBinary(SYS_UWORD8 *dat, SYS_UWORD16 offset, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_UpdateBinary(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD16 offset, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_ReadRecord(SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 recNum, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_UpdateRecord(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 recNum, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_Seek(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_Increase(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *size);
// Authentication
SYS_UWORD16 SIM_VerifyCHV(SYS_UWORD8 *result, SYS_UWORD8 *chv, SYS_UWORD8 chvType, SYS_UWORD8 *size);
SYS_UWORD16 SIM_ChangeCHV(SYS_UWORD8 *result,SYS_UWORD8 *oldChv, SYS_UWORD8 *newChv, SYS_UWORD8 chvType, SYS_UWORD8 *size);
SYS_UWORD16 SIM_DisableCHV(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *size);
SYS_UWORD16 SIM_EnableCHV(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *size);
SYS_UWORD16 SIM_UnblockCHV(SYS_UWORD8 *result, SYS_UWORD8 *unblockChv, SYS_UWORD8 *newChv, SYS_UWORD8 chvType, SYS_UWORD8 *size);
SYS_UWORD16 SIM_Invalidate(SYS_UWORD8 *rP, SYS_UWORD8 *size);
SYS_UWORD16 SIM_Rehabilitate(SYS_UWORD8 *rP, SYS_UWORD8 *size);
SYS_UWORD16 SIM_RunGSMAlgo(SYS_UWORD8 *result, SYS_UWORD8 *rand, SYS_UWORD8 *size);
SYS_UWORD16 SIM_GetResponse(SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *size);
SYS_UWORD16 SIM_TxParityErrors();
SYS_UWORD16 SIM_TerminalProfile(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize);
SYS_UWORD16 SIM_Fetch(SYS_UWORD8 *result, SYS_UWORD8 len, SYS_UWORD8 *rcvSize);
SYS_UWORD16 SIM_TerminalResponse(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize);
SYS_UWORD16 SIM_Envelope(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize);
SYS_UWORD16 SIM_WaitReception(SIM_PORT *p);
void SIM_PowerOff(void);
void SIM_Interpret_FileCharacteristics(SIM_PORT *p);
SYS_UWORD16 SIM_PTSprocedure(SIM_CARD *cP, SIM_PORT *p);
void SIM_WARMReset (SIM_PORT *p);
void SIM_SleepMode_In(SYS_UWORD32 param);
void SIM_SleepMode_Out(SIM_PORT *p);
SYS_UWORD8 SIM_GetFileCharacteristics(SIM_PORT *p);
SYS_UWORD16 SIM_ATRdynamictreatement (SIM_PORT *p, SIM_CARD *c);
SYS_UWORD16 SIM_Waitforchars (SIM_PORT *p, SYS_UWORD16 max_wait);
void SIM_Calcetu (SIM_PORT *p);
SYS_UWORD8 SIM_Translate_atr_char (SYS_UWORD8 input, SIM_CARD *cP);
SYS_UWORD8 SIM_StartVolt (void);
SYS_UWORD8 SIM_SwitchVolt (void);
SYS_UWORD16 SIM_ManualStart (SIM_PORT *p);
SYS_UWORD8 SIM_Memcpy(SYS_UWORD8 *Buff_target, SYS_UWORD8 Buff_source[], SYS_UWORD8 len);
SYS_BOOL SIM_SleepStatus(void);
/*
* Global variables
*/
#ifdef SIM_C
#define SI_GLOBAL
#else
#define SI_GLOBAL extern
#endif
SI_GLOBAL SIM_PORT Sim[1];
SI_GLOBAL NU_TIMER SIM_timer;
SI_GLOBAL STATUS status_os_sim;
SI_GLOBAL SYS_UWORD8 SIM_sleep_status;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -