summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018
diff options
context:
space:
mode:
authorOthmar Gsenger <otti@wirdorange.org>2013-01-27 18:27:59 +0000
committerOthmar Gsenger <otti@wirdorange.org>2013-01-27 18:27:59 +0000
commitb81bcf5f68c7b75a0e2079e8bfb794db8251fa37 (patch)
tree17577fd5fd96dc99c2ffe1111073ca23d056f932 /usb-i2c-sl018
parentlufa components are now selectable (diff)
basic working version usb-i2c-sl018
git-svn-id: https://svn.spreadspace.org/avr/trunk@68 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r--usb-i2c-sl018/tuer-rfid.c89
1 files changed, 75 insertions, 14 deletions
diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c
index e59b65c..f37c857 100644
--- a/usb-i2c-sl018/tuer-rfid.c
+++ b/usb-i2c-sl018/tuer-rfid.c
@@ -44,18 +44,33 @@ const uint8_t SL018_READ = 1;
//============================================
const unsigned char SL018CMD_ComSelectCard[] ={1,1};
-const unsigned char SL018CMD_ComLoginSector0[] ={9,2,0+2,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
-const unsigned char SL018CMD_ComReadBlock1[] ={2,3,1+8};
-const unsigned char SL018CMD_ComWriteBlock1[] ={18,4,1+8,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
-const unsigned char SL018CMD_ComIntiPurse1[] ={6,6,1+8,0x78,0x56,0x34,0x12};
-const unsigned char SL018CMD_ComReadPurse1[] ={2,5,1+8};
-const unsigned char SL018CMD_ComIncrPurse1[] ={6,8,1+8,0x02,0x00,0x00,0x00};
-const unsigned char SL018CMD_ComDecrPurse1[] ={6,9,1+8,0x01,0x00,0x00,0x00};
-const unsigned char SL018CMD_ComCopyValue[] ={3,0x0A,1+8,2+8};
-const unsigned char SL018CMD_ComReadUltralightPage5[] ={2,0x10,0x05};
-const unsigned char SL018CMD_ComWriteUltralightPage5[]={6,0x11,0x05,0x12,0x34,0x56,0x78};
+//const unsigned char SL018CMD_ComLoginSector0[] ={9,2,0+2,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
+//const unsigned char SL018CMD_ComReadBlock1[] ={2,3,1+8};
+//const unsigned char SL018CMD_ComWriteBlock1[] ={18,4,1+8,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
+//const unsigned char SL018CMD_ComIntiPurse1[] ={6,6,1+8,0x78,0x56,0x34,0x12};
+//const unsigned char SL018CMD_ComReadPurse1[] ={2,5,1+8};
+//const unsigned char SL018CMD_ComIncrPurse1[] ={6,8,1+8,0x02,0x00,0x00,0x00};
+//const unsigned char SL018CMD_ComDecrPurse1[] ={6,9,1+8,0x01,0x00,0x00,0x00};
+//const unsigned char SL018CMD_ComCopyValue[] ={3,0x0A,1+8,2+8};
+//const unsigned char SL018CMD_ComReadUltralightPage5[] ={2,0x10,0x05};
+//const unsigned char SL018CMD_ComWriteUltralightPage5[]={6,0x11,0x05,0x12,0x34,0x56,0x78};
const unsigned char SL018CMD_ComRedLedOn[] ={2,0x40,1};
const unsigned char SL018CMD_ComRedLedOff[] ={2,0x40,0};
+const unsigned char SL018CMD_ComGetFirmwareVersion[] ={1,0xF0};
+
+unsigned char twi_rcv_buff[256];
+
+
+typedef struct __attribute__((__packed__))
+{
+ uint8_t command;
+ uint8_t status;
+ char data[sizeof(twi_rcv_buff)-3];
+ uint8_t len;
+} SL018CMD_MESSAGE;
+
+SL018CMD_MESSAGE * twi_message = (SL018CMD_MESSAGE *) &twi_rcv_buff;
+
/*
LUFA Library
Copyright (C) Dean Camera, 2012.
@@ -63,6 +78,8 @@ const unsigned char SL018CMD_ComRedLedOff[] ={2,0x40,0};
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
+
+
#include <LUFA/Drivers/USB/USB.h>
#include "lufa-descriptor-usbserial.h"
@@ -112,25 +129,69 @@ unsigned char sl018_send_buffer(const unsigned char * buffer)
} else {
return 1;
}
+ _delay_ms(50);
+ if (TWI_StartTransmission(SL018_ADDR | SL018_READ,10) == TWI_ERROR_NoError)
+ {
+ TWI_ReceiveByte(&len, 0);
+ twi_rcv_buff[255]=len;
+ for(pos=0; pos<len; pos++)
+ TWI_ReceiveByte(&twi_rcv_buff[pos], (pos == len-1) ? 1:0 );
+ // Must stop transmission afterwards to release the bus
+ TWI_StopTransmission();
+ } else {
+ return 1;
+ }
return 0;
}
void handle_cmd(uint8_t cmd)
{
+ char foo[10];
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))
+ {
+ 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();
- }
+ led_toggle();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r");
+ }
+ break;
+ case '5':
+ if(sl018_send_buffer(SL018CMD_ComRedLedOn))
+ {
+ led_toggle();
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "I2C error\n\r");
+ }
break;
- default: CDC_Device_SendString(&VirtualSerial_CDC_Interface, "error\n"); return;
+ default: CDC_Device_SendString(&VirtualSerial_CDC_Interface, "error\n\r"); return;
}
- CDC_Device_SendString(&VirtualSerial_CDC_Interface, "ok\n");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface, "ok\n\r");
}