[Bug] Restore usb suspend wakeup delay (#21676)
* Respect USB_SUSPEND_WAKEUP_DELAY on wakeup This delay wasn't honored after removing `restart_usb_driver` from the suspend and wakeup handling. It is now re-introduced in the appropriate spot, namely after issuing a remote wakeup to a sleeping host. * Remove old, unused and commented testing code
This commit is contained in:
parent
d232f60c01
commit
e8e989fd7a
|
@ -80,26 +80,6 @@ void console_task(void);
|
||||||
void midi_ep_task(void);
|
void midi_ep_task(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TESTING
|
|
||||||
* Amber LED blinker thread, times are in milliseconds.
|
|
||||||
*/
|
|
||||||
/* set this variable to non-zero anywhere to blink once */
|
|
||||||
// static THD_WORKING_AREA(waThread1, 128);
|
|
||||||
// static THD_FUNCTION(Thread1, arg) {
|
|
||||||
|
|
||||||
// (void)arg;
|
|
||||||
// chRegSetThreadName("blinker");
|
|
||||||
// while (true) {
|
|
||||||
// systime_t time;
|
|
||||||
|
|
||||||
// time = USB_DRIVER.state == USB_ACTIVE ? 250 : 500;
|
|
||||||
// palClearLine(LINE_CAPS_LOCK);
|
|
||||||
// chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
|
|
||||||
// palSetLine(LINE_CAPS_LOCK);
|
|
||||||
// chSysPolledDelayX(MS2RTC(STM32_HCLK, time));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/* Early initialisation
|
/* Early initialisation
|
||||||
*/
|
*/
|
||||||
__attribute__((weak)) void early_hardware_init_pre(void) {
|
__attribute__((weak)) void early_hardware_init_pre(void) {
|
||||||
|
@ -135,9 +115,6 @@ void boardInit(void) {
|
||||||
|
|
||||||
void protocol_setup(void) {
|
void protocol_setup(void) {
|
||||||
usb_device_state_init();
|
usb_device_state_init();
|
||||||
|
|
||||||
// TESTING
|
|
||||||
// chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static host_driver_t *driver = NULL;
|
static host_driver_t *driver = NULL;
|
||||||
|
@ -189,6 +166,14 @@ void protocol_pre_task(void) {
|
||||||
/* issue a remote wakeup event to the host which should resume
|
/* issue a remote wakeup event to the host which should resume
|
||||||
* the bus and get our keyboard out of suspension. */
|
* the bus and get our keyboard out of suspension. */
|
||||||
usbWakeupHost(&USB_DRIVER);
|
usbWakeupHost(&USB_DRIVER);
|
||||||
|
# if USB_SUSPEND_WAKEUP_DELAY > 0
|
||||||
|
/* Some hubs, kvm switches, and monitors do weird things, with
|
||||||
|
* USB device state bouncing around wildly on wakeup, yielding
|
||||||
|
* race conditions that can corrupt the keyboard state.
|
||||||
|
*
|
||||||
|
* Pause for a while to let things settle... */
|
||||||
|
wait_ms(USB_SUSPEND_WAKEUP_DELAY);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* after a successful wakeup a USB_EVENT_WAKEUP is signaled to QMK by
|
/* after a successful wakeup a USB_EVENT_WAKEUP is signaled to QMK by
|
||||||
|
|
|
@ -784,34 +784,19 @@ void init_usb_driver(USBDriver *usbp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
restart_usb_driver(usbp);
|
||||||
* Activates the USB driver and then the USB bus pull-up on D+.
|
|
||||||
* Note, a delay is inserted in order to not have to disconnect the cable
|
|
||||||
* after a reset.
|
|
||||||
*/
|
|
||||||
usbDisconnectBus(usbp);
|
|
||||||
usbStop(usbp);
|
|
||||||
wait_ms(50);
|
|
||||||
usbStart(usbp, &usbcfg);
|
|
||||||
usbConnectBus(usbp);
|
|
||||||
|
|
||||||
chVTObjectInit(&keyboard_idle_timer);
|
chVTObjectInit(&keyboard_idle_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @brief Restarts the USB driver and emulates a physical bus reconnection.
|
||||||
|
* Note that the bus reconnection is MCU and even board specific, so it might
|
||||||
|
* be a NOP on some hardware platforms.
|
||||||
|
*/
|
||||||
__attribute__((weak)) void restart_usb_driver(USBDriver *usbp) {
|
__attribute__((weak)) void restart_usb_driver(USBDriver *usbp) {
|
||||||
usbDisconnectBus(usbp);
|
usbDisconnectBus(usbp);
|
||||||
usbStop(usbp);
|
usbStop(usbp);
|
||||||
|
wait_ms(50);
|
||||||
#if USB_SUSPEND_WAKEUP_DELAY > 0
|
|
||||||
// Some hubs, kvm switches, and monitors do
|
|
||||||
// weird things, with USB device state bouncing
|
|
||||||
// around wildly on wakeup, yielding race
|
|
||||||
// conditions that can corrupt the keyboard state.
|
|
||||||
//
|
|
||||||
// Pause for a while to let things settle...
|
|
||||||
wait_ms(USB_SUSPEND_WAKEUP_DELAY);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
usbStart(usbp, &usbcfg);
|
usbStart(usbp, &usbcfg);
|
||||||
usbConnectBus(usbp);
|
usbConnectBus(usbp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue