Compare commits
1
Commits
v0.1.0
...
mux-v0.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57e0fb0aee
|
No files matched your search
@@ -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
@@ -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"] }
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user