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

📄 rfid_readmenu.c

📁 找的一个用U2270B开发的射频卡项目文件
💻 C
📖 第 1 页 / 共 3 页
字号:
// $Id: rfid_ReadMenu.c,v 1.7 2007/01/24 21:44:15 tprescott Exp $
/*************************************************************
Project : rfid_ReadMenu.c
Date    : 9/08/2006
Author  : Toby Prescott                   
Company : Atmel                           
Comments: AVR Studio GCC

Revisions: 
	v1.0 - Started
	v2.1 - 1/20/06 Changed to work with new LCD drive
	v2.2 - 3/8/06 Changed to Flash Srings to save SRAM
	v2.3 - 3/14/06 Fixing 5558 read/write routines
	       3/15/06 Adding 5530 Support  
	v2.4 - 4/6/06  Add new working 5558 R/W routines
	       5/19/06 Fixed mfg. ID error and display as dec
	v2.5 - 6/20/06 Add Animal ID section with Read and Write
	v2.6 - 9/19/06 Clean for WinAVR
*************************************************************/

#include "rfid_ReadMenu.h" 

// Declare your global variables here
static const char sNum0[] PROGMEM = "0";
static const char sNum1[] PROGMEM = "1";
static const char sNum2[] PROGMEM = "2";
static const char sNum3[] PROGMEM = "3";
static const char sNum4[] PROGMEM = "4";
static const char sNum5[] PROGMEM = "5";
static const char sNum6[] PROGMEM = "6";
static const char sNum7[] PROGMEM = "7";
static const char sNum8[] PROGMEM = "8";
static const char sNum9[] PROGMEM = "9";
static const char sNum10[] PROGMEM = "10";
static const char sNum11[] PROGMEM = "11";
static const char sNum12[] PROGMEM = "12";
static const char sNum13[] PROGMEM = "13";
static const char sNum14[] PROGMEM = "14";
static const char sNum15[] PROGMEM = "15";
static const char sNum16[] PROGMEM = "16";
static const char sNum17[] PROGMEM = "17";
static const char sNum18[] PROGMEM = "18";
static const char sNum19[] PROGMEM = "19";
static const char sNum20[] PROGMEM = "20";
static const char sNum21[] PROGMEM = "21";
static const char sNum22[] PROGMEM = "22";
static const char sNum23[] PROGMEM = "23";
static const char sNum24[] PROGMEM = "24";
static const char sNum25[] PROGMEM = "25";
static const char sNum26[] PROGMEM = "26";
static const char sNum27[] PROGMEM = "27";
static const char sNum28[] PROGMEM = "28";
static const char sNum29[] PROGMEM = "29";
static const char sNum30[] PROGMEM = "30";
static const char sNum31[] PROGMEM = "31";
static PGM_P sNumPtr[32] = {sNum0,sNum1,sNum2,sNum3,sNum4,sNum5,sNum6,sNum7,sNum8,sNum9,sNum10,sNum11,sNum12,sNum13,sNum14,sNum15,
						    sNum16,sNum17,sNum18,sNum19,sNum20,sNum21,sNum22,sNum23,sNum24,sNum25,sNum26,sNum27,sNum28,sNum29,sNum30,sNum31};

static unsigned char currentPos, nextPos, cPage=0; 

