From 844cd17f0364736ab18b023a014d020427815d33 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 11 Oct 2022 20:29:52 -0400 Subject: [PATCH] delay first serial write by 50ms --- supervisor/shared/serial.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c index 0326f15437..5680d8afe0 100644 --- a/supervisor/shared/serial.c +++ b/supervisor/shared/serial.c @@ -28,6 +28,7 @@ #include #include "py/mpconfig.h" +#include "py/mphal.h" #include "supervisor/shared/cpu.h" #include "supervisor/shared/display.h" @@ -62,6 +63,13 @@ byte console_uart_rx_buf[64]; #endif #endif +#if CIRCUITPY_USB || CIRCUITPY_CONSOLE_UART +// Flag to note whether this is the first write after connection. +// Delay slightly on the first write to allow time for the host to set up things, +// including turning off echo mode. +static bool _first_write_done = false; +#endif + #if CIRCUITPY_USB_VENDOR bool tud_vendor_connected(void); #endif @@ -144,6 +152,10 @@ void serial_early_init(void) { } void serial_init(void) { + #if CIRCUITPY_USB || CIRCUITPY_CONSOLE_UART + _first_write_done = false; + #endif + port_serial_init(); } @@ -301,8 +313,11 @@ void serial_write_substring(const char *text, uint32_t length) { #endif #if CIRCUITPY_CONSOLE_UART + if (!_first_write_done) { + mp_hal_delay_ms(50); + _first_write_done = true; + } int uart_errcode; - common_hal_busio_uart_write(&console_uart, (const uint8_t *)text, length, &uart_errcode); #endif @@ -321,6 +336,11 @@ void serial_write_substring(const char *text, uint32_t length) { #endif #if CIRCUITPY_USB + // Delay the very first write + if (tud_cdc_connected() && !_first_write_done) { + mp_hal_delay_ms(50); + _first_write_done = true; + } uint32_t count = 0; if (tud_cdc_connected()) { while (count < length) {