summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-01-28 02:51:58 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-01-28 02:51:58 +0000
commit37e68577a363aa2084238fbb9f0ab0020ca57e5a (patch)
tree445aba2ded6e88bd6b4a45d1e1612cdff40df780 /usb-i2c-sl018
parentsome code cleanup (diff)
SL018 reset works now
added string error messages git-svn-id: https://svn.spreadspace.org/avr/trunk@91 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r--usb-i2c-sl018/tuer-rfid.c51
1 files changed, 48 insertions, 3 deletions
diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c
index af53d41..71a1c44 100644
--- a/usb-i2c-sl018/tuer-rfid.c
+++ b/usb-i2c-sl018/tuer-rfid.c
@@ -56,7 +56,49 @@ const uint8_t SL018_READ = 1;
const unsigned char SL018CMD_ComSelectCard[] ={1,1};
const unsigned char SL018CMD_ComRedLedOn[] ={2,0x40,1};
const unsigned char SL018CMD_ComRedLedOff[] ={2,0x40,0};
-const unsigned char SL018CMD_ComGetFirmwareVersion[] ={1,0xF0};
+const unsigned char SL018CMD_ComGetFirmwareVersion[] ={1,0xF0};
+const unsigned char SL018CMD_ComReset[] ={1,0xFF};
+
+const char* SL018_cmd_tostring(const uint8_t status)
+{
+ switch(status) {
+ case 0x01: return "Select Mifare card";
+ case 0x02: return "Login to a sector";
+ case 0x03: return "Read a data block";
+ case 0x04: return "Write a data block";
+ case 0x05: return "Read a value block";
+ case 0x06: return "Initialize a value block";
+ case 0x07: return "Write master key";
+ case 0x08: return "Increment value";
+ case 0x09: return "Decrement value";
+ case 0x0A: return "Copy value";
+ case 0x10: return "Read a data page";
+ case 0x11: return "Write a data page";
+ case 0x40: return "Control the red led";
+ case 0xF0: return "Get firmware version";
+ case 0xFF: return "Reset";
+ default: return "unknown status";
+ }
+}
+
+const char* SL018_status_tostring(const uint8_t status)
+{
+ switch(status) {
+ case 0x0: return "Operation succeed";
+ case 0x1: return "No tag";
+ case 0x2: return "Login succeed";
+ case 0x3: return "Login fail";
+ case 0x4: return "Read fail";
+ case 0x5: return "Write fail";
+ case 0x6: return "Unable to read after write";
+ case 0xA: return "Collision occur";
+ case 0xC: return "Load key fail";
+ case 0xD: return "Not authenticate";
+ case 0xE: return "Not a value block";
+ default: return "unknown status";
+ }
+}
+
unsigned char twi_rcv_buff[256];
@@ -168,7 +210,7 @@ bool sl018_cmd(const unsigned char * buffer)
return 0;
} else {
if(twi_message->status) {
- fprintf(stdio,"SL018 Cmd,Error: %02X,%02X\n\r",twi_message->command,twi_message->status);
+ fprintf(stdio,"SL018 Cmd,Error: '%s','%s'\n\r",SL018_cmd_tostring(twi_message->command),SL018_status_tostring(twi_message->status));
return 0;
}
if(send_twi_message->command != twi_message->command) {
@@ -224,7 +266,10 @@ void dump_eeprom_to_stdio(void)
void handle_cmd(uint8_t cmd)
{
switch(cmd) {
- case 'r': reset2bootloader(); break;
+ case 'r':
+ sl018_cmd(SL018CMD_ComReset);
+ reset2bootloader();
+ break;
case 'f': //get cardreader firmware version
if(sl018_cmd(SL018CMD_ComGetFirmwareVersion))
{