diff options
Diffstat (limited to 'tmk_core/protocol')
| -rw-r--r-- | tmk_core/protocol/chibios/usb_main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 441cfab97..e5edd74dc 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c | |||
| @@ -415,14 +415,18 @@ static inline void usb_event_wakeup_handler(void) { | |||
| 415 | #endif /* SLEEP_LED_ENABLE */ | 415 | #endif /* SLEEP_LED_ENABLE */ |
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | bool last_suspend_state = false; | ||
| 419 | |||
| 418 | void usb_event_queue_task(void) { | 420 | void usb_event_queue_task(void) { |
| 419 | usbevent_t event; | 421 | usbevent_t event; |
| 420 | while (usb_event_queue_dequeue(&event)) { | 422 | while (usb_event_queue_dequeue(&event)) { |
| 421 | switch (event) { | 423 | switch (event) { |
| 422 | case USB_EVENT_SUSPEND: | 424 | case USB_EVENT_SUSPEND: |
| 425 | last_suspend_state = true; | ||
| 423 | usb_event_suspend_handler(); | 426 | usb_event_suspend_handler(); |
| 424 | break; | 427 | break; |
| 425 | case USB_EVENT_WAKEUP: | 428 | case USB_EVENT_WAKEUP: |
| 429 | last_suspend_state = false; | ||
| 426 | usb_event_wakeup_handler(); | 430 | usb_event_wakeup_handler(); |
| 427 | break; | 431 | break; |
| 428 | default: | 432 | default: |
| @@ -464,6 +468,9 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) { | |||
| 464 | qmkusbConfigureHookI(&drivers.array[i].driver); | 468 | qmkusbConfigureHookI(&drivers.array[i].driver); |
| 465 | } | 469 | } |
| 466 | osalSysUnlockFromISR(); | 470 | osalSysUnlockFromISR(); |
| 471 | if (last_suspend_state) { | ||
| 472 | usb_event_queue_enqueue(USB_EVENT_WAKEUP); | ||
| 473 | } | ||
| 467 | return; | 474 | return; |
| 468 | case USB_EVENT_SUSPEND: | 475 | case USB_EVENT_SUSPEND: |
| 469 | usb_event_queue_enqueue(USB_EVENT_SUSPEND); | 476 | usb_event_queue_enqueue(USB_EVENT_SUSPEND); |
