diff options
Diffstat (limited to 'app/usb.c')
-rw-r--r-- | app/usb.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -59,6 +59,45 @@ static const char *usb_strings[] = { usbd_device *usbd_dev; +int usb_is_suspended = 1; + + +static void +usb_suspended (void) +{ + *USB_CNTR_REG |= USB_CNTR_FSUSP; + + usb_is_suspended = 1; +} + +static void +usb_resumed (void) +{ + + *USB_CNTR_REG &= ~USB_CNTR_FSUSP; + + usb_is_suspended = 0; +} + +int +usb_wakeup_host (void) +{ + if (!usb_is_suspended) + return 1; + + + *USB_CNTR_REG |= USB_CNTR_RESUME; + + delay_us (1000); + delay_us (1000); + delay_us (1000); + delay_us (1000); + delay_us (1000); + + *USB_CNTR_REG &= ~USB_CNTR_RESUME; + + return 0; +} static int usb_control_class_request (usbd_device * usbd_dev, struct usb_setup_data *req, @@ -139,6 +178,9 @@ 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); + } void |