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

📄 iccard.c

📁 通过车载终端采集GPS数据
💻 C
字号:
#include "typedef.h"
#include "iccard.h"
ICCARD_STATUS_BUF gICcardStatus;
/*****BCC校验***
*返回值:BCC校验的值
*pSrcBuf:需要加校验的报文
*nSrcLen;pSrcBuf的长度
******************/
/*Byte iccard_bcccode(Byte* pSrcBuf, Byte nSrcLen)
{
    Byte nRet, i;
    nRet = pSrcBuf[0];
    for (i=1; i<nSrcLen; i++)
        nRet ^= pSrcBuf[i];
    return nRet;
}

/****BCC校验检查**************
*返回值:0表示校验未通过,否则校验通过
*pSrcBuf:进行校验的报文,其中最后一个字节为BCC校验和
*nSrcLen;pSrcBuf的长度
******************************/
/*Byte iccard_bccdecode(Byte* pSrcBuf, Byte nSrcLen)
{
    Byte nBcc, i;
    if (nSrcLen >1)
    {
        nBcc = pSrcBuf[0];
        for (i=1; i<(nSrcLen-1); i++)
            nBcc ^= pSrcBuf[i];
        if (nBcc == pSrcBuf[nSrcLen-1])
            return nSrcLen;
        else
            return 0;
    }
    else
        return 0;
}

/****解码函数***************
*作用:还原出原始报文,主要是针对报文中DLE
*返回值:0表示报文错误或者无有意义报文(BCC校验不正确),否则返回原始报文的长度
*pSrcBuf:包括DLE的报文,该报文包括STX和ETX
*pDestBuf:去除DLE的报文
*nSrcLen;pSrcBuf的长度
****************************/
/*Byte iccard_dlepack(Byte* pSrcBuf, Byte* pDestBuf, Byte nSrcLen)
{
    Byte i, j, bFound;
    if ((ICCARD_STX == pSrcBuf[0]) && (ICCARD_ETX == pSrcBuf[nSrcLen-1]))
    {
        if (nSrcLen > 3)
        {
            i = 1;
            j = 0;
            bFound = 0;
            while (i < (nSrcLen-1))
            {
                if (1 == bFound)
                {
                    bFound = 0;
                    pDestBuf[j] = pSrcBuf[i];
                    i++;
                    j++;
                }
                else
                {
                    if (ICCARD_DLE == pSrcBuf[i])
                    {
                        bFound = 1;
                        i++;
                    }
                    else
                    {
                        pDestBuf[j] = pSrcBuf[i];
                        i++;
                        j++;
                    }
                }
                return iccard_bccdecode(pDestBuf, j);                    
            }
        }
        return 0;
    }
    else if (2 == nSrcLen)
        return nSrcLen;
    else
        return 0;
}

char gICcardSendBuf[256];//发送缓存
//发送通信ACK
void iccard_communicationACK(Byte nValue)
{
    gICcardSendBuf[0] = 0x06;
    gICcardSendBuf[1] = nValue;
    sio_send(gICcardSendBuf, 2);
}

#define ICCARD_STATUSRELAY_TIMEOUT 1
//约定50ms执行一次
void iccard_process()
{
    Byte nRecLen, nRecTrueLen;
    Byte* ptr;
    Byte recBuf[255];
    nRecLen = ;
    nRecTrueLen = iccard_dlepack(ptr. recBuf, nRecLen);
    switch (gICcardStatus.curstatus)
    {
    case ICCARD_STATUS_IDLE:
        if (nRecTrueLen > 2)
        {
            iccard_communicationACK(recBuf[1]);
            if (recBuf[1] < 0x80)
            {
                //命令报
                gICcardStatus.curCommand = recBuf[2];
                gICcardStatus.curstatus = ICCARD_STATUS_RELAY;
                //对刷卡数据即克上传
                if (ICCARD_CMD_CHECKWORK == recBuf[2])
                {
                    if (22 == nRecTrueLen)
                    {
                        set_driver_id(recBuf+3);    
                        make_assess_message(recBuf[22]+1);
                        gICcardStatus.curstatus = ICCARD_STATUS_WAIT_WORKRESPONSE;
                        gICcardStatus.curTimeout = ;
                    }
                    
                }
                else if (ICCARD_CMD_CARDDATA == recBuf[2])
                {
                }
            }
        }
        break;
    case ICCARD_STATUS_WAITACK:
        break;
    case ICCARD_STATUS_WAITRESP:
        break;
    case ICCARD_STATUS_RELAY:
        //针对不同的命令采用不同的方式回送应答
        //对于上下班以及刷卡数据,只有在收到中心应答以后才回送数据报
        //对于对时请求,即可发送
        if ()
        {
        }
        break;
    case ICCARD_STATUS_WAITACK2:
        break;
    case ICCARD_STATUS_WAIT_WORKRESPONSE:
        gICcardStatus.curTimeout--;
        if (0 == gICcardStatus.curTimeout)
            gICcardStatus.curstatus = ICCARD_STATUS_IDLE;
        break;
    }
}*/

⌨️ 快捷键说明

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