⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sim.h

📁 是一个手机功能的模拟程序
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -