From aee60d49bd890c05f9deee091dbf957d47796c3f Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Sun, 27 Jan 2013 19:20:28 +0000 Subject: minor clean up, improved error handling git-svn-id: https://svn.spreadspace.org/avr/trunk@70 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-i2c-sl018/tuer-rfid.c | 87 +++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 44 deletions(-) (limited to 'usb-i2c-sl018') diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c index 64831c1..2954231 100644 --- a/usb-i2c-sl018/tuer-rfid.c +++ b/usb-i2c-sl018/tuer-rfid.c @@ -150,62 +150,58 @@ unsigned char sl018_send_buffer(const unsigned char * buffer) return 0; } + +void flash_eeprom_from_usb(void) +{ + +} + + +bool sl018_send_buffer_check_error(const unsigned char * buffer) +{ + char txt_buff[10]; + if(sl018_send_buffer(buffer)) + { + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); + return 0; + } else { + if(twi_message->status) + { + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "SL018 Cmd,Error: "); + snprintf(txt_buff,sizeof(txt_buff),"%02X,%02X\n\r",twi_message->command,twi_message->status); + CDC_Device_SendString(&VirtualSerial_CDC_Interface, txt_buff); + return 0; + } + } + return 1; +} + + void handle_cmd(uint8_t cmd) { char foo[10]; uint8_t pos; switch(cmd) { - case '0': led_off(); break; - case '1': led_on(); break; - case 't': led_toggle(); break; case 'r': reset2bootloader(); break; -// case '2': -// while(1) -// { -// if(sl018_send_buffer(SL018CMD_ComGetFirmwareVersion)) -// { -// led_toggle(); -// CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); -// }; -// } -// break; - case '3': - if(sl018_send_buffer(SL018CMD_ComGetFirmwareVersion)) + case 'f': //get cardreader firmware version + if(sl018_send_buffer_check_error(SL018CMD_ComGetFirmwareVersion)) { - led_toggle(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); - } else { - snprintf(foo,sizeof(foo),"%x\n\r",twi_message->status); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "Status: "); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, foo); CDC_Device_SendString(&VirtualSerial_CDC_Interface, twi_message->data); CDC_Device_SendString(&VirtualSerial_CDC_Interface, "\n\r"); } break; - case '4': - if(sl018_send_buffer(SL018CMD_ComRedLedOff)) - { - led_toggle(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); - } + case '4': //turn cardreader led off + if(sl018_send_buffer_check_error(SL018CMD_ComRedLedOff)) + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "ok\n\r"); break; - case '5': - if(sl018_send_buffer(SL018CMD_ComRedLedOn)) - { - led_toggle(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); - } + case '5': //turn cardreader led on + if(sl018_send_buffer_check_error(SL018CMD_ComRedLedOn)) + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "ok\n\r"); break; - case CARD_IN: - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "CARD IN\n\r"); - if(sl018_send_buffer(SL018CMD_ComSelectCard)) + case CARD_IN: // card has been detected, read uid and print to usb + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "CARD IN: "); + if(sl018_send_buffer_check_error(SL018CMD_ComSelectCard)) { - led_toggle(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r"); - } else { - snprintf(foo,sizeof(foo),"%x\n\r",twi_message->status); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "Status: "); - CDC_Device_SendString(&VirtualSerial_CDC_Interface, foo); for (pos=twi_message->len - 4 ; pos< 255; pos--) { snprintf(foo,sizeof(foo),"%02X",twi_message->data[pos]); @@ -217,9 +213,11 @@ void handle_cmd(uint8_t cmd) case CARD_OUT: CDC_Device_SendString(&VirtualSerial_CDC_Interface, "CARD OUT\n\r"); break; + case 'e': //flash eeprom + flash_eeprom_from_usb(); + break; default: CDC_Device_SendString(&VirtualSerial_CDC_Interface, "error\n\r"); return; } - CDC_Device_SendString(&VirtualSerial_CDC_Interface, "ok\n\r"); } @@ -259,6 +257,7 @@ int main(void) cpu_init(); led_init(); + led_on(); USB_Init(); TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000)); sei(); @@ -268,7 +267,7 @@ int main(void) while(BytesReceived > 0) { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); if(!(ReceivedByte < 0)) { - handle_cmd(ReceivedByte); + //handle_cmd(ReceivedByte); RingBuffer_Insert(&CmdBuffer,(uint8_t) ReceivedByte); } BytesReceived--; -- cgit v1.2.3