summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usb-i2c-sl018/tuer-rfid.c30
-rw-r--r--usb-i2c-sl018/update-keys.c3
2 files changed, 23 insertions, 10 deletions
diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c
index e991302..f6fe870 100644
--- a/usb-i2c-sl018/tuer-rfid.c
+++ b/usb-i2c-sl018/tuer-rfid.c
@@ -111,8 +111,9 @@ typedef struct __attribute__((__packed__))
sl018_message_t* recv_twi_msg = (sl018_message_t *)&recv_twi_buf;
uint8_t card_status =0;
-FILE stdio_stream;
-FILE * stdio = &stdio_stream;
+FILE usb_stream;
+FILE serial_stream;
+FILE * stdio = &serial_stream;
/*
LUFA Library
@@ -149,7 +150,8 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
void EVENT_USB_Device_ConfigurationChanged(void)
{
CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
- CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,stdio);
+ CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream);
+ stdio = &usb_stream;
}
void EVENT_USB_Device_ControlRequest(void)
@@ -159,11 +161,18 @@ void EVENT_USB_Device_ControlRequest(void)
void EVENT_USB_Device_Disconnect(void)
{
- Serial_CreateStream(stdio);
+ stdio = &serial_stream;
}
/* end LUFA CDC-ACM specific definitions*/
+int16_t stdio_BytesReceived(void)
+{
+ if(stdio == &usb_stream)
+ return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
+ else
+ return (int16_t)Serial_IsCharReceived();
+}
bool sl018_cmd_raw(const uint8_t * send_twi_buf)
{
@@ -228,7 +237,7 @@ void flash_eeprom_from_stdio(void)
fprintf(stdio,"Flashing keys:\n\r");
fflush(stdio);
for(keyslot_pos=0;keyslot_pos<EEPROM_SIZE/sizeof(keyslot);) {
- int16_t BytesReceived = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
+ int16_t BytesReceived = stdio_BytesReceived();
while(BytesReceived >0) {
keyslot.byte[byte_pos++]=fgetc(stdio);
BytesReceived--;
@@ -260,8 +269,7 @@ void dump_eeprom_to_stdio(void)
}
}
-
-void handle_cmd(uint8_t cmd)
+void handle_stdio(uint8_t cmd)
{
switch(cmd) {
case 'r':
@@ -365,6 +373,8 @@ void handle_card(void)
}
}
+
+
int main(void)
{
MCUSR &= ~(1 << WDRF);
@@ -376,11 +386,11 @@ int main(void)
TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000));
sei();
Serial_Init(115200,false);
- Serial_CreateStream(stdio);
+ Serial_CreateStream(&serial_stream);
for(;;) {
- int16_t BytesReceived = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
+ int16_t BytesReceived = stdio_BytesReceived();
if(BytesReceived > 0) {
- handle_cmd(fgetc(stdio));
+ handle_stdio(fgetc(stdio));
}
if(CARD_PRESENT != card_status) {
card_status = CARD_PRESENT;
diff --git a/usb-i2c-sl018/update-keys.c b/usb-i2c-sl018/update-keys.c
index efeca83..9428fc3 100644
--- a/usb-i2c-sl018/update-keys.c
+++ b/usb-i2c-sl018/update-keys.c
@@ -40,6 +40,7 @@ uint8_t generate_csum(keyslot_t data)
void send_key(keyslot_t key, FILE* dev)
{
fwrite(key, sizeof(keyslot_t), 1, dev);
+ fflush(dev);
char tmp;
while(fread(&tmp, 1, 1, dev)) {
fwrite(&tmp, 1, 1, stdout);
@@ -64,6 +65,8 @@ int main(int argc, char* argv[])
int fd = fileno(dev);
struct termios t;
tcgetattr(fd, &t);
+ t.c_lflag &= ~(ICANON | ECHO);
+ t.c_iflag &= ~(ICRNL | INLCR | IXON | IXOFF);
cfmakeraw(&t);
tcflush(fd, TCIOFLUSH);
tcsetattr(fd, TCSANOW, &t);