Archived
1
0

Inital Remote Wakeup Support

Not working yet...
This commit is contained in:
Rowan Decker 2015-03-08 22:35:55 -07:00
parent aeaaaaa468
commit dc562cdcb3
3 changed files with 61 additions and 35 deletions

View File

@ -167,6 +167,7 @@ volatile uint8_t usb_reboot_timer = 0;
static uint8_t reply_buffer[8]; static uint8_t reply_buffer[8];
volatile uint8_t remote_wakeup_enabled = 0;
// ----- Functions ----- // ----- Functions -----
@ -294,7 +295,8 @@ static void usb_setup()
data = reply_buffer; data = reply_buffer;
break; break;
case 0x0080: // GET_STATUS (device) 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; reply_buffer[1] = 0;
datalen = 2; datalen = 2;
data = reply_buffer; data = reply_buffer;
@ -314,6 +316,11 @@ static void usb_setup()
datalen = 2; datalen = 2;
break; break;
case 0x0100: // CLEAR_FEATURE (device) case 0x0100: // CLEAR_FEATURE (device)
//Disable DEVICE_REMOTE_WAKEUP feature
if (setup.wValue == 0x01) {
remote_wakeup_enabled = 0;
}
break;
case 0x0101: // CLEAR_FEATURE (interface) case 0x0101: // CLEAR_FEATURE (interface)
// TODO: Currently ignoring, perhaps useful? -HaaTa // TODO: Currently ignoring, perhaps useful? -HaaTa
endpoint0_stall(); endpoint0_stall();
@ -334,6 +341,11 @@ static void usb_setup()
endpoint0_stall(); endpoint0_stall();
return; return;
case 0x0300: // SET_FEATURE (device) case 0x0300: // SET_FEATURE (device)
//Enable DEVICE_REMOTE_WAKEUP feature
if (setup.wValue == 0x01) {
remote_wakeup_enabled = 1;
}
break;
case 0x0301: // SET_FEATURE (interface) case 0x0301: // SET_FEATURE (interface)
// TODO: Currently ignoring, perhaps useful? -HaaTa // TODO: Currently ignoring, perhaps useful? -HaaTa
endpoint0_stall(); endpoint0_stall();
@ -1108,6 +1120,11 @@ restart:
//serial_print("sleep\n"); //serial_print("sleep\n");
USB0_ISTAT = USB_ISTAT_SLEEP; USB0_ISTAT = USB_ISTAT_SLEEP;
} }
if ( (status & USB_ISTAT_RESUME /* 20 */ ) ) {
//serial_print("resume\n");
USB0_ISTAT = USB_ISTAT_RESUME;
}
} }

View File

@ -56,6 +56,8 @@ extern volatile uint8_t usb_cdc_line_coding[7];
extern volatile uint8_t usb_cdc_line_rtsdtr; extern volatile uint8_t usb_cdc_line_rtsdtr;
extern volatile uint8_t usb_cdc_transmit_flush_timer; extern volatile uint8_t usb_cdc_transmit_flush_timer;
extern volatile uint8_t remote_wakeup_enabled;
// ----- Functions ----- // ----- Functions -----

View File

@ -76,6 +76,13 @@ void usb_keyboard_send()
uint32_t wait_count = 0; uint32_t wait_count = 0;
usb_packet_t *tx_packet; 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 // Wait till ready
while ( 1 ) while ( 1 )
{ {