diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9d2099d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +## 0.1.0 — 2026-04-06 + +Initial release. + +### Features + +- USB multiplexer daemon: share one DongLoRa dongle with multiple applications +- Unix domain socket and optional TCP listeners (same COBS-framed protocol) +- RxPacket broadcast to all connected clients +- Reference-counted StartRx/StopRx across clients +- Config locking: first client sets radio config, others must match or fail +- Auto-reconnect on USB hot-plug with ping verification +- Bounded per-client send queues (256 frames) with backpressure isolation +- Smart interception: redundant commands get synthetic responses without + hitting the dongle +- Graceful shutdown on SIGINT/SIGTERM with socket cleanup +- TCP_NODELAY on accepted connections for low-latency frame delivery +- CLI: `--port`, `--socket`, `--tcp`, `--verbose` options diff --git a/Cargo.toml b/Cargo.toml index 2f356a3..ebd6742 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ keywords = ["lora", "radio", "usb", "multiplexer"] categories = ["hardware-support"] [dependencies] -donglora-client = { path = "../../clients/rust" } +donglora-client = { version = "0.1.0", path = "../../clients/rust" } anyhow = "1" clap = { version = "4", features = ["derive"] } tokio = { version = "1", features = ["full"] } diff --git a/src/daemon.rs b/src/daemon.rs index 97762a6..8b20912 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -495,6 +495,8 @@ async fn accept_tcp_clients( match accept_result { Ok((stream, addr)) => { debug!("TCP connection from {addr}"); + // Low-latency: disable Nagle (COBS frames are small) + let _ = stream.set_nodelay(true); let (read_half, write_half) = stream.into_split(); spawn_client(read_half, write_half, state.clone(), cmd_tx.clone(), shutdown.clone()); }