summaryrefslogtreecommitdiff
path: root/ports/esp32/usb.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-09-24 14:11:44 +1000
committerDamien George <damien@micropython.org>2021-10-16 00:23:59 +1100
commitba940250a5b630018c8d9b0e21c5ed858a20450f (patch)
tree20875d82b6dfc823d9672af88182fb8b3da1d406 /ports/esp32/usb.c
parent549448e8bbc8ce0b6b5fc51c0660acdaff18c3d6 (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.c21
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