diff options
Diffstat (limited to 'app/usb.c')
-rw-r--r-- | app/usb.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -75,6 +75,7 @@ static const char *usb_strings[] = { usbd_device *usbd_dev; +int usb_time_since_sof = 0; int usb_is_suspended = 0; @@ -153,6 +154,7 @@ usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req, } + void usb_set_config (usbd_device * usbd_dev, uint16_t wValue) { @@ -180,6 +182,33 @@ usb_set_config (usbd_device * usbd_dev, uint16_t wValue) } +static void +usb_sof (void) +{ + usb_time_since_sof = 0; +} + +void +usb_tick (void) +{ + if (usb_is_suspended) + { + usb_time_since_sof = 0; + return; + } + + usb_time_since_sof++; + + if (usb_time_since_sof > 1000) + { + usb_time_since_sof = 0; + _usbd_reset (usbd_dev); + } + + +} + + /* Buffer to be used for control requests. */ static uint8_t usbd_control_buffer[128]; @@ -194,6 +223,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); } |