From 194662d89eafbf9c46f7740920e6e14e4c6fff10 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 30 Jan 2013 02:49:32 +0000 Subject: further cleanup git-svn-id: https://svn.spreadspace.org/avr/trunk@104 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-i2c-sl018/tuer-rfid.c | 58 +++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 30 deletions(-) (limited to 'usb-i2c-sl018') diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c index 302bcae..65d4a3d 100644 --- a/usb-i2c-sl018/tuer-rfid.c +++ b/usb-i2c-sl018/tuer-rfid.c @@ -38,18 +38,9 @@ #include #define EEPROM_SIZE 1024 - typedef uint8_t keyslot_t[8]; keyslot_t EEMEM keystore[EEPROM_SIZE/sizeof(keyslot_t)]; -#define TAG_STA_PIN PINB -#define TAG_STA_BIT 7 -#define CARD_PRESENT (!((TAG_STA_PIN >> TAG_STA_BIT) & 1)) - -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) { @@ -68,7 +59,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 SL018_RESET: return "Reset"; + case 0xFF: return "Reset"; default: return "unknown status"; } } @@ -91,11 +82,11 @@ const char* SL018_status_tostring(const uint8_t status) } } -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,SL018_RESET}; +const uint8_t SL018_CMD_ComSelectCard[] ={1,0x01}; +const uint8_t SL018_CMD_ComRedLedOn[] ={2,0x40,1}; +const uint8_t SL018_CMD_ComRedLedOff[] ={2,0x40,0}; +const uint8_t SL018_CMD_ComGetFirmwareVersion[] ={1,0xF0}; +const uint8_t SL018_CMD_ComReset[] ={1,0xFF}; uint8_t twi_recv_buf[256]; typedef struct __attribute__((__packed__)) @@ -107,7 +98,14 @@ typedef struct __attribute__((__packed__)) } sl018_message_t; sl018_message_t* twi_recv_msg = (sl018_message_t *)&twi_recv_buf; -uint8_t card_status =0; + +#define SL018_TWI_ADDR 0xA0 +#define SL018_TAG_STA_PIN PINB +#define SL018_TAG_STA_BIT 7 +#define CARD_PRESENT (!((SL018_TAG_STA_PIN >> SL018_TAG_STA_BIT) & 1)) +uint8_t card_status = 0; + + FILE usb_stream; FILE serial_stream; @@ -176,14 +174,14 @@ int16_t stdio_bytes_received(void) bool sl018_cmd_raw(const uint8_t* twi_send_buf, bool wait_for_answer) { uint8_t pos = 0; - //uint8_t ret; - if (TWI_StartTransmission(SL018_ADDR | SL018_WRITE,10) == TWI_ERROR_NoError) { - for(pos=0; pos<=twi_send_buf[0]; pos++) + + if (TWI_StartTransmission(SL018_TWI_ADDR | TWI_ADDRESS_WRITE,10) == TWI_ERROR_NoError) { + for(pos=0; pos<=twi_send_buf[0]; pos++) { if( ! TWI_SendByte(twi_send_buf[pos])) { TWI_StopTransmission(); return 1; } - // Must stop transmission afterwards to release the bus + } TWI_StopTransmission(); } else return 1; @@ -192,14 +190,14 @@ bool sl018_cmd_raw(const uint8_t* twi_send_buf, bool wait_for_answer) _delay_ms(50); - if (TWI_StartTransmission(SL018_ADDR | SL018_READ,10) == TWI_ERROR_NoError) { + if (TWI_StartTransmission(SL018_TWI_ADDR | TWI_ADDRESS_READ,10) == TWI_ERROR_NoError) { TWI_ReceiveByte(twi_recv_buf, 0); - for(pos=1; pos<=twi_recv_buf[0]; pos++) + for(pos=1; pos<=twi_recv_buf[0]; pos++) { if (! TWI_ReceiveByte(&twi_recv_buf[pos], (pos == twi_recv_buf[0]) ? 1:0 ) ) { TWI_StopTransmission(); return 1; } - // Must stop transmission afterwards to release the bus + } TWI_StopTransmission(); } else return 1; @@ -209,7 +207,7 @@ bool sl018_cmd_raw(const uint8_t* twi_send_buf, bool wait_for_answer) bool sl018_reset(void) { - if(sl018_cmd_raw(SL018CMD_ComReset, 0)) { + if(sl018_cmd_raw(SL018_CMD_ComReset, 0)) { fprintf(stdio, "I2C error\n\r"); return 0; } @@ -294,15 +292,15 @@ void handle_stdio(uint8_t cmd) fprintf(stdio, "ok\n\r"); break; case 'f': //get cardreader firmware version - if(sl018_cmd(SL018CMD_ComGetFirmwareVersion)) + if(sl018_cmd(SL018_CMD_ComGetFirmwareVersion)) fprintf(stdio, "%s\n\r",twi_recv_msg->data); break; case '4': //turn cardreader led off - if(sl018_cmd(SL018CMD_ComRedLedOff)) + if(sl018_cmd(SL018_CMD_ComRedLedOff)) fprintf(stdio, "ok\n\r"); break; case '5': //turn cardreader led on - if(sl018_cmd(SL018CMD_ComRedLedOn)) + if(sl018_cmd(SL018_CMD_ComRedLedOn)) fprintf(stdio, "ok\n\r"); break; case 'e': //flash eeprom @@ -358,7 +356,7 @@ void handle_card(void) { uint8_t pos; fprintf(stdio, "CARD IN: "); - if(sl018_cmd(SL018CMD_ComSelectCard)) + if(sl018_cmd(SL018_CMD_ComSelectCard)) { uint8_t uid_len = twi_recv_msg->len - sizeof(twi_recv_msg->command) - sizeof(twi_recv_msg->status) - 1; if(uid_len == 255 || uid_len > sizeof(keyslot_t) - 1) { @@ -373,10 +371,10 @@ void handle_card(void) uint8_t type = twi_recv_msg->data[uid_len]; if (0data,uid_len)) { - sl018_cmd(SL018CMD_ComRedLedOn); + sl018_cmd(SL018_CMD_ComRedLedOn); fprintf(stdio,"Card allowed - opening/closing door\n\r"); // TODO: open/close door! _delay_ms(255); - sl018_cmd(SL018CMD_ComRedLedOff); + sl018_cmd(SL018_CMD_ComRedLedOff); } else { fprintf(stdio,"Card not found in Database\n\r"); } -- cgit v1.2.3