From eb1b2f38a080e998e62807fb7ac8090b804fa186 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 21 Oct 2022 20:42:26 -0700 Subject: [PATCH] Fix USB issues caused by early usb_cdc.Serial read Check for connected before calling read. Otherwise TinyUSB may setup the read on the wrong endpoint. Fixes #6018 ` --- shared-module/usb_cdc/Serial.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/shared-module/usb_cdc/Serial.c b/shared-module/usb_cdc/Serial.c index 7f1bc75a53..23bcc8722d 100644 --- a/shared-module/usb_cdc/Serial.c +++ b/shared-module/usb_cdc/Serial.c @@ -38,7 +38,10 @@ size_t common_hal_usb_cdc_serial_read(usb_cdc_serial_obj_t *self, uint8_t *data, // Read up to len bytes immediately. // The number of bytes read will not be larger than what is already in the TinyUSB FIFO. - uint32_t total_num_read = tud_cdc_n_read(self->idx, data, len); + uint32_t total_num_read = 0; + if (tud_cdc_n_connected(self->idx)) { + total_num_read = tud_cdc_n_read(self->idx, data, len); + } if (wait_forever || wait_for_timeout) { // Continue filling the buffer past what we already read. @@ -65,7 +68,9 @@ size_t common_hal_usb_cdc_serial_read(usb_cdc_serial_obj_t *self, uint8_t *data, data += num_read; // Try to read another batch of bytes. - num_read = tud_cdc_n_read(self->idx, data, len); + if (tud_cdc_n_connected(self->idx)) { + num_read = tud_cdc_n_read(self->idx, data, len); + } total_num_read += num_read; } }