// *******************************************************************************
// Menu Reads and Displays the data from selected tag type
// Only Reads Once unless ENTER is pressed
// ******************************************************************************/
void rfid_ReadMenu_Manual(unsigned char Target_Tag, unsigned char Target_Reader)
{
    unsigned char i,j,k, rError = 1, firstTime = 0;
    
   	unsigned char *resetBlock = "????????";
    unsigned char sBlockDat[9] = "00000000";
    unsigned char *sBlockDatPtr;
    unsigned char *cDatPtr;
    unsigned char *choldDatPtr=0;
    unsigned char startBlock = 1, endBlock = 31;
   	
	//**** Check selected tag and configure appropriate number of Blocks ****//
   	if(Target_Tag == 58){startBlock = 0;}
    else if(Target_Tag == 30){endBlock = 2;}
    else{endBlock = 7;}
   
    upDate = 0;
    cPage = 0; 

    uio_Release();
    while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
    {
		// Menu Display 
		if(upDate == 0)
		{
 			lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
			if(Target_Tag == 30){lcd_put_fString(4, 2, sRFIDTAGPtr[0]);}
			else if(Target_Tag == 51){lcd_put_fString(4, 2, sRFIDTAGPtr[1]);}
			else if(Target_Tag == 52){lcd_put_fString(4, 2, sRFIDTAGPtr[2]);}
			else if(Target_Tag == 57){lcd_put_fString(4, 2, sRFIDTAGPtr[3]);}
			else if(Target_Tag == 67){lcd_put_fString(4, 2, sRFIDTAGPtr[4]);}
			else if(Target_Tag == 77){lcd_put_fString(4, 2, sRFIDTAGPtr[5]);}
			else if(Target_Tag == 70){lcd_put_fString(4, 2, sRFIDTAGPtr[6]);}
			else if(Target_Tag == 58){lcd_put_fString(4, 2, sRFIDTAGPtr[7]);}	 		
 			lcd_put_fString(32, 2, PSTR(" Manual"));
 			lcd_put_fString(82,2,PSTR("Page# "));				// Page Heading
 			lcd_put_fString(118,2,sNumPtr[cPage]);			// Page Number
 			lcd_invert_area(117,1,123,10);
			
		 	lcd_horz_line(SCRN_LEFT, SCRN_RIGHT, 11); 				// First Row Separator
	 		lcd_vert_line(11,SCRN_BOTTOM,10);					// First Col Separator
			lcd_invert_area(62,12,65,SCRN_BOTTOM-1);                                  // Center Separator
	 		lcd_vert_line(11,SCRN_BOTTOM,75);					// Second Col Separator
	        
	        if(Target_Tag == 58)
	        {
		        cDatPtr = choldDatPtr + (unsigned char)(cPage*40);
		        if(cPage == 3){endBlock = 1;}
		        else{endBlock = 9;}
 			}
			k=startBlock;
			for(j=startBlock; j<endBlock+1; j++)
			{
       			if(k<5)
       			{
	       			sBlockDatPtr = &sBlockDat[0];
                	for(i=0; i<4; i++)
                	{
	        			conv_Char2HexStr2(sBlockDatPtr, *cDatPtr++);
	        			sBlockDatPtr += 2;
                    }
                        
	       			sBlockDatPtr = &sBlockDat[0];
					lcd_put_fString(3, 14+(j*10), sNumPtr[j]);
					if(rError == 0){lcd_put_String(13, 14+(j*10), sBlockDatPtr);}
					else{lcd_put_String(13, 14+(j*10), resetBlock);}
		   			k++;
		   		}
		   		else if(k<10)
		   		{
	       			sBlockDatPtr = &sBlockDat[0];
                	for(i=0; i<4; i++)
                	{
	        			conv_Char2HexStr2(sBlockDatPtr, *cDatPtr++);
	        			sBlockDatPtr += 2;
                    }
                        
	       			sBlockDatPtr = &sBlockDat[0];
					lcd_put_fString(68, 14+((j-5)*10), sNumPtr[(unsigned char)(j)]);
					if(rError == 0){lcd_put_String(78, 14+((j-5)*10), sBlockDatPtr);}
					else{lcd_put_String(78, 14+((j-5)*10), resetBlock);}
					k++;
				}
				else{k=startBlock;}
	        }		        
			lcd_update(SCRN_TOP,SCRN_BOTTOM);
	        upDate = 1;       		
		}
   		// End navigation
   		
		uio_Get();
   		if(cButton == IO_ENTER  || firstTime == 0)
    	{
        	sBlockDatPtr = &sBlockDat[0];
			strncpy(sBlockDatPtr,resetBlock,8);
			ioActive = 0;
	        if(Target_Reader == 70)
	        {
	        	if(Target_Tag == 51){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X555XSYNC,224);}
	        	else if(Target_Tag == 30){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,HEADERSYNC,64);}
	        	else if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X5557SYNC,224);}
	        	else if(Target_Tag == 77){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X5557SYNC,224);}
	        	else if(Target_Tag == 58)
	        	{
	        		x5558_SelectTagID(Target_Reader, &Target_Tag_ID[0]);
					Timer_delay_us(10000);
					x5558_LoginRead(Target_Reader, &Target_Tag_PWD[0]);
					Timer_delay_us(10000);
              		x5558_ReadMultipleBlock(Target_Reader, 0, 31);
	        		rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,SOFSYNC,1024);
	        	}
	        	choldDatPtr = cDatPtr;
	        }
	        ioActive = 1;
	        upDate = 0;
	        firstTime = 1;
       	}
       	if(Target_Tag == 58)
       	{
           	if(cButton == IO_UP && cPage > 0)
           	{
           		cPage--;
           		upDate = 0;
           	}
           	else if(cButton == IO_DOWN && cPage < 3)
           	{
           		cPage++;
           		upDate = 0;
           	}
       	}
        if(cButton>0 && cButton<6){uio_Release();}
    }
    uio_Release();
}

