# HG changeset patch # User Jacob Alexander # Date 1434159115 25200 # Node ID f7b14e25ca5b2d36dcacf1a9f25e65b9139fbe91 # Parent b2c8581307bc44482c2f82113929d7b4a6ae1df1# Parent 05a09eda53fb020e8dbbc43efedf3b23d08f8768 Merge pull request #27 from smasher816/wakeup-devel Inital Remote Wakeup Support diff -r b2c8581307bc -r f7b14e25ca5b Output/pjrcUSB/arm/usb_dev.c --- a/Output/pjrcUSB/arm/usb_dev.c Wed May 13 21:58:22 2015 -0700 +++ b/Output/pjrcUSB/arm/usb_dev.c Fri Jun 12 18:31:55 2015 -0700 @@ -167,6 +167,7 @@ static uint8_t reply_buffer[8]; +volatile uint8_t remote_wakeup_enabled = 0; // ----- Functions ----- @@ -294,7 +295,8 @@ data = reply_buffer; break; case 0x0080: // GET_STATUS (device) - reply_buffer[0] = 0; + //I think this is the corrent endianess + reply_buffer[0] = (remote_wakeup_enabled)<<1; reply_buffer[1] = 0; datalen = 2; data = reply_buffer; @@ -314,6 +316,11 @@ datalen = 2; break; case 0x0100: // CLEAR_FEATURE (device) + //Disable DEVICE_REMOTE_WAKEUP feature + if (setup.wValue == 0x01) { + remote_wakeup_enabled = 0; + } + break; case 0x0101: // CLEAR_FEATURE (interface) // TODO: Currently ignoring, perhaps useful? -HaaTa endpoint0_stall(); @@ -334,6 +341,11 @@ endpoint0_stall(); return; case 0x0300: // SET_FEATURE (device) + //Enable DEVICE_REMOTE_WAKEUP feature + if (setup.wValue == 0x01) { + remote_wakeup_enabled = 1; + } + break; case 0x0301: // SET_FEATURE (interface) // TODO: Currently ignoring, perhaps useful? -HaaTa endpoint0_stall(); @@ -1108,6 +1120,11 @@ //serial_print("sleep\n"); USB0_ISTAT = USB_ISTAT_SLEEP; } + + if ( (status & USB_ISTAT_RESUME /* 20 */ ) ) { + //serial_print("resume\n"); + USB0_ISTAT = USB_ISTAT_RESUME; + } } diff -r b2c8581307bc -r f7b14e25ca5b Output/pjrcUSB/arm/usb_dev.h --- a/Output/pjrcUSB/arm/usb_dev.h Wed May 13 21:58:22 2015 -0700 +++ b/Output/pjrcUSB/arm/usb_dev.h Fri Jun 12 18:31:55 2015 -0700 @@ -56,6 +56,8 @@ extern volatile uint8_t usb_cdc_line_rtsdtr; extern volatile uint8_t usb_cdc_transmit_flush_timer; +extern volatile uint8_t remote_wakeup_enabled; + // ----- Functions ----- diff -r b2c8581307bc -r f7b14e25ca5b Output/pjrcUSB/arm/usb_keyboard.c --- a/Output/pjrcUSB/arm/usb_keyboard.c Wed May 13 21:58:22 2015 -0700 +++ b/Output/pjrcUSB/arm/usb_keyboard.c Fri Jun 12 18:31:55 2015 -0700 @@ -76,6 +76,13 @@ uint32_t wait_count = 0; usb_packet_t *tx_packet; + if (remote_wakeup_enabled) { + USB0_CTL |= USB_CTL_RESUME; + _delay_ms(5); //wait 1 to 15ms + USB0_CTL &= ~USB_CTL_RESUME; + _delay_ms(5); + } + // Wait till ready while ( 1 ) {