diff options
author | root <root@lamia.panaceas.james.local> | 2015-06-13 13:08:23 +0100 |
---|---|---|
committer | root <root@lamia.panaceas.james.local> | 2015-06-13 13:08:23 +0100 |
commit | cd568297a41e5a6f2e130de82c07b6b789d34f4b (patch) | |
tree | a8ac2021e11d8a33d178fa521bde323c819e4c8d /app/usb.c | |
parent | 162fcd3f8d879615dc39181daea95ef6fcb83752 (diff) | |
download | tims_keyboard-cd568297a41e5a6f2e130de82c07b6b789d34f4b.tar.gz tims_keyboard-cd568297a41e5a6f2e130de82c07b6b789d34f4b.tar.bz2 tims_keyboard-cd568297a41e5a6f2e130de82c07b6b789d34f4b.zip |
add usb wakeup support, all keys up on bad data, and resend for parity errors
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 |