summaryrefslogtreecommitdiffstats
path: root/app/usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/usb.c')
-rw-r--r--app/usb.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/app/usb.c b/app/usb.c
index 5845427..8c088dc 100644
--- a/app/usb.c
+++ b/app/usb.c
@@ -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);
}