📄 scanner.c
字号:
/*
描述: 该源程序为扫描模式下程序处理文件。
当配置为db_adr,db_n时:
块输出格式: 每块输出5个或者4个数据,共输出(db_n+1)块;
每块第一个数据为该块的状态信息或者无状态信息,后面四字节为块数据。
扫描模式完全输出内容:snr db time addr
扫描模式完全输出格式:
1 8 1 or 2 5 1 0r 2 1 or 2 (字节)
板地址 uid号 帧分隔符 块数据 帧分隔符 帧结束符 (卡1)
板地址 uid号 帧分隔符 块数据 帧分隔符 帧结束符 (卡2)
板地址 uid号 帧分隔符 块数据 帧分隔符 帧结束符 (卡3)
扫描模式输出内容组合:
(1) snr
(2) snr time
(3) addr snr
(4) addr snr time
(5) db
(6) db time
(7) addr db
(8) addr db time
(9) snr db
(10) snr db time
(11) addr snr db
(12) addr snr db time
该模式主动上传卡数据。
作者:luoliyu
时间:200506
*/
#include "typedef.h"
#include "f2407regs_c.h"
#include "global.h"
extern uchar globalErrFlag;
extern uchar Day,Hour,Minute,Second;
extern uchar viccdata[256];
extern uchar labeldata[350];
extern uchar pcdata[Len];
extern uint cfgdata[128];
extern uchar deviceAddr;
extern uchar ISOModeSys;
extern uchar ISOFlagsSys;
extern uchar ISOMode;
extern uchar status_rx;
extern uchar bReadTag;
static uchar scanner_mode,scan_data,db_adr,db_n,scan_lock_time,db_use,sep_char,sep_usr,end_char,end_usr;
static uchar trigger,mode,db_format,sc,ec;
static uchar lastUid[8]={8,7,6,5,4,3,2,1},currUid[8]={1,2,3,4,5,6,7,8};
void readCfg12ScanMode(void);
void scanner12Mode(void);
static uchar compareUid(void);
static void snr(void);
static void snrTime(void);
static void snrComPrefix(void);
static void snrTimeComPrefix(void);
static void db(void);
static void dbTime(void);
static void dbComPrefix(void);
static void dbTimeComPrefix(void);
static void snrDb(void);
static void snrDbTime(void);
static void snrDbComPrefix(void);
static void snrDbTimeComPrefix(void);
static void scannerComRec(void);
static void scannerComRec(void)
{
feedWatchDog();
switch (pcdata[2])
{
case 0x52: {Detec_Baud_pro(); break;} //Baud Rate Detection
case 0x63: {CPU_reset(); break;} //cpu reset
case 0x65: {Get_DevInf_pro(); break;} //Get Reader Information
case 0x69: {Reset_RF_pro(); break;} //RF Reset
case 0x6A: {RF_OnOff_pro(); break;} //RF ON/OFF
case 0x6d: {getNoiseLevel(); break;} //get noise level
case 0x6e: {readerDiagnostic();break;} //reader diagnostic
case 0x71: {setOutput(); break;} //set output
case 0x74: {getInput(); break;} //get input
case 0x80: {Read_Cfg_pro(); break;} //Read Configuration
case 0x81: {Write_Cfg_pro(); break;} //Write Configuration
case 0x83: {Sdefault_Cfg_pro();break;} //Set Default Configuration
case 0x85: {Wr_Rtc_pro(); break;}
case 0x86: {Rd_Rtc_pro(); break;}
case 0x88: {readIsoModeFalg(); break;}
default: {default_pro(); break;} //Unknown Command
}
}
void readCfg12ScanMode()
{
uchar temp = 0;
/*read configuration from cfgdata12*/
scanner_mode = cfgdata[96] >> 8;
scan_data = cfgdata[97] & 0xff;
db_adr = cfgdata[98] >> 8;
db_n = cfgdata[98] & 0xff;
scan_lock_time = cfgdata[99];
db_use = cfgdata[100] & 0xff;
sep_char = cfgdata[101] >> 8;
sep_usr = cfgdata[101] & 0xff;
end_char = cfgdata[102] >> 8;
end_usr = cfgdata[102] & 0xff;
/***********************************/
/******configuration analysis*******/
mode = scanner_mode&0x07;
trigger = scanner_mode>>7;
scan_data &= 0x63;
db_format = db_use&0x0f;
if(sep_char == 0x01) sc = 0x0d0a; //cr+lf
else if(sep_char == 0x02) sc = 0x0a; //lf
else if(sep_char == 0x04) sc = 0x0d; //cr
else if(sep_char == 0x08) sc = 0x07; //tab
else if(sep_char == 0x10) sc = 0x3b; //';'
else if(sep_char == 0x20) sc = 0x2c; //','
else if(sep_char == 0x40) sc = 0x20; //' '
else if(sep_char == 0x80) sc = sep_usr; //sep_usr
else sc = 0x2c; //',' default
if(end_char == 0x01) ec = 0x0d0a; //cr+lf
else if(end_char == 0x02) ec = 0x0a; //lf
else if(end_char == 0x04) ec = 0x0d; //cr
else if(end_char == 0x08) ec = 0x07; //tab
else if(end_char == 0x10) ec = 0x3b; //';'
else if(end_char == 0x20) ec = 0x2c; //','
else if(end_char == 0x40) ec = 0x20; //' '
else if(end_char == 0x80) ec = end_usr; //end_usr
else ec = 0x0d0a; //',' default
}
uchar scanReadCounter = 0;
void scanner12Mode()
{
int i,con;
uchar addrType;
con = cfgdata[99]&0xff;
if( con >= 30)con = 30;
globalErrFlag = 0x00; // clear iso error flag
if(status_rx==2)
{
addrType = verifyType();
if(addrType)scannerComRec( );
status_rx = 0;
}
if(scanReadCounter >= con)
{
switch(scan_data)
{
case 0x01:{snr();break;}
case 0x21:{snrTime();break;}
case 0x41:{snrComPrefix();break;}
case 0x61:{snrTimeComPrefix();break;}
case 0x02:{db();break;}
case 0x22:{dbTime();break;}
case 0x42:{dbComPrefix();break;}
case 0x62:{dbTimeComPrefix();break;}
case 0x03:{snrDb(); break;}
case 0x23:{snrDbTime(); break;}
case 0x43:{snrDbComPrefix();break;}
case 0x63:{snrDbTimeComPrefix();break;}
default: {snr();break;}
}
scanReadCounter = 0;
}
}
static void snr(void)
{
uchar i,j;
uchar num_card;
myInvOut();
num_card = labeldata[0];
if(num_card != 0)bReadTag = 1;
if( num_card == 1)
{
for(i=0;i<8;i++)currUid[i] = labeldata[3+i];//copy uid to current UID
if( compareUid()==0 ) //same uid
{
if(trigger == 0)// single read
{
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); //send ec
}
}
else // different uid
{
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); //send ec
}
for(i=0;i<8;i++)lastUid[i] = currUid[i];//copy current uid as last uid
}
else if( num_card >= 2 )//exist card
{
for(i=0;i<num_card;i++)
{
for(j=0;j<8;j++)
{
serialPortOutput1byte(labeldata[i*10+3+j]);
}
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); //send ec
}
}
else{; } //error
}
static void snrTime(void)
{
uchar i,j;
uchar num_card;
myInvOut();
num_card = labeldata[0];
if(num_card != 0)bReadTag = 1;
if( num_card == 1)
{
for(i=0;i<8;i++)currUid[i] = labeldata[3+i];//copy uid to current UID
getBufferTime();
if(compareUid()==0 ) // same uid
{
if(trigger == 0)// single read
{
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(sc == 0x0d0a)
{
serialPortOutput1byte(sc>>8);
serialPortOutput1byte(sc&0xff);
}
else serialPortOutput1byte(sc&0xff);//send out sc
serialPortOutput1byte(Day);
serialPortOutput1byte(Hour);
serialPortOutput1byte(Minute);
serialPortOutput1byte(Second); //send out time
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff);//sendout ec
}
}
else //different uid
{
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(sc == 0x0d0a)
{
serialPortOutput1byte(sc>>8);
serialPortOutput1byte(sc&0xff);
}
else serialPortOutput1byte(sc&0xff);//send out sc
serialPortOutput1byte(Day);
serialPortOutput1byte(Hour);
serialPortOutput1byte(Minute);
serialPortOutput1byte(Second); //send out time
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff);//sendout ec
}
for(i=0;i<8;i++)lastUid[i] = currUid[i];//copy current uid as last uid
}
else if( num_card >= 2 )//exist card
{
getBufferTime();
for(i=0;i<num_card;i++)
{
for(j=0;j<8;j++)
{
serialPortOutput1byte(labeldata[i*10+3+j]);
} // senout uid
if(sc == 0x0d0a)
{
serialPortOutput1byte(sc>>8);
serialPortOutput1byte(sc&0xff);
}
else serialPortOutput1byte(sc&0xff);//send out sc
serialPortOutput1byte(Day);
serialPortOutput1byte(Hour);
serialPortOutput1byte(Minute);
serialPortOutput1byte(Second); //send out time
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff);//sendout ec
}
}
else
{;} //error
}
static void snrComPrefix(void)
{
uchar i,j;
uchar num_card;
myInvOut();
num_card = labeldata[0];
if(num_card != 0)bReadTag = 1;
if( num_card == 1)
{
for(i=0;i<8;i++)currUid[i] = labeldata[3+i];//copy uid to current UID
if(compareUid()==0 ) // same uid
{
if(trigger == 0)// single read
{
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); // send ec
}
}
else //different uid
{
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); // send ec
}
for(i=0;i<8;i++)lastUid[i] = currUid[i];//copy current uid as last uid
}
else if( num_card >= 2 )//exist card
{
for(i=0;i<num_card;i++)
{
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)
{
serialPortOutput1byte(labeldata[i*10+3+j]);
}
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff); // send ec
}
}
else
{;} //error
}
static void snrTimeComPrefix(void)
{
uchar i,j;
uchar num_card;
myInvOut();
num_card = labeldata[0];
if(num_card != 0)bReadTag = 1;
if( num_card == 1)
{
for(i=0;i<8;i++)currUid[i] = labeldata[3+i];//copy uid to current UID
if(compareUid()==0 ) // same uid
{
if(trigger == 0)// single read
{
getBufferTime();
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(sc == 0x0d0a)
{
serialPortOutput1byte(sc>>8);
serialPortOutput1byte(sc&0xff);
}
else serialPortOutput1byte(sc&0xff);//send out sc
serialPortOutput1byte(Day);
serialPortOutput1byte(Hour);
serialPortOutput1byte(Minute);
serialPortOutput1byte(Second); //send out time
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff);//sendout ec
}
}
else //different uid
{
getBufferTime();
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)serialPortOutput1byte(labeldata[3+j]);
if(sc == 0x0d0a)
{
serialPortOutput1byte(sc>>8);
serialPortOutput1byte(sc&0xff);
}
else serialPortOutput1byte(sc&0xff);//send out sc
serialPortOutput1byte(Day);
serialPortOutput1byte(Hour);
serialPortOutput1byte(Minute);
serialPortOutput1byte(Second); //send out time
if(ec == 0x0d0a)
{
serialPortOutput1byte(ec>>8);
serialPortOutput1byte(ec&0xff);
}
else serialPortOutput1byte(ec&0xff);//sendout ec
}
for(i=0;i<8;i++)lastUid[i] = currUid[i];//copy current uid as last uid
}
else if( num_card >= 2) //exist card
{
getBufferTime();
for(i=0;i<num_card;i++)
{
serialPortOutput1byte(deviceAddr); //sen out addr
for(j=0;j<8;j++)
{
serialPortOutput1byte(labeldata[i*10+3+j]);
} // senout uid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -