swaits acf715b3f0 feat: auto-resume RX across SET_CONFIG (no more re-issue of RX_START)
Spec §3.5 and §6.3 (SET_CONFIG side effects) previously required the host to re-issue RX_START after any successful SET_CONFIG, because the radio was unconditionally left in idle. That chore is hostile to scanner, time-division, and dynamic-modulation use cases and violates the principle of least surprise.


Update the normative text so that SET_CONFIG applied while the radio is in continuous RX auto-re-arms RX with the new parameters once reconfiguration completes. RX ring is still cleared (stale packets from the old modulation are not semantically meaningful). The OK response is still held until the radio is ready, so hosts may TX / RX immediately after it.


Behavior when RX was not active on SET_CONFIG is unchanged: radio lands in idle. No wire-format change. Old hosts that re-issue RX_START after SET_CONFIG keep working (the redundant call is a no-op OK on a radio already in Receiving).
2026-04-22 11:44:53 -06:00
2026-04-22 09:21:12 -06:00

donglora-protocol

CI Crates.io Docs.rs

Wire protocol types and COBS framing for DongLoRa, shared between the firmware and host crates (client-rs, mux-rs, bridge). no_std, zero-alloc, fixed-width little-endian. See PROTOCOL.md in this repo for the normative DongLoRa Protocol v2 specification.

Install

# Embedded / firmware (defmt::Format derives on by default):
donglora-protocol = "1"

# Host (no defmt):
donglora-protocol = { version = "1", default-features = false }

Layout

  • src/frame.rs: FrameDecoder (streaming COBS + CRC decoder) and encode_frame(type_id, tag, payload, out).
  • src/commands.rs: host-to-device Command enum, type_id constants, and TxFlags.
  • src/events.rs: device-to-host DeviceMessage (OK / ERR / RX / TX_DONE), with the OkPayload, SetConfigResult, RxPayload, RxOrigin, and TxDonePayload sub-shapes.
  • src/modulation.rs: Modulation enum (LoRa, FSK/GFSK, LR-FHSS, FLRC) and their typed parameter structs.
  • src/info.rs: GET_INFO response payload + capability bitmap helpers.
  • src/errors.rs: wire-level ErrorCode enum.
  • src/chip_id.rs: RadioChipId enum.
  • src/crc.rs: CRC-16/CCITT-FALSE helper.

Features

Feature Default What it does
defmt yes Derive defmt::Format on public enums.
std no Enable Debug-based niceties for host-side fuzz / proptest.

Testing

The crate ships its own quality gate via just test:

Gate What runs
test-unit nextest across all feature permutations + doc tests
test-clippy -D warnings across all feature permutations
test-fmt cargo fmt -- --check
test-doc cargo doc --no-deps --all-features
test-deny cargo deny check
test-fuzz 60 s on each of 5 cargo-fuzz targets (nightly)
test-miri miri on lib + vector tests, both feature shapes (nightly)
test-mutants cargo-mutants under both feature configurations

The proptest suite alone exercises ~1.13M test cases per run.

License

MIT — see LICENSE.

S
Description
No description provided
Readme MIT
176 KiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 98.6%
Just 1.4%