]> git.friedersdorff.com Git - max/tmk_keyboard.git/commitdiff
Do timeout when writing to CONSOLE EP queue.
authorflabbergast <s3+flabbergast@sdfeu.org>
Fri, 18 Dec 2015 20:50:59 +0000 (20:50 +0000)
committerflabbergast <s3+flabbergast@sdfeu.org>
Fri, 18 Dec 2015 20:50:59 +0000 (20:50 +0000)
Fixes TMK bug #266.

tmk_core/protocol/chibios/usb_main.c

index 85548fbb2750dd9ed9b8c7451baa32b8ebf4090e..ee2788e5247711b04242ff31e865081f8f53bd7c 100644 (file)
@@ -1323,10 +1323,13 @@ int8_t sendchar(uint8_t c) {
     return 0;
   }
   osalSysUnlock();
-  /* should get suspended and wait if the queue is full
-   * but it's not blocking even if noone is listening,
-   *  because the USB packets are sent anyway */
-  return(chOQPut(&console_queue, c));
+  /* Timeout after 5us if the queue is full.
+   * Increase this timeout if too much stuff is getting
+   * dropped (i.e. the buffer is getting full too fast
+   * for USB/HIDRAW to dequeue). Another possibility
+   * for fixing this kind of thing is to increase
+   * CONSOLE_QUEUE_CAPACITY. */
+  return(chOQPutTimeout(&console_queue, c, US2ST(5)));
 }
 
 #else /* CONSOLE_ENABLE */