1 Commits
Author SHA1 Message Date
swaits 57e0fb0aee feat(mux/rust): make cargo-publish ready for v0.1.0
- Add version to donglora-client dependency for crates.io
- Set TCP_NODELAY on accepted TCP connections for low-latency framing
- Add CHANGELOG.md
2026-04-06 14:50:00 -06:00
3 changed files with 23 additions and 1 deletions

No files matched your search

+20
View File
@@ -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
+1 -1
View File
@@ -10,7 +10,7 @@ keywords = ["lora", "radio", "usb", "multiplexer"]
categories = ["hardware-support"] categories = ["hardware-support"]
[dependencies] [dependencies]
donglora-client = { path = "../../clients/rust" } donglora-client = { version = "0.1.0", path = "../../clients/rust" }
anyhow = "1" anyhow = "1"
clap = { version = "4", features = ["derive"] } clap = { version = "4", features = ["derive"] }
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
+2
View File
@@ -495,6 +495,8 @@ async fn accept_tcp_clients(
match accept_result { match accept_result {
Ok((stream, addr)) => { Ok((stream, addr)) => {
debug!("TCP connection from {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(); let (read_half, write_half) = stream.into_split();
spawn_client(read_half, write_half, state.clone(), cmd_tx.clone(), shutdown.clone()); spawn_client(read_half, write_half, state.clone(), cmd_tx.clone(), shutdown.clone());
} }