From d61078a5cb38804e9eda28565a662485f3f59b55 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 17 Jan 2017 14:36:52 +0000 Subject: usb state machine improvements --- app/usb.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'app/usb.c') 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); } -- cgit v1.2.3