Browse Source

V-USB remote wakeup

master
Luiz Ribeiro 7 years ago
parent
commit
391c979be7
1 changed files with 20 additions and 13 deletions
  1. 20
    13
      tmk_core/protocol/vusb/main.c

+ 20
- 13
tmk_core/protocol/vusb/main.c View File

#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
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;
// 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
keyboard_task(); keyboard_task();
} }
vusb_transfer_keyboard(); vusb_transfer_keyboard();
} else if (suspend_wakeup_condition()) {
usb_remote_wakeup();
} }
} }
} }

Loading…
Cancel
Save