1
0

V-USB remote wakeup

This commit is contained in:
Luiz Ribeiro 2016-11-27 11:38:24 -05:00
parent 093bfd6901
commit 391c979be7

View File

@ -20,6 +20,7 @@
#include "timer.h" #include "timer.h"
#include "uart.h" #include "uart.h"
#include "debug.h" #include "debug.h"
#include "suspend.h"
#define UART_BAUD_RATE 115200 #define UART_BAUD_RATE 115200
@ -41,6 +42,23 @@ static void initForUsbConnectivity(void)
sei(); sei();
} }
void usb_remote_wakeup(void) {
cli();
int8_t ddr_orig = USBDDR;
USBOUT |= (1 << USBMINUS);
USBDDR = ddr_orig | USBMASK;
USBOUT ^= USBMASK;
_delay_ms(25);
USBOUT ^= USBMASK;
USBDDR = ddr_orig;
USBOUT &= ~(1 << USBMINUS);
sei();
}
int main(void) int main(void)
{ {
bool suspended = false; bool suspended = false;
@ -70,19 +88,6 @@ int main(void)
// Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1) // Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1)
if (timer_elapsed(last_timer) > 5) { if (timer_elapsed(last_timer) > 5) {
suspended = true; suspended = true;
/*
uart_putchar('S');
_delay_ms(1);
cli();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_bod_disable();
sei();
sleep_cpu();
sleep_disable();
_delay_ms(10);
uart_putchar('W');
*/
} }
} }
#endif #endif
@ -95,6 +100,8 @@ int main(void)
keyboard_task(); keyboard_task();
} }
vusb_transfer_keyboard(); vusb_transfer_keyboard();
} else if (suspend_wakeup_condition()) {
usb_remote_wakeup();
} }
} }
} }