📄 rfid_animalidmenu.c
字号:
// $Id: rfid_AnimalIDMenu.c,v 1.7 2006/10/25 21:37:56 tprescott Exp $
/*************************************************************
Project : rfid_AnimalIDMenu.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_AnimalIDMenu.h"
// Declare your global variables here
static unsigned char currentPos, nextPos=0;
unsigned char c64bAnimalIDCode[13] EEMEM ={0};
// *******************************************************************************
// Menu that Demonstrates Animal ID
// ******************************************************************************/
void animalID_Display(unsigned char Target_Tag, unsigned char Target_Reader)
{
unsigned char temp1, temp2, temp3;
temp1 = U2270_RFfield_Status();
temp2 = U2270_OutputEn_Status();
temp3 = U2270_Standby_Status();
//**** Force Reader On/Active ****//
U2270_RFfield(ON);
U2270_OutputEn(ON);
U2270_Standby(OFF);
nextPos = 1;
upDate = 0;
uio_Release();
while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
{
// Menu Display
if(currentPos != nextPos || upDate == 0)
{
currentPos = nextPos;
lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
lcd_put_fString(lcd_fcenter(PSTR("Animal ID")), 2, PSTR("Animal ID"));
lcd_box(SCRN_LEFT,10,SCRN_RIGHT,22);
lcd_vert_line(10,SCRN_BOTTOM-1,63);
lcd_put_fString(lcd_fcenter(PSTR("Write"))-31, 13, PSTR("Write"));
lcd_put_fString(lcd_fcenter(PSTR("Read"))+31, 13, PSTR("Read"));
lcd_put_fString(lcd_fcenter(PSTR("Write One"))-31, 24, PSTR("Write One"));
lcd_put_fString(lcd_fcenter(PSTR("Read Lite"))+31, 24, PSTR("Read Lite"));
lcd_put_fString(lcd_fcenter(PSTR("Write Lot"))-31, 33, PSTR("Write Lot"));
lcd_put_fString(lcd_fcenter(PSTR("Read All "))+31, 33, PSTR("Read All "));
if(currentPos == 1){lcd_invert_area(65,23,125,31);}
else if(currentPos == 2){lcd_invert_area(65,32,125,40);}
else if(currentPos == 3){lcd_invert_area(2,23,61,31);}
else if(currentPos == 4){lcd_invert_area(2,32,61,40);}
lcd_update(SCRN_TOP,SCRN_BOTTOM);
upDate = 1;
}
// end display
uio_Get();
switch(currentPos){
case 1:
if(cButton == IO_ENTER)
{
animalID_ReadLite(Target_Tag,Target_Reader);
nextPos = 1;
}
else if(cButton == IO_LEFT){nextPos = 3;}
else if(cButton == IO_RIGHT){;}
else if(cButton == IO_DOWN){nextPos = 2;}
break;
case 2:
if(cButton == IO_ENTER)
{
animalID_ReadAll(Target_Tag,Target_Reader);
nextPos = 2;
}
else if(cButton == IO_LEFT){nextPos = 4;}
else if(cButton == IO_UP){nextPos = 1;}
else if(cButton == IO_RIGHT){;}
break;
case 3:
if(cButton == IO_ENTER)
{
if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70 || Target_Tag == 77){animalID_Write(Target_Tag,Target_Reader);}
nextPos = 3;
}
else if(cButton == IO_DOWN){nextPos = 4;}
else if(cButton == IO_RIGHT){nextPos = 1;}
break;
case 4:
if(cButton == IO_ENTER)
{
//if(Target_Tag == 57 || Target_Tag == 67 || Target_Tag == 70){Display_WriteLotAnimalID();}
nextPos = 4;
}
else if(cButton == IO_UP){nextPos = 3;}
else if(cButton == IO_RIGHT){nextPos = 2;}
break;
default:
break;
}
if(cButton>0 && cButton<6){uio_Release();}
}
uio_Release();
//**** Restore previous Reader Settings ****//
U2270_RFfield(temp1);
U2270_OutputEn(temp2);
U2270_Standby(temp3);
}
// *******************************************************************************
// Menu that Demonstrates Writing Animal ID
// ******************************************************************************/
#define ANIMAL 0
#define XTRADATA 1
#define COUNTRY 2
#define COUNTRY1 20
#define COUNTRY2 21
#define COUNTRY3 22
#define COUNTRY4 23
#define NATIONAL 3
#define NATIONAL1 30
#define NATIONAL2 31
#define NATIONAL3 32
#define NATIONAL4 33
#define NATIONAL5 34
#define NATIONAL6 35
#define NATIONAL7 36
#define NATIONAL8 37
#define NATIONAL9 38
#define NATIONAL10 39
#define TRAILER 4
#define TRAILER1 40
#define TRAILER2 41
#define TRAILER3 42
#define TRAILER4 43
#define TRAILER5 44
#define TRAILER6 45
void animalID_Write(unsigned char Target_Tag, unsigned char Target_Reader)
{
unsigned char i, j;
unsigned char c64bIDCode[13]={0};
unsigned char c64bIDCodetmp[13]={0};
unsigned char tmpBlockDat0[4]={0};
unsigned char tmpBlockDat1[4]={0};
unsigned char tmpBlockDat2[4]={0};
unsigned char tmpBlockDat3[4]={0};
unsigned char tmpBlockDat4[4]={0};
unsigned char sBlockDat[12]={0};
unsigned char *sBlockDatPtr;
unsigned char tmpData, tmpData1, progFlag = 0, end;
unsigned long int test;
unsigned int CRCval;
unsigned char fCountry[2] = {0x03,0xE7}, fTrailer[3] = {0}, fNational[5] = {0};
upDate = 0;
nextPos = ANIMAL;
for(i=0; i<13; i++){c64bIDCodetmp[i] = eeprom_read_byte(&(c64bAnimalIDCode[i]));}
c64bIDCodetmp[7] = 0xF9;
c64bIDCodetmp[8] = c64bIDCodetmp[8]|0xC0;
uio_Release();
while(cButton != IO_F1 && cButton != IO_F2 && cButton != IO_F3 && cButton != IO_F4)
{
// Menu Display
if(currentPos != nextPos || upDate == 0)
{
currentPos = nextPos;
lcd_clear_area(SCRN_LEFT+1,SCRN_TOP+1,SCRN_RIGHT-1,SCRN_BOTTOM-1);
lcd_put_fString(lcd_fcenter(PSTR("Write Animal ID")), 2, PSTR("Write Animal ID")); // Heading
lcd_horz_line(SCRN_LEFT, SCRN_RIGHT, 11); // First Row Separator
if((c64bIDCodetmp[5]&0x80) == 0x80){end = lcd_put_fString(2, 13, PSTR("Animal:Yes"));}
else{end = lcd_put_fString(2, 13, PSTR("Animal:No"));}
if(currentPos == ANIMAL){lcd_invert_area(1, 12, 37, 20);}
if((c64bIDCodetmp[6]&0x01) == 0x01){end = lcd_put_fString(70, 13, PSTR("Data:Yes"));}
else{end = lcd_put_fString(70, 13, PSTR("Data:No"));}
if(currentPos == XTRADATA){lcd_invert_area(69, 12, 93, 20);}
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
tmpData = c64bIDCodetmp[7]>>6;
fCountry[0] = tmpData;
test = (unsigned int)(tmpData)<<8;
conv_Char2HexStr2(sBlockDatPtr, tmpData);
sBlockDatPtr += 2;
tmpData = c64bIDCodetmp[7]<<2;
tmpData = tmpData | (c64bIDCodetmp[8]>>6);
fCountry[1] = tmpData;
test = test + (unsigned int)(tmpData);
conv_Char2HexStr2(sBlockDatPtr, tmpData);
sBlockDatPtr += 2;
end = lcd_put_fString(2, 23, PSTR("Country:"));
end = lcd_put_String(end, 23, &sBlockDat[0]);
if(currentPos == COUNTRY){lcd_invert_area(1, 22, 43, 30);}
else if(currentPos == COUNTRY1){lcd_invert_area(49, 22, 55, 30);}
else if(currentPos == COUNTRY2){lcd_invert_area(55, 22, 61, 30);}
else if(currentPos == COUNTRY3){lcd_invert_area(61, 22, 67, 30);}
else if(currentPos == COUNTRY4){lcd_invert_area(67, 22, 73, 30);}
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
ltoa(test, sBlockDatPtr,10);
end = lcd_put_fString(end, 23, PSTR(" ("));
end = lcd_put_String(end, 23, sBlockDatPtr);
end = lcd_put_fString(end, 23, PSTR("d)"));
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
tmpData = c64bIDCodetmp[8]&0x3F;
fNational[0] = tmpData;
for(j=0; j<5; j++)
{
conv_Char2HexStr2(sBlockDatPtr, tmpData);
sBlockDatPtr += 2;
tmpData = c64bIDCodetmp[(unsigned char)(9+j)];
fNational[(unsigned char)(j+1)] = tmpData;
}
end = lcd_put_fString(2, 33, PSTR("National:"));
end = lcd_put_String(end, 33, &sBlockDat[0]);
if(currentPos == NATIONAL){lcd_invert_area(1, 32, 49, 40);}
else if(currentPos == NATIONAL1){lcd_invert_area(55, 32, 61, 40);}
else if(currentPos == NATIONAL2){lcd_invert_area(61, 32, 67, 40);}
else if(currentPos == NATIONAL3){lcd_invert_area(67, 32, 73, 40);}
else if(currentPos == NATIONAL4){lcd_invert_area(73, 32, 79, 40);}
else if(currentPos == NATIONAL5){lcd_invert_area(79, 32, 85, 40);}
else if(currentPos == NATIONAL6){lcd_invert_area(85, 32, 91, 40);}
else if(currentPos == NATIONAL7){lcd_invert_area(91, 32, 97, 40);}
else if(currentPos == NATIONAL8){lcd_invert_area(97, 32, 103, 40);}
else if(currentPos == NATIONAL9){lcd_invert_area(103, 32, 109, 40);}
else if(currentPos == NATIONAL10){lcd_invert_area(109, 32, 115, 40);}
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
for(j=0; j<2; j++)
{
conv_Char2HexStr2(sBlockDatPtr, c64bIDCodetmp[(unsigned char)(3+j)]);
sBlockDatPtr += 2;
}
test = ((unsigned int)(c64bIDCodetmp[3])<<8) + (unsigned int)(c64bIDCodetmp[4]);
end = lcd_put_fString(2, 43, PSTR("CRC:"));
end = lcd_put_String(end, 43, &sBlockDat[0]);
CRCval = 0x0000;
for(i=0; i<10; i++)
{
// CRCval = CRC_CCITT16(CRCval, c64bIDCodetmp[i], 0x1021);
CRCval = CRC_CCITT16_Reverse(CRCval, c64bIDCodetmp[12-i], 0x8408);
}
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
ltoa(test, sBlockDatPtr,10);
end = lcd_put_fString(end, 43, PSTR(" ("));
end = lcd_put_String(end, 43, sBlockDatPtr);
end = lcd_put_fString(end, 43, PSTR("d)"));
if(CRCval == 0){end = lcd_put5x7_Char(end, 43, 30);}
for(i=0; i<12; i++){sBlockDat[i] = 0;}
sBlockDatPtr = &sBlockDat[0];
for(j=0; j<3; j++)
{
fTrailer[j] = c64bIDCodetmp[j];
conv_Char2HexStr2(sBlockDatPtr, c64bIDCodetmp[j]);
sBlockDatPtr += 2;
}
if((c64bIDCodetmp[6]&0x01) == 0x01)
{
end = lcd_put_fString(2, 53, PSTR("Trailer:"));
end = lcd_put_String(end, 53, &sBlockDat[0]);
if(currentPos == TRAILER){lcd_invert_area(1, 52, 43, 60);}
else if(currentPos == TRAILER1){lcd_invert_area(49, 52, 55, 60);}
else if(currentPos == TRAILER2){lcd_invert_area(55, 52, 61, 60);}
else if(currentPos == TRAILER3){lcd_invert_area(61, 52, 67, 60);}
else if(currentPos == TRAILER4){lcd_invert_area(67, 52, 73, 60);}
else if(currentPos == TRAILER5){lcd_invert_area(73, 52, 79, 60);}
else if(currentPos == TRAILER6){lcd_invert_area(79, 52, 85, 60);}
}
lcd_update(SCRN_TOP,SCRN_BOTTOM);
upDate = 1;
}
// end display
uio_Get();
switch(currentPos){
case ANIMAL: // Animal?
if(cButton == IO_ENTER){progFlag = 1;}
else if(cButton == IO_UP){;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -