?? sim.c
字號:
#endif
return(res);
}
/*
* SIM_Status
*
* Returns data received from card and number of bytes received
*/
SYS_UWORD16 SIM_Status(SYS_UWORD8 *dat, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
short len = 0x16; // length specified in GSM 11.11
int res;
p = &(Sim[0]);
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_STATUS;
p->xbuf[2] = 0;
p->xbuf[3] = 0;
p->xbuf[4] = len;
res = SIM_Command(p, 0, dat, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"ABCMD", 5);
SIM_dbg_write_trace(p->xbuf, 5);
SIM_dbg_write_trace((SYS_UWORD8 *)"ABANS", 5);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_Status_Extended
*
* Returns data received from card and number of bytes received
* Add extra parameter len : number of returned byte
*/
SYS_UWORD16 SIM_Status_Extended(SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
int res;
p = &(Sim[0]);
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_STATUS;
p->xbuf[2] = 0;
p->xbuf[3] = 0;
p->xbuf[4] = len;
res = SIM_Command(p, 0, dat, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"ACCMD", 5);
SIM_dbg_write_trace(p->xbuf, 5);
SIM_dbg_write_trace((SYS_UWORD8 *)"ACANS", 5);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_ReadBinary
*
* Read data from the current EF
*/
SYS_UWORD16 SIM_ReadBinary(SYS_UWORD8 *dat, SYS_UWORD16 offset, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
int res;
p = &(Sim[0]);
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_READ_BINARY;
p->xbuf[2] = offset >> 8;
p->xbuf[3] = offset & 0xFF;
p->xbuf[4] = len;
res = SIM_Command(p, 0, dat, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"ADCMD", 5);
SIM_dbg_write_trace(p->xbuf, 5);
SIM_dbg_write_trace((SYS_UWORD8 *)"ADANS", 5);
SIM_dbg_write_trace(rcvSize, 1);
SIM_dbg_write_trace(dat, *rcvSize);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_VerifyChv
*
* Verify the specified CHV (chvType)
*/
SYS_UWORD16 SIM_VerifyCHV(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 chvType, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
SYS_UWORD8 len;
int i;
int res;
p = &(Sim[0]);
len = 8;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_VERIFY_CHV;
p->xbuf[2] = 0;
p->xbuf[3] = chvType;
p->xbuf[4] = len;
for (i=0;i<8;i++)
{
p->xbuf[5+i] = *(dat+i);
}
res = SIM_Command(p, 8, result, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AECMD", 5);
SIM_dbg_write_trace(p->xbuf, len+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AEANS", 5);
SIM_dbg_write_trace(rcvSize, 1);
SIM_dbg_write_trace(result, *rcvSize);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_RunGSMAlgo
*
* Authentication procedure
*/
SYS_UWORD16 SIM_RunGSMAlgo(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
int len;
int i;
int res;
p = &(Sim[0]);
if(p->Freq_Algo) //13/4 Mhz mandatory ??
p->c->conf1 = p->conf1 &= ~SIM_CONF1_SCLKDIV;
len = 16;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_RUN_GSM_ALGO;
p->xbuf[2] = 0;
p->xbuf[3] = 0;
p->xbuf[4] = len;
for (i=0;i<len;i++)
{
p->xbuf[5+i] = *(dat+i);
}
res = SIM_Command(p, len, result, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AFCMD", 5);
SIM_dbg_write_trace(p->xbuf, len+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AFANS", 5);
SIM_dbg_write_trace(rcvSize, 1);
SIM_dbg_write_trace(result, *rcvSize);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
if(p->Freq_Algo)
p->c->conf1 = p->conf1 |= SIM_CONF1_SCLKDIV;
return(res);
}
/*
* SIM_GetResponse
*
* Get data from the card
*
* SYS_UWORD8 len : length of the data to get
*/
SYS_UWORD16 SIM_GetResponse(SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
SIM_PORT *p;
int res;
p = &(Sim[0]);
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_GET_RESPONSE;
p->xbuf[2] = 0;
p->xbuf[3] = 0;
p->xbuf[4] = len;
res = SIM_Command(p, 0, dat, rcvSize);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AGCMD", 5);
SIM_dbg_write_trace(p->xbuf, 5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AGANS", 5);
SIM_dbg_write_trace(rcvSize, 1);
SIM_dbg_write_trace(dat, *rcvSize);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_ChangeCHV
*
* Change the specified CHV (chvType)
*/
SYS_UWORD16 SIM_ChangeCHV(SYS_UWORD8 *result,SYS_UWORD8 *oldChv, SYS_UWORD8 *newChv, SYS_UWORD8 chvType, SYS_UWORD8 *lP)
{
SIM_PORT *p;
SYS_UWORD8 len;
int i;
SYS_UWORD16 res;
p = &(Sim[0]);
len = 16;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_CHANGE_CHV;
p->xbuf[2] = 0;
p->xbuf[3] = chvType;
p->xbuf[4] = len;
// Copy bytes to buffer
for (i=0;i<8;i++)
{
p->xbuf[5+i] = *(oldChv+i);
}
for (i=0;i<8;i++)
{
p->xbuf[13+i] = *(newChv+i);
}
res = SIM_Command(p, len, result, lP);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AHCMD", 5);
SIM_dbg_write_trace(p->xbuf, len+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AHANS", 5);
SIM_dbg_write_trace(lP, 1);
SIM_dbg_write_trace(result, *lP);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_DisableCHV
*
* Disable CHV 1
*/
SYS_UWORD16 SIM_DisableCHV(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *lP)
{
SIM_PORT *p;
int len;
int i;
int res;
p = &(Sim[0]);
len = 8;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_DISABLE_CHV;
p->xbuf[2] = 0;
p->xbuf[3] = 1;
p->xbuf[4] = 8;
for (i=0;i<8;i++)
{
p->xbuf[5+i] = *(dat+i);
}
res = SIM_Command(p, len, result, lP);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AICMD", 5);
SIM_dbg_write_trace(p->xbuf, 8+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AIANS", 5);
SIM_dbg_write_trace(lP, 1);
SIM_dbg_write_trace(result, *lP);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_EnableCHV
*
* Enable CHV 1
*/
SYS_UWORD16 SIM_EnableCHV(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *lP)
{
SIM_PORT *p;
int len;
int i;
int res;
p = &(Sim[0]);
len = 8;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_ENABLE_CHV;
p->xbuf[2] = 0;
p->xbuf[3] = 1;
p->xbuf[4] = len;
for (i=0;i<len;i++)
{
p->xbuf[5+i] = *(dat+i);
}
res = SIM_Command(p, len, result, lP);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AJCMD", 5);
SIM_dbg_write_trace(p->xbuf, len+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AJANS", 5);
SIM_dbg_write_trace(lP, 1);
SIM_dbg_write_trace(result, *lP);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
return(res);
}
/*
* SIM_UnblockCHV
*
* Unblock the specified CHV (chvType) and store a new CHV
*/
SYS_UWORD16 SIM_UnblockCHV(SYS_UWORD8 *result, SYS_UWORD8 *unblockChv, SYS_UWORD8 *newChv,
SYS_UWORD8 chvType, SYS_UWORD8 *lP)
{
SIM_PORT *p;
int len;
int i;
int res;
p = &(Sim[0]);
len = 16;
p->xbuf[0] = GSM_CLASS;
p->xbuf[1] = SIM_UNBLOCK_CHV;
p->xbuf[2] = 0;
p->xbuf[3] = chvType;
p->xbuf[4] = len;
for (i=0;i<8;i++)
{
p->xbuf[5+i] = *(unblockChv+i);
}
for (i=0;i<8;i++)
{
p->xbuf[13+i] = *(newChv+i);
}
res = SIM_Command(p, len, result, lP);
#ifdef SIM_DEBUG_TRACE
SIM_dbg_write_trace((SYS_UWORD8 *)"AKCMD", 5);
SIM_dbg_write_trace(p->xbuf, len+5);
SIM_dbg_write_trace((SYS_UWORD8 *)"AKANS", 5);
SIM_dbg_write_trace(lP, 1);
SIM_dbg_write_trace(result, *lP);
SIM_dbg_tmp[0] = (SYS_WORD8)(res>>8);
SIM_dbg_tmp[1] = (SYS_WORD8)res;
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
SIM_dbg_write_trace(SIM_dbg_null, SIM_DBG_NULL);
if (SIM_dbg_tdma_diff > SIM_dbg_max_interchardelay)
SIM_dbg_max_interchardelay = SIM_dbg_tdma_diff;
SIM_dbg_tmp[0] = (SYS_UWORD8)(SIM_dbg_tdma_diff >> 8);
SIM_dbg_tmp[1] = (SYS_UWORD8)(SIM_dbg_tdma_diff);
SIM_dbg_write_trace(SIM_dbg_tmp, 2);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -