diff options
| author | root <root@new-selene.erebei.org> | 2015-12-01 10:51:56 +0000 | 
|---|---|---|
| committer | root <root@new-selene.erebei.org> | 2015-12-01 10:51:56 +0000 | 
| commit | bc832d6d342922a828aebb997d1d9c6626898487 (patch) | |
| tree | 655249961aa9abdc64e9a0227ddb0d114d4b7fd5 /app | |
| parent | 15f6f34fe239b0b71cb2ef4fd16f278a23b52506 (diff) | |
| download | candlestick-bc832d6d342922a828aebb997d1d9c6626898487.tar.gz candlestick-bc832d6d342922a828aebb997d1d9c6626898487.tar.bz2 candlestick-bc832d6d342922a828aebb997d1d9c6626898487.zip  | |
fish
Diffstat (limited to 'app')
| -rw-r--r-- | app/crypto.c | 31 | ||||
| -rw-r--r-- | app/main.c | 1 | ||||
| -rw-r--r-- | app/project.h | 3 | ||||
| -rw-r--r-- | app/prototypes.h | 23 | ||||
| -rw-r--r-- | app/state.c | 10 | ||||
| -rw-r--r-- | app/ticker.c | 7 | ||||
| -rw-r--r-- | app/usb.c | 24 | 
7 files changed, 64 insertions, 35 deletions
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 (); +    } +} @@ -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  } @@ -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 (); +    }  }  | 