// *******************************************************************************
// Menu Reads and Displays the data from selected tag type
// Reads Continously until menu is exited
// ******************************************************************************/
void rfid_ReadMenu_Auto(unsigned char Target_Tag, unsigned char Target_Reader)
{
    unsigned char i,j,k, rError = 1;
    
   	unsigned char *resetBlock = "????????";
    unsigned char sBlockDat[9] = "00000000";
    unsigned char *sBlockDatPtr;
    unsigned char *cDatPtr;
    unsigned char *choldDatPtr=0;
    unsigned char startBlock = 1, endBlock = 31;
   	
	//**** Check selected tag and configure appropriate number of Blocks ****//
   	if(Target_Tag == 58){startBlock = 0;}
    else if(Target_Tag == 30){endBlock = 2;}
    else{endBlock = 7;}
   
    upDate = 0;
    cPage = 0; 

    uio_Release();
    while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
    {
		// Menu Display 
		if(upDate == 0)
		{
 			lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
			if(Target_Tag == 30){lcd_put_fString(4, 2, sRFIDTAGPtr[0]);}
			else if(Target_Tag == 51){lcd_put_fString(4, 2, sRFIDTAGPtr[1]);}
			else if(Target_Tag == 52){lcd_put_fString(4, 2, sRFIDTAGPtr[2]);}
			else if(Target_Tag == 57){lcd_put_fString(4, 2, sRFIDTAGPtr[3]);}
			else if(Target_Tag == 67){lcd_put_fString(4, 2, sRFIDTAGPtr[4]);}
			else if(Target_Tag == 77){lcd_put_fString(4, 2, sRFIDTAGPtr[5]);}
			else if(Target_Tag == 70){lcd_put_fString(4, 2, sRFIDTAGPtr[6]);}
			else if(Target_Tag == 58){lcd_put_fString(4, 2, sRFIDTAGPtr[7]);}	 		
 			lcd_put_fString(32, 2, PSTR(" Auto"));
 			lcd_put_fString(82, 2, PSTR("Page# "));				// Page Heading
 			lcd_put_fString(118, 2, sNumPtr[cPage]);			// Page Number
 			lcd_invert_area(117,1,123,10);

		 	lcd_horz_line(SCRN_LEFT, SCRN_RIGHT, 11); 				// First Row Separator
	 		lcd_vert_line(11,SCRN_BOTTOM,10);					// First Col Separator
			lcd_invert_area(62,12,65,SCRN_BOTTOM-1);                                  // Center Separator
	 		lcd_vert_line(11,SCRN_BOTTOM,75);					// First Col Separator
	        
	        if(Target_Tag == 58)
	        {
			        cDatPtr = choldDatPtr + (unsigned char)(cPage*40);
			        if(cPage == 3){endBlock = 1;}
			        else{endBlock = 9;}
 			}
			k=startBlock;
			for(j=startBlock; j<endBlock+1; j++)
			{
       			if(k<5)
       			{
	       			sBlockDatPtr = &sBlockDat[0];
                	for(i=0; i<4; i++)
                	{
	        			conv_Char2HexStr2(sBlockDatPtr, *cDatPtr++);
	        			sBlockDatPtr += 2;
                    }
                    
	       			sBlockDatPtr = &sBlockDat[0];
					lcd_put_fString(3, 14+(j*10), sNumPtr[j]);
					if(rError == 0){lcd_put_String(13, 14+(j*10), sBlockDatPtr);}
					else{lcd_put_String(13, 14+(j*10), resetBlock);}
		   			k++;
		   		}
		   		else if(k<10)
		   		{
	       			sBlockDatPtr = &sBlockDat[0];
                	for(i=0; i<4; i++)
                	{
	        			conv_Char2HexStr2(sBlockDatPtr, *cDatPtr++);
	        			sBlockDatPtr += 2;
                    }
                        
	       			sBlockDatPtr = &sBlockDat[0];
					lcd_put_fString(68, 14+((j-5)*10), sNumPtr[(unsigned char)(j)]);
					if(rError == 0){lcd_put_String(78, 14+((j-5)*10), sBlockDatPtr);}
					else{lcd_put_String(78, 14+((j-5)*10), resetBlock);}
					k++;
				}
				else{k=startBlock;}
	        }
			lcd_update(SCRN_TOP,SCRN_BOTTOM);
	        upDate = 1;       		
		}
   		// End display

    	sBlockDatPtr = &sBlockDat[0];
		strncpy(sBlockDatPtr,resetBlock,8);
        ioActive = 0;
        if(Target_Reader == 70)
        {
        	if(Target_Tag == 51){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X555XSYNC,224);}
        	else if(Target_Tag == 30){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,HEADERSYNC,64);}
        	else if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X5557SYNC,224);}
	        else if(Target_Tag == 77){rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X5557SYNC,224);}
        	else if(Target_Tag == 58)
        	{
        		x5558_SelectTagID(Target_Reader, &Target_Tag_ID[0]);
				Timer_delay_us(10000);
				x5558_LoginRead(Target_Reader, &Target_Tag_PWD[0]);
				Timer_delay_us(10000);
          		x5558_ReadMultipleBlock(Target_Reader, 0, 31);
        		rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,SOFSYNC,1024);
        	}
        	choldDatPtr = cDatPtr;
        }
		ioActive = 1;
		upDate = 0;
	
		for(i=0; i<200; i++){for(j=0;j<255;j++){;}}     // Delay 20*40us
		uio_Get();
       	if(Target_Tag == 58)
       	{
           	if(cButton == IO_UP && cPage > 0)
           	{
           		cPage--;
           		upDate = 0;
           	}
           	else if(cButton == IO_DOWN && cPage < 3)
           	{
           		cPage++;
           		upDate = 0;
           	}
       	}
        if(cButton>0 && cButton<6){uio_Release();}
    }
    uio_Release();
}

