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

📄 scanner.c

📁 dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,fir等的很多程序.
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
描述:	该源程序为扫描模式下程序处理文件。
	当配置为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 + -