From 153ee6ca8ee86cd5c6ce4be260f27556ddd1bc89 Mon Sep 17 00:00:00 2001 From: Michael du Breuil Date: Wed, 20 Jun 2018 01:26:20 -0700 Subject: [PATCH] AP_HAL_ChibiOS: Clear UART buffers when opening a port --- libraries/AP_HAL_ChibiOS/UARTDriver.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp index 353e0f540a..0dc3fe9c4b 100644 --- a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp +++ b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp @@ -148,14 +148,16 @@ void UARTDriver::begin(uint32_t b, uint16_t rxS, uint16_t txS) thrashing of the heap once we are up. The ttyACM0 driver may not connect for some time after boot */ + while (_in_timer) { + hal.scheduler->delay(1); + } if (rxS != _readbuf.get_size()) { _initialised = false; - while (_in_timer) { - hal.scheduler->delay(1); - } - _readbuf.set_size(rxS); } + if (hal.console != this) { // don't clear USB buffers (allows early startup messages to escape) + _readbuf.clear(); + } if (b != 0) { _baudrate = b; @@ -173,13 +175,16 @@ void UARTDriver::begin(uint32_t b, uint16_t rxS, uint16_t txS) /* allocate the write buffer */ + while (_in_timer) { + hal.scheduler->delay(1); + } if (txS != _writebuf.get_size()) { _initialised = false; - while (_in_timer) { - hal.scheduler->delay(1); - } _writebuf.set_size(txS); } + if (hal.console != this) { // don't clear USB buffers (allows early startup messages to escape) + _writebuf.clear(); + } if (sdef.is_usb) { #ifdef HAVE_USB_SERIAL