Преглед на файлове

Check usb transmit status in send_extra() (#14643)

Dasky преди 3 години
родител
ревизия
1953a968c5
променени са 1 файла, в които са добавени 11 реда и са изтрити 0 реда
  1. 11 0
      tmk_core/protocol/chibios/usb_main.c

+ 11 - 0
tmk_core/protocol/chibios/usb_main.c

@@ -921,6 +921,17 @@ static void send_extra(uint8_t report_id, uint16_t data) {
         return;
     }
 
+    if (usbGetTransmitStatusI(&USB_DRIVER, SHARED_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 */
+        if (osalThreadSuspendTimeoutS(&(&USB_DRIVER)->epc[SHARED_IN_EPNUM]->in_state->thread, TIME_MS2I(10)) == MSG_TIMEOUT) {
+            osalSysUnlock();
+            return;
+        }
+    }
+
     static report_extra_t report;
     report = (report_extra_t){.report_id = report_id, .usage = data};