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.
24 lines
803 B
Rust
24 lines
803 B
Rust
//! Shared defaults for the example binaries.
|
|
//!
|
|
//! Mirrors `examples/_common.py::MESHCORE_US`. See that file for the
|
|
//! full justification — short version: 910.525 MHz / BW 62.5 / SF 7 /
|
|
//! CR 4/5, sync 0x1424 (RADIOLIB_SX126X_SYNC_WORD_PRIVATE), 20 dBm.
|
|
|
|
use donglora_client::{LoRaBandwidth, LoRaCodingRate, LoRaConfig, LoRaHeaderMode, Modulation};
|
|
|
|
/// MeshCore's "USA/Canada (Recommended)" preset (October 2025 narrow).
|
|
pub fn meshcore_us() -> Modulation {
|
|
Modulation::LoRa(LoRaConfig {
|
|
freq_hz: 910_525_000,
|
|
sf: 7,
|
|
bw: LoRaBandwidth::Khz62,
|
|
cr: LoRaCodingRate::Cr4_5,
|
|
preamble_len: 16,
|
|
sync_word: 0x1424,
|
|
tx_power_dbm: 20,
|
|
header_mode: LoRaHeaderMode::Explicit,
|
|
payload_crc: true,
|
|
iq_invert: false,
|
|
})
|
|
}
|