|
|
@ -80,6 +80,26 @@ void console_task(void); |
|
|
|
void midi_ep_task(void); |
|
|
|
#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 |
|
|
|
*/ |
|
|
|
__attribute__((weak)) void early_hardware_init_pre(void) { |
|
|
@ -115,6 +135,9 @@ void boardInit(void) { |
|
|
|
|
|
|
|
void protocol_setup(void) { |
|
|
|
usb_device_state_init(); |
|
|
|
|
|
|
|
// TESTING |
|
|
|
// chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); |
|
|
|
} |
|
|
|
|
|
|
|
static host_driver_t *driver = NULL; |
|
|
@ -157,32 +180,28 @@ void protocol_post_init(void) { |
|
|
|
} |
|
|
|
|
|
|
|
void protocol_pre_task(void) { |
|
|
|
usb_event_queue_task(); |
|
|
|
|
|
|
|
#if !defined(NO_USB_STARTUP_CHECK) |
|
|
|
if (USB_DRIVER.state == USB_SUSPENDED) { |
|
|
|
dprintln("suspending keyboard"); |
|
|
|
while (USB_DRIVER.state == USB_SUSPENDED) { |
|
|
|
suspend_power_down(); |
|
|
|
/* Do this in the suspended state */ |
|
|
|
suspend_power_down(); // on AVR this deep sleeps for 15ms |
|
|
|
/* Remote wakeup */ |
|
|
|
if ((USB_DRIVER.status & USB_GETSTATUS_REMOTE_WAKEUP_ENABLED) && suspend_wakeup_condition()) { |
|
|
|
/* issue a remote wakeup event to the host which should resume |
|
|
|
* the bus and get our keyboard out of suspension. */ |
|
|
|
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 |
|
|
|
restart_usb_driver(&USB_DRIVER); |
|
|
|
} |
|
|
|
} |
|
|
|
/* after a successful wakeup a USB_EVENT_WAKEUP is signaled to QMK by |
|
|
|
* ChibiOS, which triggers a wakeup callback that restores the state of |
|
|
|
* the keyboard. Therefore we do nothing here. */ |
|
|
|
/* Woken up */ |
|
|
|
// variables has been already cleared by the wakeup hook |
|
|
|
send_keyboard_report(); |
|
|
|
# ifdef MOUSEKEY_ENABLE |
|
|
|
mousekey_send(); |
|
|
|
# endif /* MOUSEKEY_ENABLE */ |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
usb_event_queue_task(); |
|
|
|
} |
|
|
|
|
|
|
|
void protocol_post_task(void) { |
|
|
|