The full 1.0 client surface, matching the protocol v2 wire definitions from donglora-protocol 1.0.0.
* Public API is now async. The blocking Client<T: Transport> is replaced by Dongle (from donglora_client::connect / connect_with / ConnectOptions).
* src/client.rs and src/codec.rs are removed in favor of src/dongle.rs (high-level surface), src/session.rs (per-client tag/slot state), src/retry.rs (RetryPolicy + tx_with_retry), src/errors.rs (thiserror-based ClientError / ClientResult). src/protocol.rs is replaced by direct donglora-protocol imports.
* Transport is now tokio-serial for USB and tokio::net::{UnixStream, TcpStream} for mux, replacing the blocking serial + shim model.
* Dongle::tx_with_retry(data, &RetryPolicy) implements PROTOCOL.md §6.10 randomized backoff for CHANNEL_BUSY / EBUSY, returning a TxOutcome with per-attempt trace.
* Background keepalive task pings every 500 ms on host idle, tracking the 1 s inactivity timeout from §3.4 with 2x margin. Disable via ConnectOptions::keepalive(false).
* Auto-recovery from ERR(ENOTCONFIGURED): the Dongle caches the last SET_CONFIG and silently re-applies on session drop, retrying once.
* Error taxonomy switches from anyhow to thiserror. Transport-level conditions (Timeout, TransportClosed, ReaderExited, BadFrame) are first-class.
* Examples rewritten for the async API: examples/ping.rs, examples/tx.rs, examples/rx.rs all target the MeshCore US preset (910.525 MHz / BW 62.5 / SF 7 / CR 4/5 / sync 0x1424 / 20 dBm). examples/common/mod.rs holds the shared helper.
* tests/vectors.rs gains protocol-level roundtrip coverage anchored to the published donglora-protocol 1.0.0 types.
49 lines
1.5 KiB
TOML
49 lines
1.5 KiB
TOML
[package]
|
|
name = "donglora-client"
|
|
version = "1.0.0-alpha.1"
|
|
edition = "2024"
|
|
rust-version = "1.85"
|
|
authors = ["Stephen Waits <steve@waits.net>"]
|
|
license = "MIT"
|
|
description = "DongLoRa host library — connect, configure, send/receive LoRa packets (DongLoRa Protocol v2)"
|
|
repository = "https://github.com/donglora/client-rs"
|
|
homepage = "https://github.com/donglora/client-rs"
|
|
keywords = ["lora", "radio", "usb", "serial"]
|
|
categories = ["hardware-support"]
|
|
exclude = ["CLAUDE_TODO.md", "deny.toml", "justfile", "mise.toml", "rustfmt.toml", ".jj"]
|
|
|
|
[dependencies]
|
|
donglora-protocol = { path = "../protocol", default-features = false, features = ["std"] }
|
|
thiserror = "2"
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "time", "macros", "io-util", "net"] }
|
|
tokio-serial = "5"
|
|
tokio-stream = "0.1"
|
|
tracing = "0.1"
|
|
rand = "0.9"
|
|
|
|
[dev-dependencies]
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "time", "macros", "io-util", "net", "test-util"] }
|
|
anyhow = "1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
# Direct access to raw wire primitives for tests (frame encoder/decoder
|
|
# helpers that are not part of the donglora-client public API).
|
|
donglora-protocol = { path = "../protocol", default-features = false, features = ["std"] }
|
|
heapless = "0.9"
|
|
|
|
[[example]]
|
|
name = "ping"
|
|
required-features = []
|
|
|
|
[[example]]
|
|
name = "tx"
|
|
required-features = []
|
|
|
|
[[example]]
|
|
name = "rx"
|
|
required-features = []
|
|
|
|
[lints.clippy]
|
|
unwrap_used = "deny"
|
|
expect_used = "deny"
|
|
panic = "deny"
|