Add flow control to the companion USB interface
The contact sync streams up to MAX_CONTACTS frames back to back, but ArduinoSerialInterface never checked whether the stream could take them: isWriteBusy() returned false unconditionally, so MyMesh's pacing gate had no effect, and writeFrame() called write() without looking at availableForWrite(). On ESP32 (HWCDC, 256 byte TX ring) a host that stalls for a moment makes the driver drop queued bytes silently, which tears a frame in half - and since the framing is length prefixed with no checksum and no resync marker, the client stays desynchronised for the rest of the session. Reported as 'the app disconnects while syncing contacts' on devices with a large contact list. Add opt-in flow control: report busy until a whole frame fits, and drop frames as a unit instead of tearing them. Enable it for the companion USB interface and give HWCDC a bigger TX buffer with a short write timeout, mirroring what kiss_modem already does. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ab492ba187
commit
a7724b9ec6
3 files changed
+31
-1
No files matched your search
@@ -218,7 +218,14 @@ void setup() {
|
||||
// add usb interface
|
||||
#if defined(ENABLE_USB_INTERFACE)
|
||||
usb_serial_interface.begin(Serial);
|
||||
// keep frames intact and pace the contact stream when the host is slow
|
||||
usb_serial_interface.enableFlowControl(true);
|
||||
#if defined(ESP32) && defined(ARDUINO_USB_MODE) && ARDUINO_USB_MODE == 1
|
||||
// a 256 byte TX buffer overflows during a contact sync, and write() blocks
|
||||
// up to tx_timeout_ms per call against a stalled host (same reasoning as
|
||||
// the kiss_modem tuning)
|
||||
Serial.setTxBufferSize(4096);
|
||||
Serial.setTxTimeoutMs(5);
|
||||
// The ESP32 USB-Serial-JTAG peripheral (HWCDC) has no DTR concept at all:
|
||||
// (bool)Serial only tells us the host has enumerated the device, which is
|
||||
// already true when the cable is plugged into a powered port. Fall back to
|
||||
|
||||
Reference in new issue
Block a user