📄 rfid_readmenu.c
字号:
// $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 + -