// *******************************************************************************
// Menu Reads and Displays the Traceablity Data from selected tag type (5557 format)
// if available.
// Only Reads Once unless ENTER is pressed
// ******************************************************************************/
void rfid_ReadMenu_5557TagID(unsigned char Target_Tag, unsigned char Target_Reader)
{
    unsigned char i, rError = 1, firstTime = 0;
   	unsigned char *resetBlock = "????????";
    unsigned char sBlockDat[9] = "00000000";
    unsigned char *sBlockDatPtr;
    unsigned char *cDatPtr;
    unsigned char tmpData, end;
    unsigned int test;

    unsigned char ReadBlockCmd1 = 0xC4;
    unsigned char ReadBlockCmd2 = 0xC8;
    unsigned char ResetCmd = 0x00;
                           
	uio_Release();
    while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
    {
    	uio_Get();
		if(cButton == IO_ENTER || firstTime == 0)
    	{
 			lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
			if(Target_Tag == 30){lcd_put_fString(4, 2, sRFIDTAGPtr[0]);}
			else if(Target_Tag == 51){lcd_put_fString(4, 2, sRFIDTAGPtr[1]);}
			else if(Target_Tag == 52){lcd_put_fString(4, 2, sRFIDTAGPtr[2]);}
			else if(Target_Tag == 57){lcd_put_fString(4, 2, sRFIDTAGPtr[3]);}
			else if(Target_Tag == 67){lcd_put_fString(4, 2, sRFIDTAGPtr[4]);}
			else if(Target_Tag == 77){lcd_put_fString(4, 2, sRFIDTAGPtr[5]);}
			else if(Target_Tag == 70){lcd_put_fString(4, 2, sRFIDTAGPtr[6]);}
			else if(Target_Tag == 58){lcd_put_fString(4, 2, sRFIDTAGPtr[7]);}	 		
 			lcd_put_fString(32, 2, PSTR(" Manufacturer ID"));
		 	lcd_horz_line(SCRN_LEFT, SCRN_RIGHT, 11); 				// First Row Separator
			lcd_invert_area(46,12,47,SCRN_BOTTOM-1);                                // First Col Separator
	        if(firstTime == 0){lcd_update(SCRN_TOP,SCRN_BOTTOM);}
	        
	        ioActive = 0;
        	if(Target_Reader == 70){U2270_PPCWriteBlock(6, &ReadBlockCmd1);}
			Timer_delay_us(10000);
        	
        	sBlockDatPtr = &sBlockDat[0];
			strncpy(sBlockDatPtr,resetBlock,8);
	        if(Target_Reader == 70)
	        {
	        	rError = U2270_ReadData(Target_Tag,&cDatPtr,MANCHESTER,X5557SYNC,32);
	        }
	        ioActive = 1;
	        
   			sBlockDatPtr = &sBlockDat[0];
	        if(rError == 0)
	        {
            	for(i=0; i<4; i++)
            	{
        			conv_Char2HexStr2(sBlockDatPtr, *cDatPtr++);
        			sBlockDatPtr += 2;
                }
			}
			end = lcd_put_fString(4, 15, PSTR("ACL:"));                       // ACL
	        end = lcd_put5x7_Char(end, 15, sBlockDat[0]);
	        end = lcd_put5x7_Char(end, 15, sBlockDat[1]);

			end = lcd_put_fString(4, 25, PSTR("MFC:"));                       // MFC
	        end = lcd_put5x7_Char(end, 25, sBlockDat[2]);
	       	end = lcd_put5x7_Char(end, 25, sBlockDat[3]);

			end = lcd_put_fString(4, 35, PSTR("ICR:"));                       // ICR
	        end = lcd_put5x7_Char(end, 35, sBlockDat[4]);
	        end = lcd_put5x7_Char(end, 35, sBlockDat[5]);
	        

			end = lcd_put_fString(54, 15, PSTR("LotID:"));                       // LotID in dec

⌨️ 快捷键说明

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