From bc832d6d342922a828aebb997d1d9c6626898487 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 1 Dec 2015 10:51:56 +0000 Subject: fish --- app/crypto.c | 31 ++++++++++++++++++++++++++++++- app/main.c | 1 + app/project.h | 3 +++ app/prototypes.h | 23 ++++------------------- app/state.c | 10 +++++++++- app/ticker.c | 7 ++----- app/usb.c | 24 +++++++++++++++--------- 7 files changed, 64 insertions(+), 35 deletions(-) (limited to 'app') diff --git a/app/crypto.c b/app/crypto.c index 494e5ab..a725def 100644 --- a/app/crypto.c +++ b/app/crypto.c @@ -2,6 +2,9 @@ #include "../common/vendor_req.h" +static int key_send_timer = 0; +static int start_key_send = 0; + int crypto_control (uint8_t request, uint16_t value, uint16_t index, void *buf, size_t len) @@ -18,10 +21,15 @@ crypto_control (uint8_t request, uint16_t value, uint16_t index, void *buf, send_ascii (value); return 1; case VENDOR_REQ_SET_KEY: + state_init (); key_set (buf, len); return 1; case VENDOR_REQ_SEND_KEY: - key_send (); + + if (!value) + start_key_send = 1; + else + key_send_timer = value; return 1; case VENDOR_REQ_CLEAR_KEY: key_wipe (); @@ -46,3 +54,24 @@ vendor_control_request (usbd_device * usbd_dev, struct usb_setup_data *req, return crypto_control (req->bRequest, req->wValue, req->wIndex, *buf, *len); } + +void +crypto_tick (void) +{ + if (!key_send_timer) + return; + key_send_timer--; + + if (!key_send_timer) + start_key_send = 1; +} + +void +crypto_poll (void) +{ + if (start_key_send) + { + start_key_send = 0; + key_send (); + } +} diff --git a/app/main.c b/app/main.c index 4f8f6f7..8c51c90 100644 --- a/app/main.c +++ b/app/main.c @@ -20,6 +20,7 @@ main (void) rcc_periph_clock_enable (RCC_GPIOC); rcc_periph_clock_enable (RCC_AFIO); + ticker_init (); led_init (); #ifndef SLIM diff --git a/app/project.h b/app/project.h index a8b773b..6fccdc5 100644 --- a/app/project.h +++ b/app/project.h @@ -30,6 +30,9 @@ #define POWER_RETENTION_TIME 10 #define USB_RETENTION_TIME 60 +#define POWER_LOCK_TIME 500 +#define USB_LOCK_TIME 500 + #ifndef USB_REQ_TYPE_OUT #define USB_REQ_TYPE_OUT 0x0 #endif diff --git a/app/prototypes.h b/app/prototypes.h index 34d7863..2e78350 100644 --- a/app/prototypes.h +++ b/app/prototypes.h @@ -28,26 +28,7 @@ extern void delay_ms(uint32_t d); extern int timed_out(uint32_t then, unsigned int ms); extern void ticker_init(void); /* i2c.c */ -extern int i2c_bb(int scl, int sda); -extern void i2c_bb_start(void); -extern void i2c_bb_stop(void); -extern int i2c_bb_send_data(uint8_t v); -extern int i2c_bb_start_transaction(uint8_t a, int wnr); -extern void i2c_bb_init(void); /* lcd.c */ -extern uint8_t fb[2][16]; -extern uint8_t shadow[2][16]; -extern void lcd_refresh(void); -extern void lcd_tick(void); -extern void lcd_write_char(uint8_t c, int x, int y); -extern void lcd_erase(int x, int y, int w); -extern void lcd_erase_line(int w, int y); -extern void lcd_erase_all(void); -extern void lcd_write(char *c, int x, int y); -extern void lcd_backlight(int i); -extern void lcd_reset(void); -extern void lcd_init(void); -extern void lcd_shutdown(void); /* adc.c */ extern int host_has_power; extern void adc_tick(void); @@ -55,6 +36,8 @@ extern void adc_init(void); /* state.c */ extern uint32_t up_time; extern uint32_t down_time; +extern uint32_t usb_up_time; +extern uint32_t usb_down_time; extern int locked; extern void state_show(void); extern void state_tick(void); @@ -73,6 +56,8 @@ extern void keyboard_keypress(int m, int k); /* crypto.c */ extern int crypto_control(uint8_t request, uint16_t value, uint16_t index, void *buf, size_t len); extern int vendor_control_request(usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len, int (**complete)(usbd_device *usbd_dev, struct usb_setup_data *req)); +extern void crypto_tick(void); +extern void crypto_poll(void); /* map.c */ extern void send_ascii(unsigned char a); extern void send_str(const char *c); diff --git a/app/state.c b/app/state.c index 0c23260..eb033ac 100644 --- a/app/state.c +++ b/app/state.c @@ -1,6 +1,6 @@ #include "project.h" -uint32_t up_time, down_time,usb_up_time,usb_down_time; +uint32_t up_time, down_time, usb_up_time, usb_down_time; int locked; @@ -77,6 +77,11 @@ state_tick (void) key_wipe (); } + if ((usb_up_time > USB_LOCK_TIME) && !locked) + locked = 1; + if ((up_time > POWER_LOCK_TIME) && !locked) + locked = 1; + state_show (); } @@ -87,5 +92,8 @@ state_init (void) { down_time = 0; up_time = 0; + usb_down_time = 0; + usb_up_time = 0; + up_time = 0; locked = 0; } diff --git a/app/ticker.c b/app/ticker.c index 3e25c12..6ef8a5f 100644 --- a/app/ticker.c +++ b/app/ticker.c @@ -22,6 +22,7 @@ s_tick_handler (void) { adc_tick (); state_tick (); + crypto_tick (); } void @@ -39,18 +40,14 @@ sys_tick_handler (void) lcd_tick (); #endif - usb_tick(); + usb_tick (); -#if 1 s_count++; if (s_count >= 1000) { s_count = 0; s_tick_handler (); } -#else - s_tick_handler (); -#endif } diff --git a/app/usb.c b/app/usb.c index 3f5404a..9a84389 100644 --- a/app/usb.c +++ b/app/usb.c @@ -58,22 +58,25 @@ usbd_device *usbd_dev; int usb_is_suspended = 0; -int usb_running =0; +int usb_running = 0; static int time_since_sof; -void usb_tick(void) +void +usb_tick (void) { -time_since_sof++; -if (time_since_sof>3000) usb_running=0; + time_since_sof++; + if (time_since_sof > 3000) + usb_running = 0; } -static void usb_sof(void) +static void +usb_sof (void) { -usb_running=1; -time_since_sof=0; + usb_running = 1; + time_since_sof = 0; } static void @@ -184,7 +187,7 @@ usb_init (void) usbd_register_set_config_callback (usbd_dev, usb_set_config); usbd_register_suspend_callback (usbd_dev, usb_suspended); usbd_register_resume_callback (usbd_dev, usb_resumed); - usbd_register_sof_callback(usbd_dev, usb_sof); + usbd_register_sof_callback (usbd_dev, usb_sof); } @@ -192,5 +195,8 @@ void usb_run (void) { for (;;) - usbd_poll (usbd_dev); + { + usbd_poll (usbd_dev); + crypto_poll (); + } } -- cgit v1.2.3