X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=tmk_core%2Fprotocol%2Fvusb%2Fmain.c;h=794e4000eaddd446eddeae8644f8f986b30ccf7f;hb=97782dd59e2966b568cdb7a58adaa988acc79d9b;hp=0d809536d3514471cfd1fa3e5e88d95ce3c3c260;hpb=f37805e698a34ce07f10c7f5316f9bbd2a63563b;p=max%2Ftmk_keyboard.git diff --git a/tmk_core/protocol/vusb/main.c b/tmk_core/protocol/vusb/main.c index 0d809536..794e4000 100644 --- a/tmk_core/protocol/vusb/main.c +++ b/tmk_core/protocol/vusb/main.c @@ -20,6 +20,7 @@ #include "timer.h" #include "uart.h" #include "debug.h" +#include "suspend.h" #define UART_BAUD_RATE 115200 @@ -41,6 +42,23 @@ static void initForUsbConnectivity(void) 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) { 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) if (timer_elapsed(last_timer) > 5) { 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 @@ -95,6 +100,8 @@ int main(void) keyboard_task(); } vusb_transfer_keyboard(); + } else if (suspend_wakeup_condition()) { + usb_remote_wakeup(); } } }