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 + -
显示快捷键?