diff options
Diffstat (limited to 'tmk_core/protocol')
| -rw-r--r-- | tmk_core/protocol/chibios/usb_main.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index cbe2571944..e79ff15e89 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -717,12 +717,14 @@ void send_mouse(report_mouse_t *report) {    }    osalSysUnlock(); -  /* TODO: LUFA manually waits for the endpoint to become ready -   * for about 10ms for mouse, kbd, system; 1ms for nkro -   * is this really needed? -   */ -    osalSysLock(); +  if(usbGetTransmitStatusI(&USB_DRIVER, MOUSE_IN_EPNUM)) { +    /* Need to either suspend, or loop and call unlock/lock during +     * every iteration - otherwise the system will remain locked, +     * no interrupts served, so USB not going through as well. +     * Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */ +    osalThreadSuspendS(&(&USB_DRIVER)->epc[MOUSE_IN_EPNUM]->in_state->thread); +  }    usbStartTransmitI(&USB_DRIVER, MOUSE_IN_EPNUM, (uint8_t *)report, sizeof(report_mouse_t));    osalSysUnlock();  } | 
