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

📄 sim.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    return(res);
}
/*
 * SIM_Invalidate
 *
 * Invalidate the current EF
 */
SYS_UWORD16 SIM_Invalidate(SYS_UWORD8 *rP, SYS_UWORD8 *lP)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_INVALIDATE;
    p->xbuf[2] = 0; 
    p->xbuf[3] = 0; 
    p->xbuf[4] = 0; 

    res = SIM_Command(p, 0, rP, lP);

#ifdef SIM_DEBUG_TRACE
	SIM_dbg_write_trace((SYS_UWORD8 *)"ALCMD", 5);
	SIM_dbg_write_trace(p->xbuf, 5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"ALANS", 5);
	SIM_dbg_write_trace(lP, 1);
	SIM_dbg_write_trace(rP, *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_Rehabilitate
 *
 * Rehabilitate the current EF
 */
SYS_UWORD16 SIM_Rehabilitate(SYS_UWORD8 *rP, SYS_UWORD8 *lP)
{
    SIM_PORT *p;
    int len;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_REHABILITATE;
    p->xbuf[2] = 0; 
    p->xbuf[3] = 0; 
    p->xbuf[4] = 0;

    res = SIM_Command(p, 0, rP, lP);        

#ifdef SIM_DEBUG_TRACE
	SIM_dbg_write_trace((SYS_UWORD8 *)"AMCMD", 5);
	SIM_dbg_write_trace(p->xbuf, 5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"AMANS", 5);
	SIM_dbg_write_trace(lP, 1);
	SIM_dbg_write_trace(rP, *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_UpdateBinary
 *
 * Store data in the current transparent EF
 */
SYS_UWORD16 SIM_UpdateBinary(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD16 offset, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_UPDATE_BINARY;
    p->xbuf[2] = offset >> 8; 
    p->xbuf[3] = offset & 0xFF; 
    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 *)"ANCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"ANANS", 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_ReadRecord
 *
 * Read a record (recNum) from the current linear fixed or cyclic EF
 */
SYS_UWORD16 SIM_ReadRecord(SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 recNum, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_READ_RECORD;
    p->xbuf[2] = recNum; 
    p->xbuf[3] = mode; 
    p->xbuf[4] = len; 

    res = SIM_Command(p, 0, dat, rcvSize);        

#ifdef SIM_DEBUG_TRACE
	SIM_dbg_write_trace((SYS_UWORD8 *)"AOCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"AOANS", 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_UpdateRecord
 *
 * Store a record (recNum) in the current linear fixed or cyclic EF
 */
SYS_UWORD16 SIM_UpdateRecord(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 recNum, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_UPDATE_RECORD;
    p->xbuf[2] = recNum; 
    p->xbuf[3] = mode; 
    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 *)"APCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"APANS", 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_Seek
 *
 * Search data in a linear fixed or cyclic EF.
 * return the first record number in which it found the data.
 */
SYS_UWORD16 SIM_Seek(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 mode, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
   SIM_PORT *p;
   int i;
   int res;

   p = &(Sim[0]);

   p->xbuf[0] = GSM_CLASS;
   p->xbuf[1] = SIM_SEEK;
   p->xbuf[2] = 0; 
   p->xbuf[3] = mode; 
   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 *)"AQCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"AQANS", 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_Increase
 *
 * Add value to a record of a cyclic EF
 */
SYS_UWORD16 SIM_Increase(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int len;
    int i;
    int res;

    p = &(Sim[0]);

    len = 3;

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_INCREASE;
    p->xbuf[2] = 0; 
    p->xbuf[3] = 0; 
    p->xbuf[4] = 3; 

    for (i=0;i<3;i++)
    {
        p->xbuf[5+i] = *(dat+i);
    }

    res = SIM_Command(p, len, result, rcvSize);        

#ifdef SIM_DEBUG_TRACE
	SIM_dbg_write_trace((SYS_UWORD8 *)"ARCMD", 5);
	SIM_dbg_write_trace(p->xbuf, 3+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"ARANS", 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_TerminalProfile
 *
 * Used by ME to send its toolkit capabilities to SIM
 */
SYS_UWORD16 SIM_TerminalProfile(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_TERMINAL_PROFILE;
    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 *)"ASCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"ASANS", 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_FETCH
 *
 * Used by ME to inquiry of what SIM toolkit need to do
 */
SYS_UWORD16 SIM_Fetch(SYS_UWORD8 *result, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_FETCH;
    p->xbuf[2] = 0; 
    p->xbuf[3] = 0; 
    p->xbuf[4] = len; 


    res = SIM_Command(p, 0, result, rcvSize);        

#ifdef SIM_DEBUG_TRACE
	SIM_dbg_write_trace((SYS_UWORD8 *)"ATCMD", 5);
	SIM_dbg_write_trace(p->xbuf, 5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"ATANS", 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_TerminalResponse *
 * Used for ME to respond at a SIM toolkit command
 */
SYS_UWORD16 SIM_TerminalResponse(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT *p;
    int i;
    int res;

    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_TERMINAL_RESPONSE;
    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 *)"AUCMD", 5);
	SIM_dbg_write_trace(p->xbuf, len+5);
	SIM_dbg_write_trace((SYS_UWORD8 *)"AUANS", 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_Envelope
 *
 * Used by Network to tansfert data download to the SIM in a transparent way for user
 */
SYS_UWORD16 SIM_Envelope(SYS_UWORD8 *result, SYS_UWORD8 *dat, SYS_UWORD8 len, SYS_UWORD8 *rcvSize)
{
    SIM_PORT    *p;
    int         i;
    int         res;


    p = &(Sim[0]);

    p->xbuf[0] = GSM_CLASS;
    p->xbuf[1] = SIM_ENVELOPE;
    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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -