- Track serial timeout in field instead of returning hardcoded 2s - Always restore timeout in drain_rx, even on read errors - Handle EINTR/Interrupted in read_frame (retry instead of error) - Use connect_timeout for TCP mux (no more 2-min hangs) - Set write timeout on mux sockets (unix + tcp) - Log unexpected unsolicited frames in recv via tracing::warn - Add unix socket timeout test for WouldBlock handling - Add CHANGELOG.md, remove resolved CLAUDE_TODO.md
1.1 KiB
1.1 KiB
Changelog
0.1.0 — 2026-04-06
Initial release.
Features
- High-level
Client<T>with send/recv and command helpers (ping, set_config, start_rx, stop_rx, transmit, get_config, get_mac, display_on, display_off) - COBS wire framing via
ucobs(matches firmware implementation) - Auto-detection connection: TCP mux, Unix socket mux, direct USB serial
- Bounded RX packet buffering (256 packets, FIFO eviction)
FrameReaderaccumulator for streaming byte sources- USB device discovery by VID:PID with blocking wait
Resilience
- Cross-platform timeout handling:
TimedOut(Windows) andWouldBlock(Linux/macOS) both treated as clean timeouts inread_frame EINTR/Interruptedsignals retried automatically inread_framedrain_rxalways restores the original timeout, even on I/O errors- TCP mux connections use
connect_timeout(bounded by caller's timeout) - Mux sockets set both read and write timeouts
SerialTransporttracks timeout accurately for save/restore- Unexpected unsolicited frames logged via
tracing::warninstead of silently discarded