mirror of
https://github.com/meshtastic/firmware.git
synced 2026-10-10 07:38:42 -04:00
fix(serial): don't sleep forever with pending PhoneAPI output on UART consoles (#11500)
* fix(serial): don't sleep forever with pending PhoneAPI output on UART consoles Since #11164 bounded the stream drain, a config dump can end a dispatch with output still queued. On UART-console ESP32 boards runOnce() then returns INT32_MAX with no RX pending, and neither rxInt() nor onNowHasData() fires for the remaining output, so the download wedges mid nodeinfo stream until the client happens to send a byte. Add StreamAPI::hasPendingOutput() (transport-retained frame or queued PhoneAPI data) and have SerialConsole::runOnce() short-poll (<=25ms) while it holds instead of sleeping INT32_MAX. The #11164 write budget is unchanged; idle sleep behavior with a drained queue is unchanged. The retained-frame probe also covers the ESP32-S2 USB-CDC branch, which takes the same INT32_MAX path. * test(serial): restore scratch NodeDB via tearDown, trim comments to house style A failed TEST_ASSERT longjmps out of a Unity test without running destructors, so RAII cannot restore the swapped nodeDB pointer; install the scratch NodeDB explicitly and restore/delete it in tearDown(), which runs after every test outcome. Also shorten the new comments to the two-line house limit.
This commit is contained in:
1 parent
fb6a212b44
commit
905482ccce
5 files changed
+112
-3
No files matched your search
@@ -57,6 +57,10 @@ class StreamAPI : public PhoneAPI
|
||||
virtual int32_t runOncePart();
|
||||
virtual int32_t runOncePart(char *buf, uint16_t bufLen);
|
||||
|
||||
/// True while undelivered output remains (retained frame or queued PhoneAPI data); callers
|
||||
/// woken only by RX activity must keep polling while set, as drains stop mid-dump (#11164).
|
||||
bool hasPendingOutput();
|
||||
|
||||
/// Check the current underlying physical link to see if the client is currently connected
|
||||
virtual bool checkIsConnected() override = 0;
|
||||
|
||||
@@ -104,6 +108,8 @@ class StreamAPI : public PhoneAPI
|
||||
|
||||
/// Complete retained transport output before dequeuing another PhoneAPI packet.
|
||||
virtual bool finishPendingFrame() { return true; }
|
||||
/// Return whether the transport retains an incomplete frame awaiting TX space.
|
||||
virtual bool hasRetainedFrame() { return false; }
|
||||
/// Return whether the dedicated log buffer is available for encoding.
|
||||
virtual bool canEncodeLogRecord() { return true; }
|
||||
/// Frame and write a payload, optionally using best-effort admission.
|
||||
|
||||
Reference in new issue
Block a user