3.6 KiB
3.6 KiB
Changelog
All notable changes to this crate are documented here. The format follows Keep a Changelog and this project adheres to Semantic Versioning.
1.0.0 — 2026-04-22
The 1.0 wire-format rewrite. Every message shape, tag-correlation
rule, and field layout is re-specified in the new normative
PROTOCOL.md and is incompatible with the 0.1.x line.
Breaking
- DongLoRa Protocol v2 wire format. Every
type_id, tag-correlation rule, and field layout is redefined inPROTOCOL.md§2 through §16. No byte compatibility with 0.1.x. - Module split. The single-file
lib.rsis replaced with dedicated modules:frame,commands,events,errors,modulation,info,crc,chip_id. Re-exports at the crate root preserve the short-form imports (Command,ErrorCode, etc.), but full paths to the oldframingmodule andResponse/RadioConfig/Bandwidthtypes no longer resolve. - Framing replaced.
src/framing.rsis gone. The newframe::FrameDecoderstreams inbound bytes and yieldsFrameResult::Ok { type_id, tag, payload }on each COBS-delimited, CRC-verified frame. Encoding moves toencode_frame(type_id, tag, payload, out). ModulationreplacesRadioConfig+Bandwidth. New enum covering LoRa, FSK/GFSK, LR-FHSS, and FLRC, each with its own typed parameter struct.- New response shapes.
OkPayload,SetConfigResult,TxDonePayload,RxPayload,RxOrigin, andTxFlagsmodel the richer response surface required by v2.
Added
PROTOCOL.md: the normative specification of DongLoRa Protocol v2, including wire examples, error taxonomy, state machine, and multi-client semantics (§13).RadioChipIdenum forGET_INFOchip identification.- CRC-16/CCITT-FALSE helper (
crc) exposed for integrity checks on arbitrary payload slices. capbitflag helpers on theInfostruct for decoding capability bitmaps.
Changed
- Fuzz corpus rewritten:
decoder_feed,frame_roundtrip,lora_config_roundtrip,parse_command,parse_device_messagereplace the 0.1cobs_*andcommand_roundtriptargets. - Proptest suite and mutation-killer set expanded to cover the new wire shape.
- Canonical-byte vectors rewritten against
PROTOCOL.md§C.
CI
- Workflow now runs on pushes to
devin addition tomain. - Fuzz jobs pinned to
x86_64-unknown-linux-gnufor reproducibility.
0.1.0 — 2026-04-13
Initial release. The DongLoRa wire-protocol types and COBS framing,
extracted from the firmware so the firmware, client-rs, mux-rs,
and bridge can share one definition.
Added
- Wire types:
Command,Response,RadioConfig,Bandwidth,ErrorCode, plus theMAX_PAYLOAD,RADIO_CONFIG_SIZE,TX_POWER_MAX, andPREAMBLE_DEFAULTconstants. Fixed-width little-endian on the wire — see the firmware repo'sPROTOCOL.md. framingmodule: streamingCobsDecoderpluscobs_encode_response, with aMAX_FRAMEconstant sized to fit any validResponseafter COBS overhead.- Cargo features:
defmt(default, derivesdefmt::Formaton public enums) andstd(off, opt-in for host-sideDebugniceties). - Test surface: 23 proptest properties (~1.13M cases per run), 4 cargo-fuzz targets, 16 canonical wire-byte vectors anchored to the spec, 6 mutation-killers. Mutation testing reaches 89/89 viable mutants under both feature configurations (3 provably-equivalent mutants documented and excluded). Miri runs clean on the library and the canonical-vector tests.
forbid(unsafe_code)at the crate root.- GitHub Actions CI (test/clippy/fmt/doc/deny/miri/fuzz/mutants).