system1.c

来自「mifarea卡程序mifarea卡程序mifarea卡程序」· C语言 代码 · 共 356 行

C
356
字号
/****************************************
 * system.c                             *
 * Designe by 刘俐训                    *
 * configrations and status             *
 * create: 04-16-2007                   *
 * update: 04-16-2007                   *
 ****************************************/

#include "includes.h"

// #define DBG_SYSTEM

static unsigned char code ver[] = "HD: 1.0, SF: 3.0.e564, update: 2007-04-15";
static unsigned char code sysinfo[] = "Icc Reader, Designed by Liu lixun";
static unsigned char code pcbinfo[] = "ECG/LT 7.827.155(V2.0) ECG/LT 7.827.156(V2.0)";


// action on card in/out
bit fTCBeep;
bit fRFCBeep;
bit fNotice;
bit fStopOnACK;
bit fAutoSearchCard;
bit InvPack;
unsigned int CardConfirmTime;   // time period of conform a rf card exist


static unsigned char lorc;      // led on rf card
static unsigned char lotc;      // led on touch card
static unsigned char lobc;      // led on both card
static unsigned char lonc;      // led on none card
static bit fLed;                // enable or disable led operation when card in/out


// init parameters
void SysInit(void)
{
    int ch;
    
    ComWrite("System initializing...\r\n", 24);
    
    // read beep flag
    ch = ParaRead(PARA_SWITCHS);
    if(ch >= 0)
    {
        fTCBeep = ch & F_BOTC;
        fRFCBeep = ch & F_BORFC;
        fLed = ch & F_LED;
        fNotice = ch & F_NOTICE;
        fStopOnACK = ch & F_SNOA;
        fAutoSearchCard = ch & F_ASC;
        InvPack = ch & F_CINV;
        ComWrite("Success switch.\r\n", 17);
    }
    else
    {
        fTCBeep = 1;
        fRFCBeep = 1;
    }
    
    // read led on rf card
    ch = ParaRead(PARA_LORC);
    if(ch >= 0)
    {
        lorc = ch;
        ComWrite("Success lorc.\r\n", 15);
    }
    else
    {
        lorc = 12;
    }

    // read led on touch card
    ch = ParaRead(PARA_LOTC);
    if(ch >= 0)
    {
        lotc = ch;
        ComWrite("Success lotc.\r\n", 15);
    }
    else
    {
        lotc = 25;
    }

    // read led on both card
    ch = ParaRead(PARA_LOBC);
    if(ch >= 0)
    {
        lobc = ch;
        ComWrite("Success lobc.\r\n", 15);
    }
    else
    {
        lobc = 0xff;
    }

    // read led on none card
    ch = ParaRead(PARA_LOBC);
    if(ch >= 0)
    {
        lonc = ch;
        ComWrite("Success lonc.\r\n", 15);
    }
    else
    {
        lonc = 0;
    }
    
    // read rf card confirm time
    ch = ParaRead(PARA_RFCCT);
    if(ch >= 0)
    {
        CardConfirmTime = (unsigned int)ch * 10;
        ComWrite("Success rcct.\r\n", 15);
    }
    else
    {
        CardConfirmTime = 200;
    }
    
    ComWrite("\r\n", 2);
}

void CardAction(unsigned char ticc, unsigned char rfc)
{
    if(fLed)
    {
        if(ticc || rfc)
        {
            if((ticc == 2) && (rfc == 2))
                led(lobc);
            else if(ticc == 2)
                led(lotc);
            else if(rfc == 2)
                led(lorc);
            else
                led(lonc);
        }
    }
}

