diff options
| author | Damien George <damien@micropython.org> | 2021-09-24 14:11:44 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-10-16 00:23:59 +1100 |
| commit | ba940250a5b630018c8d9b0e21c5ed858a20450f (patch) | |
| tree | 20875d82b6dfc823d9672af88182fb8b3da1d406 /ports/esp32/usb.c | |
| parent | 549448e8bbc8ce0b6b5fc51c0660acdaff18c3d6 (diff) | |
esp32/usb: Improve speed of USB CDC output.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'ports/esp32/usb.c')
| -rw-r--r-- | ports/esp32/usb.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/ports/esp32/usb.c b/ports/esp32/usb.c index 21047fa2b..95c827729 100644 --- a/ports/esp32/usb.c +++ b/ports/esp32/usb.c @@ -93,15 +93,28 @@ void usb_tx_strn(const char *str, size_t len) { } while (len) { + // Get amount of CDC output buffer space available, making sure + // there is at least one byte available. + size_t avail = tud_cdc_n_write_available(CDC_ITF); + if (avail == 0) { + if (tinyusb_cdcacm_write_flush(CDC_ITF, pdMS_TO_TICKS(1000)) != ESP_OK) { + return; + } + avail = tud_cdc_n_write_available(CDC_ITF); + } + + // Write as much data as possible. size_t l = len; - if (l > CONFIG_USB_CDC_TX_BUFSIZE) { - l = CONFIG_USB_CDC_TX_BUFSIZE; + if (l > avail) { + l = avail; } - tinyusb_cdcacm_write_queue(CDC_ITF, (uint8_t *)str, l); - tinyusb_cdcacm_write_flush(CDC_ITF, pdMS_TO_TICKS(1000)); + tud_cdc_n_write(CDC_ITF, (uint8_t *)str, l); str += l; len -= l; } + + // Queue a flush to write out the data in the CDC buffer (if any). + tud_cdc_n_write_flush(CDC_ITF); } #endif // CONFIG_USB_ENABLED |
