summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/rp2/mphalport.c7
-rw-r--r--ports/rp2/mphalport.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/ports/rp2/mphalport.c b/ports/rp2/mphalport.c
index 63ff76f5d..6ba234c66 100644
--- a/ports/rp2/mphalport.c
+++ b/ports/rp2/mphalport.c
@@ -139,9 +139,14 @@ void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
if (n > CFG_TUD_CDC_EP_BUFSIZE) {
n = CFG_TUD_CDC_EP_BUFSIZE;
}
- while (n > tud_cdc_write_available()) {
+ int timeout = 0;
+ // Wait with a max of USC_CDC_TIMEOUT ms
+ while (n > tud_cdc_write_available() && timeout++ < MICROPY_HW_USB_CDC_TX_TIMEOUT) {
MICROPY_EVENT_POLL_HOOK
}
+ if (timeout >= MICROPY_HW_USB_CDC_TX_TIMEOUT) {
+ break;
+ }
uint32_t n2 = tud_cdc_write(str + i, n);
tud_cdc_write_flush();
i += n2;
diff --git a/ports/rp2/mphalport.h b/ports/rp2/mphalport.h
index 31bedf338..73a503f5a 100644
--- a/ports/rp2/mphalport.h
+++ b/ports/rp2/mphalport.h
@@ -33,6 +33,7 @@
#include "RP2040.h" // cmsis, for __WFI
#define SYSTICK_MAX (0xffffff)
+#define MICROPY_HW_USB_CDC_TX_TIMEOUT (500)
extern int mp_interrupt_char;
extern ringbuf_t stdin_ringbuf;