From 7d4ad9d258ffa162018b4a710f5396681584d88f Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 30 Jan 2013 01:42:46 +0000 Subject: sl018_reset as own function new command '0' - reset SL018 reader git-svn-id: https://svn.spreadspace.org/avr/trunk@98 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-i2c-sl018/tuer-rfid.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'usb-i2c-sl018') diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c index 96535fc..a2eb1d6 100644 --- a/usb-i2c-sl018/tuer-rfid.c +++ b/usb-i2c-sl018/tuer-rfid.c @@ -49,6 +49,7 @@ keyslot_t EEMEM keyslots[EEPROM_SIZE/sizeof(keyslot_t)]; const uint8_t SL018_ADDR = 0xa0; const uint8_t SL018_WRITE = 0; const uint8_t SL018_READ = 1; +#define SL018_RESET 0xFF const char* SL018_cmd_tostring(const uint8_t status) { @@ -67,7 +68,7 @@ const char* SL018_cmd_tostring(const uint8_t status) case 0x11: return "Write a data page"; case 0x40: return "Control the red led"; case 0xF0: return "Get firmware version"; - case 0xFF: return "Reset"; + case SL018_RESET: return "Reset"; default: return "unknown status"; } } @@ -94,7 +95,7 @@ const uint8_t SL018CMD_ComSelectCard[] ={1,0x01}; const uint8_t SL018CMD_ComRedLedOn[] ={2,0x40,1}; const uint8_t SL018CMD_ComRedLedOff[] ={2,0x40,0}; const uint8_t SL018CMD_ComGetFirmwareVersion[] ={1,0xF0}; -const uint8_t SL018CMD_ComReset[] ={1,0xFF}; +const uint8_t SL018CMD_ComReset[] ={1,SL018_RESET}; uint8_t recv_twi_buf[256]; typedef struct __attribute__((__packed__)) @@ -170,7 +171,7 @@ int16_t stdio_BytesReceived(void) return (int16_t)Serial_IsCharReceived(); } -bool sl018_cmd_raw(const uint8_t * send_twi_buf) +bool sl018_cmd_raw(const uint8_t* send_twi_buf, bool wait_for_answer) { uint8_t pos = 0; //uint8_t ret; @@ -185,7 +186,10 @@ bool sl018_cmd_raw(const uint8_t * send_twi_buf) } else return 1; + if(!wait_for_answer) return 0; + _delay_ms(50); + if (TWI_StartTransmission(SL018_ADDR | SL018_READ,10) == TWI_ERROR_NoError) { TWI_ReceiveByte(recv_twi_buf, 0); for(pos=1; pos<=recv_twi_buf[0]; pos++) @@ -201,9 +205,18 @@ bool sl018_cmd_raw(const uint8_t * send_twi_buf) return 0; } -bool sl018_cmd(const uint8_t * send_twi_buf) +bool sl018_reset() +{ + if(sl018_cmd_raw(SL018CMD_ComReset, 0)) { + fprintf(stdio, "I2C error\n\r"); + return 0; + } + return 1; +} + +bool sl018_cmd(const uint8_t* send_twi_buf) { - if(sl018_cmd_raw(send_twi_buf)) { + if(sl018_cmd_raw(send_twi_buf, 1)) { fprintf(stdio, "I2C error\n\r"); return 0; } else { @@ -271,9 +284,13 @@ void handle_stdio(uint8_t cmd) { switch(cmd) { case 'r': - sl018_cmd(SL018CMD_ComReset); reset2bootloader(); break; + case '0': + if(sl018_reset()) + fprintf(stdio, "ok\n\r"); + break; + case 'f': //get cardreader firmware version if(sl018_cmd(SL018CMD_ComGetFirmwareVersion)) fprintf(stdio, "%s\n\r",recv_twi_msg->data); @@ -383,6 +400,8 @@ int main(void) sei(); Serial_Init(115200,false); Serial_CreateStream(&serial_stream); + + sl018_reset(); for(;;) { CDC_Device_USBTask(&VirtualSerial_CDC_Interface); USB_USBTask(); -- cgit v1.2.3