void SysCommand(char *cmd, int len)
{
    unsigned char buf[20];
    int ch;
    unsigned char snr[4];
    
    while(len > 0)
    {
        buf[0] = cmd[0];
        switch(cmd[0])
        {
            case CMD_EJECTCARD:
                if(IccUserEject())
                    buf[1] = SUCCESS;
                else
                    buf[1] = FAIL;
                CommSend(buf, 2);
                
                len -= 1;
                cmd += 1;
                continue;
            
            case CMD_SETMODE:
                fLed = cmd[1] & F_LED;
                fTCBeep = cmd[1] & F_BOTC;
                fRFCBeep = cmd[1] & F_BORFC;
                InvPack = cmd[1] & F_CINV;
                fNotice = cmd[1] & F_NOTICE;
                fStopOnACK = cmd[1] & F_SNOA;
                fAutoSearchCard = cmd[1] & F_ASC;

                if(ParaWrite(PARA_SWITCHS, cmd[1]) == cmd[1])
                {
                    buf[1] = SUCCESS;
                }
                else
                {
                    buf[1] = FAIL;
                }
                CommSend(buf, 2);
                
                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_GETMODE:
                ch = ParaRead(PARA_SWITCHS);
                if(ch >= 0)
                {
                    buf[1] = SUCCESS;
                    buf[2] = (unsigned char)ch;
                    CommSend(buf, 3);
                }
                else
                {
                    buf[1] = FAIL;
                    CommSend(buf, 2);
                }
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_SETRFRXGAIN:
                M500SetRcvGain(cmd[1]);
                // write parameter to flash
                if(ParaWrite(PARA_RFRXGAIN, cmd[1]) == cmd[1])
                    buf[1] = SUCCESS;
                else
                    buf[1] = FAIL;
                CommSend(buf, 2);
                
                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_GETVER:
                buf[1] = SUCCESS;
                strcpy(buf+2, ver);
                CommSend(buf, strlen(ver) + 2);
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_GETSYSINFO:
                buf[1] = SUCCESS;
                strcpy(buf+2, sysinfo);
                CommSend(buf, strlen(sysinfo) + 2);
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_SYSRESET:
                buf[1] = SUCCESS;
                CommSend(buf, 2);
                delay(10);              // delay to wait send ok
                disable();
                while(1) {LED = ~LED;}  // wait watchdog reset
                // continue;
        
            case CMD_TESTCARD:
                buf[1] = SUCCESS;
                buf[2] = IccUserTest();
                buf[3] = M1Search(snr);
                CommSend(buf, 4);
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_SETICCBRATE: 
                
                //todo: init icc etu!!!!!!!!!!
                buf[1] = SUCCESS;
                CommSend(buf, 2);
                
                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_USEDEBUG:
                if(cmd[1])
                    CommUseDbg(1);
                else
                    CommUseDbg(0);
                    
                buf[1] = SUCCESS;
                CommSend(buf, 2);
                
                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_BEEP:
                beep(cmd[1], cmd[2]);   // cmd[1]: times, cmd[2]: time
                buf[1] = SUCCESS;
                CommSend(buf, 2);
                
                len -= 3;
                cmd += 3;
                continue;
                
            case CMD_INV_PACK:
                InvPack = cmd[1] ? 1 : 0;

                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_RFRESET:
                if(M500PcdInit() == MI_OK)
                    buf[1] = SUCCESS;
                else
                    buf[1] = FAIL;
                CommSend(buf, 2);
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_GETHDINFO:
                buf[1] = SUCCESS;
                strcpy(buf+2, pcbinfo);
                CommSend(buf, strlen(pcbinfo) + 2);
                
                len -= 1;
                cmd += 1;
                continue;
                
            case CMD_SETTOCRF:
                CardConfirmTime = (unsigned int)cmd[1] * 10;
                if(ParaWrite(PARA_RFCCT, cmd[1]) == cmd[1])
                {
                    buf[1] = SUCCESS;
                }
                else
                {
                    buf[1] = FAIL;
                }
                CommSend(buf, 2);
                
                len -= 2;
                cmd += 2;
                continue;
                
            case CMD_USERPOWER:
                IccUserPower(cmd[1], cmd[2]);
                buf[1] = SUCCESS;
                CommSend(buf, 2);
                
                len -= 3;
                cmd += 3;
                continue;
                
                
            // todo: buf[0] now quals the command byte.
            // todo: test over load error.
                
            /*
            case CMD_STARTISP:
            */
            
            default:
                buf[1] = ERRORCMD;
                CommSend(buf, 2);
                break;
        }
        
        break;
    }
    
}

⌨️ 快捷键说明

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