Expand description
Board-agnostic ULCP device runtime shared across firmware targets.
This crate holds the parts of the ULCP device that have no board HAL dependency, so the nRF52840 (T-Echo / T-1000E) and ESP32-S3 (Heltec V3) firmwares consume one copy instead of maintaining divergent forks.
Increment A moved the pure leaf modules: transport arbitration, the
persisted counter map re-export, the BLE pairing-policy helpers, and the
radio multiplexer. Increment C adds driver: the ULCP session run loop
(formerly the nRF device_task/apply_effect/Emitter), with every board
coupling routed through the driver::DeviceEnv trait.
The storage layer followed: journal holds the two-page rotating
journal handle (mount scan, write-target rotation, boot walk-back) and
node_counters the device node’s persisted frame counters. Both are
generic over the board’s flash type, which is the only part of that
stack that is genuinely per-board — the nRF images drive
MPSL-coordinated NVMC, the ESP32 image its SPI part. Shared modules
emit diagnostics through log, whose sink each board installs once
at boot.
Modules§
- ble_
security - Pure BLE security-policy helpers shared by embedded code and host tests.
- counter_
map - The device node’s persisted frame-counter map, shared via
umsh-journal-store(see that crate’scountermodule for the contract and tests). - device_
node - The device node: a full
umsh-mac/umsh-nodestack running on the device itself, alongside the ULCP session. - driver
- The board-agnostic ULCP session driver (Phase 5, increment C).
- duty_
gate - Duty-cycle admission gate for the device node’s radio path.
- gnss
- What a board does with a GNSS fix, shared by every board that has one.
- journal
- Two-page rotating journal handles, generic over the board’s flash.
- log
- The runtime’s debug-log seam.
- node_
counters - The device node’s persisted frame counters.
- radio_
mux - Radio multiplexer: shares the one physical radio among multiple clients.
- transport_
policy - Pure ULCP session transport arbitration.