소스 검색

V-USB remote wakeup (#7627)

* V-USB remote wakeup

Backport from tmk/tmk_keyboard@391c979be751eaf113c8f53c36644a6bb6ff12f6

* Change vusb.c remote wake config

as per fauxpark's suggestion
Drashna Jaelre 5 년 전
부모
커밋
845953cc67
2개의 변경된 파일21개의 추가작업 그리고 5개의 파일을 삭제
  1. 20 0
      tmk_core/protocol/vusb/main.c
  2. 1 5
      tmk_core/protocol/vusb/vusb.c

+ 20 - 0
tmk_core/protocol/vusb/main.c

@@ -20,6 +20,7 @@
 #include "timer.h"
 #include "uart.h"
 #include "debug.h"
+#include "suspend.h"
 #ifdef SLEEP_LED_ENABLE
 #    include "sleep_led.h"
 #endif
@@ -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;
 #if USB_COUNT_SOF
@@ -115,6 +133,8 @@ int main(void) {
                 raw_hid_task();
             }
 #endif
+        } else if (suspend_wakeup_condition()) {
+            usb_remote_wakeup();
         }
     }
 }

+ 1 - 5
tmk_core/protocol/vusb/vusb.c

@@ -521,11 +521,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
 #    endif
         .bConfigurationValue = 0x01,
         .iConfiguration      = 0x00,
-#    if USB_CFG_IS_SELF_POWERED
-        .bmAttributes        = (1 << 7) | USBATTR_SELFPOWER,
-#    else
-        .bmAttributes        = (1 << 7),
-#    endif
+        .bmAttributes        = (1 << 7) | USBATTR_REMOTEWAKE,
         .bMaxPower           = USB_MAX_POWER_CONSUMPTION / 2
     },