Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

delay first serial write to allow host setup time #7041

Merged
merged 1 commit into from
Oct 12, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 21 additions & 1 deletion supervisor/shared/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <string.h>

#include "py/mpconfig.h"
#include "py/mphal.h"

#include "supervisor/shared/cpu.h"
#include "supervisor/shared/display.h"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -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

Expand All @@ -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) {
Expand Down