summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-01-30 01:42:46 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-01-30 01:42:46 +0000
commit7d4ad9d258ffa162018b4a710f5396681584d88f (patch)
tree53fec4439b8d0668e69e573fbb53213e26dd8392 /usb-i2c-sl018
parentfurther cleanup (diff)
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
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r--usb-i2c-sl018/tuer-rfid.c31
1 files changed, 25 insertions, 6 deletions
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();