diff --git a/CardReader/Makefile b/CardReader/Makefile index 6b3755e73593929fab364ef892b11bc5fea060a6..f0da19b9c4584cc2806276b486795c7db0e7747c 100644 --- a/CardReader/Makefile +++ b/CardReader/Makefile @@ -151,12 +151,13 @@ LDFLAGS += -lm # to get a full listing. # -AVRDUDE_PROGRAMMER = stk500v2 +#AVRDUDE_PROGRAMMER = stk500v2 +#AVRDUDE_PROGRAMMER = dragon_isp #AVRDUDE_PROGRAMMER = usbtiny -#AVRDUDE_PROGRAMMER = USBasp +AVRDUDE_PROGRAMMER = USBasp -#AVRDUDE_PORT = usb # programmer connected to USB port -AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device +AVRDUDE_PORT = usb # programmer connected to USB port +#AVRDUDE_PORT = /dev/ttyUSB0 # programmer connected to serial device #AVRDUDE_PORT = lpt1 # programmer connected to parallel port AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_BITS) diff --git a/CardReader/main.c b/CardReader/main.c index 87020894177d6fd6c7be0312293ece77987edd28..eb53ab6696048c80acbe8cd703088566795ee6f2 100644 --- a/CardReader/main.c +++ b/CardReader/main.c @@ -48,14 +48,6 @@ void cardreader_alive(void){ transport_send_interrupt_message(2); } -void enable_power_save_mode(void){ - powersave_mode = 1; - lcd_set_backlight(0); -} -void disable_power_save_mode(void){ - powersave_mode = 0; - lcd_set_backlight(1); -} //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ void handle_sys_msg(uint8_t msg){ @@ -149,17 +141,17 @@ void display_receive_error(uint16_t status){ case 0: lcd_write_string_sz_P(PSTR("0-Byte Message")); break; case TRANSPORT_ERR_TIMEOUT: lcd_write_string_sz_P(PSTR("Read timeout")); break; case TRANSPORT_ERR_CHECKSUM_FAIL: lcd_write_string_sz_P(PSTR("Checksum fail")); break; - case TRANSPORT_ERR_MESSAGE_ABORT: lcd_write_string_sz_P(PSTR("Msg truncated")); break; +// case TRANSPORT_ERR_MESSAGE_ABORT: lcd_write_string_sz_P(PSTR("Msg truncated")); break; case TRANSPORT_ERR_MESSAGE_TOO_LONG: lcd_write_string_sz_P(PSTR("Msg too long")); break; - case TRANSPORT_ERR_UNEXPCETED_END: lcd_write_string_sz_P(PSTR("Unexp End of Msg")); break; - case TRANSPORT_ERR_NESTED_INTERRUPTS:lcd_write_string_sz_P(PSTR("Nested int. Msgs")); break; +// case TRANSPORT_ERR_UNEXPCETED_END: lcd_write_string_sz_P(PSTR("Unexp End of Msg")); break; +// case TRANSPORT_ERR_NESTED_INTERRUPTS:lcd_write_string_sz_P(PSTR("Nested int. Msgs")); break; } } void display_card_status(void){ lcd_clear(); lcd_home(); - lcd_write_string_sz_P(PSTR("AVR CardReader")); + lcd_write_string_sz_P(PSTR("PortalCardReader")); lcd_set_pos(0,1); switch (card_status){ case CARD_STATUS_REMOVED: @@ -183,15 +175,12 @@ void display_card_status(void){ void sleep(void){ transport_flush();//be sure all data is sent to the host. + wdt_disable(); //Disable watchdog while sleeping -// wdt_disable(); -// if (powersave_mode){ -// set_sleep_mode(SLEEP_MODE_PWR_DOWN); -// } else { -// set_sleep_mode(SLEEP_MODE_IDLE); -// } +// set_sleep_mode(SLEEP_MODE_IDLE); // sleep_mode(); // sleep_disable(); + wdt_enable(WDTO_8S); } @@ -209,19 +198,15 @@ int main(void){ transport_set_interrupt_handler(CARDREADER_INTERRUPT_RESET, reset); transport_set_interrupt_handler(CARDREADER_INTERRUPT_HOST_ALIVE, host_alive); transport_set_interrupt_handler(CARDREADER_INTERRUPT_CARDREADER_ALIVE, cardreader_alive); - transport_set_interrupt_handler(CARDREADER_INTERRUPT_ENABLE_POWER_SAVE_MODE, enable_power_save_mode); - transport_set_interrupt_handler(CARDREADER_INTERRUPT_DISABLE_POWER_SAVE_MODE, disable_power_save_mode); - lcd_set_backlight(!powersave_mode); + lcd_set_backlight(0); _delay_ms(200); lcd_init(); - + display_card_status(); //lcd_write_string_sz_P(PSTR("Waiting for Host")); - //"Ping" host - transport_send_interrupt_message(CARDREADER_INTERRUPT_HOST_ALIVE); - + //"Ping" host if (ISO7816_is_card_present()) card_status = CARD_STATUS_INSERTED; @@ -233,6 +218,9 @@ int main(void){ uint8_t old_card_status = CARD_STATUS_REMOVED; + transport_send_interrupt_message(CARDREADER_INTERRUPT_CARDREADER_ALIVE); + transport_send_interrupt_message(CARDREADER_INTERRUPT_HOST_ALIVE); + while(1){ wdt_reset(); @@ -258,7 +246,8 @@ int main(void){ clockout_start(); uint8_t ret = ISO7816_readATR(&card_atr); if (ATR_IS_ERROR(ret)){ - card_status = CARD_STATUS_ERROR; + //Set to error state (if the error was not caused by a removed card) + if (ret != ERR_ATR_CARD_REMOVED) card_status = CARD_STATUS_ERROR; } else { card_status = CARD_STATUS_READY; } diff --git a/common/cardreader_interface-common.h b/common/cardreader_interface-common.h index aca5d7113b6c07bfe52bc18355dbd5338b857aec..ac8330ee497f5a66a50b233ec4c983308a1a771d 100644 --- a/common/cardreader_interface-common.h +++ b/common/cardreader_interface-common.h @@ -7,8 +7,6 @@ #define CARDREADER_INTERRUPT_RESET 0 #define CARDREADER_INTERRUPT_HOST_ALIVE 1 #define CARDREADER_INTERRUPT_CARDREADER_ALIVE 2 -#define CARDREADER_INTERRUPT_ENABLE_POWER_SAVE_MODE 3 -#define CARDREADER_INTERRUPT_DISABLE_POWER_SAVE_MODE 4 #define CARDREADER_INTERRUPT_CARD_INSERTED 5 #define CARDREADER_INTERRUPT_CARD_REMOVED 6