X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;ds=sidebyside;f=tmk_core%2Fprotocol%2Fchibios%2Fusb_main.c;h=1ce5b4aedaffb33aa5b7a555b8086d7764d0971f;hb=7c4a2fab6d78e2f59f477bf75690a12c233b0ea7;hp=619b798bbd4f6801840ce13f2bd62aae977f5bb4;hpb=1c5c9d94c809dba7a487f07814de4701565f9092;p=max%2Ftmk_keyboard.git diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 619b798b..1ce5b4ae 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -1121,19 +1121,26 @@ void send_keyboard(report_keyboard_t *report) { } osalSysUnlock(); + bool ep_not_ready; #ifdef NKRO_ENABLE if(keyboard_nkro) { /* NKRO protocol */ usbPrepareTransmit(&USB_DRIVER, NKRO_ENDPOINT, (uint8_t *)report, sizeof(report_keyboard_t)); - osalSysLock(); - usbStartTransmitI(&USB_DRIVER, NKRO_ENDPOINT); - osalSysUnlock(); + /* need to wait until the previous packet has made it through */ + do { + osalSysLock(); + ep_not_ready = usbStartTransmitI(&USB_DRIVER, NKRO_ENDPOINT); + osalSysUnlock(); + } while (ep_not_ready); } else #endif /* NKRO_ENABLE */ { /* boot protocol */ usbPrepareTransmit(&USB_DRIVER, KBD_ENDPOINT, (uint8_t *)report, KBD_EPSIZE); - osalSysLock(); - usbStartTransmitI(&USB_DRIVER, KBD_ENDPOINT); - osalSysUnlock(); + /* need to wait until the previous packet has made it through */ + do { + osalSysLock(); + ep_not_ready = usbStartTransmitI(&USB_DRIVER, KBD_ENDPOINT); + osalSysUnlock(); + } while (ep_not_ready); } keyboard_report_sent = *report; }