[usb_uart] Return flush result, expose timeout via config (#14616)

This commit is contained in:
Keith Burzinski
2026-03-08 00:04:14 -06:00
committed by GitHub
parent 5e842a8b20
commit 04cff1c916
3 changed files with 17 additions and 10 deletions
+6 -4
View File
@@ -169,10 +169,10 @@ void USBUartChannel::write_array(const uint8_t *data, size_t len) {
uart::FlushResult USBUartChannel::flush() {
// Spin until the output queue is drained and the last USB transfer completes.
// Safe to call from the main loop only.
// The 100 ms timeout guards against a device that stops responding mid-flush;
// The flush_timeout_ms_ timeout guards against a device that stops responding mid-flush;
// in that case the main loop is blocked for the full duration.
uint32_t start = millis(); // 100 ms safety timeout
while ((!this->output_queue_.empty() || this->output_started_.load()) && millis() - start < 100) {
uint32_t start = millis();
while ((!this->output_queue_.empty() || this->output_started_.load()) && millis() - start < this->flush_timeout_ms_) {
// Kick start_output() in case data arrived but no transfer is in flight yet.
this->parent_->start_output(this);
yield();
@@ -260,10 +260,12 @@ void USBUartComponent::dump_config() {
" Data Bits: %u\n"
" Parity: %s\n"
" Stop bits: %s\n"
" Flush Timeout: %" PRIu32 " ms\n"
" Debug: %s\n"
" Dummy receiver: %s",
channel->index_, channel->baud_rate_, channel->data_bits_, PARITY_NAMES[channel->parity_],
STOP_BITS_NAMES[channel->stop_bits_], YESNO(channel->debug_), YESNO(channel->dummy_receiver_));
STOP_BITS_NAMES[channel->stop_bits_], channel->flush_timeout_ms_, YESNO(channel->debug_),
YESNO(channel->dummy_receiver_));
}
}
void USBUartComponent::start_input(USBUartChannel *channel) {