diff options
author | Andrew Leech <andrew.leech@planetinnovation.com.au> | 2023-11-01 11:06:10 +1100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-11-01 16:27:10 +1100 |
commit | 06a7bf967c58644a0d341764994bdcc9253b4527 (patch) | |
tree | 5fd6f5b4eaaa89549dbd12f418bf65971835d212 | |
parent | d8a263435fc9e043dda9ba2f903c9348559f6582 (diff) |
esp32/usb: Wake main thread when USB receives data.
This improves (decreases) the latency on stdin, on SoCs with built-in USB
and using TinyUSB, like S2 and S3.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
-rw-r--r-- | ports/esp32/usb.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/ports/esp32/usb.c b/ports/esp32/usb.c index 2e417755c..316482e18 100644 --- a/ports/esp32/usb.c +++ b/ports/esp32/usb.c @@ -40,8 +40,10 @@ static uint8_t usb_rx_buf[CONFIG_TINYUSB_CDC_RX_BUFSIZE]; +// This is called from FreeRTOS task "tusb_tsk" in espressif__esp_tinyusb (not an ISR). static void usb_callback_rx(int itf, cdcacm_event_t *event) { - // TODO: what happens if more chars come in during this function, are they lost? + // espressif__esp_tinyusb places tinyusb rx data onto freertos ringbuffer which + // this function forwards onto our stdin_ringbuf. for (;;) { size_t len = 0; esp_err_t ret = tinyusb_cdcacm_read(itf, usb_rx_buf, sizeof(usb_rx_buf), &len); @@ -58,6 +60,7 @@ static void usb_callback_rx(int itf, cdcacm_event_t *event) { ringbuf_put(&stdin_ringbuf, usb_rx_buf[i]); } } + mp_hal_wake_main_task(); } } |