refactor(radio): chart-first restructure on hsmc 0.3 + soak hardening
Migrate from hsmc 0.2 (local-patched) to hsmc 0.3.0 (crates.io, with embassy + trace-defmt features). Restructure radio chart and bundle several adjacent stability changes that need to land together for soak runs. Radio chart: - Booting (default, no handlers) -> Operational (default Unconfigured; super-state owning CmdPing/CmdGetInfo/Reset/WedgeDetected handlers + Recovering + CheckRecoveryBudget) -> Dead (terminal). - Cold init's during is structurally un-cancellable. - radio_task is a 30-line shim that panics if run() returns (chart is non-terminating). - Internal queue capacity bumped 8 -> 32 to cover action-emit bursts. Host chart: - Connected splits into WaitingForFirstFrame (default, no timer) + Active (chart-owned 1s inactivity timer via on(after) + self- transition on FrameReceived). Manual Timer::after + last_frame_at removed. Soak hardening: - ld/nrf52840-memory.x: app start 0x1000 -> 0x26000 to leave the factory s140 SoftDevice dormant in flash. - hal/nrf52840.rs: dump POWER.RESETREAS on boot -- WARN on DOG/LOCKUP, INFO on RESETPIN/SREQ/wake-from-OFF. - host/usb.rs: read_packet errors discriminated -- Disabled is debug (normal during USB enum), BufferOverflow stays warn. - COBS encode warns now carry type/tag/payload-length for diagnosis. - RADIO_THROTTLED static initializes to true (no proof of host drain at boot). - driver/sh1106.rs: init retries 3x with 100ms backoff (intermittent first-write race on power-up). - Cargo.toml: unexpected_cfgs allowlist for hsmc's journal/trace-* features. docs/semtech_lora_cad_lbt_guidebook.md: vendor the Semtech CAD/LBT reference for offline lookup.
This commit is contained in:
16 files changed
+2417
-262
No files matched your search
@@ -82,12 +82,48 @@ flash board extra_features="":
|
||||
|
||||
# Flash ARM board via debug probe (requires J-Link or similar).
|
||||
# `extra_features` is passed through to the build.
|
||||
# Sets DEFMT_LOG at build time so defmt::info!/warn!/error! are actually
|
||||
# compiled in (default filter is ERROR-only — strips info logs).
|
||||
# `embassy_usb=error` silences the benign Linux modem-manager
|
||||
# `SET_INTERFACE: alt setting out of range` WARN that fires once per
|
||||
# enumeration; it's a normal STALL response (correct USB behavior),
|
||||
# the WARN is just embassy_usb noise. Other crates inherit the `info`
|
||||
# default so chart traces, our own info!/warn!/error! all still fire.
|
||||
flash-probe board extra_features="":
|
||||
@just _ensure_tools
|
||||
@just build {{board}} release "{{extra_features}}"
|
||||
@DEFMT_LOG=info,embassy_usb=error just build {{board}} release "{{extra_features}}"
|
||||
@set -- $(just _info {{board}}); feat=$1; target=$2; chip=$3; \
|
||||
probe-rs run --chip $chip "{{builds_dir}}/donglora-{{board}}-v{{version}}.elf"
|
||||
|
||||
# UF2-flash via the bootloader, then probe-rs attach for RTT log streaming.
|
||||
# Required on boards (e.g. RAK4631) where the bootloader gates the app
|
||||
# behind a "valid app flag" in its settings page that only the bootloader
|
||||
# itself can set — `probe-rs run`'s direct SWD writes bypass that flag and
|
||||
# leave the bootloader stuck in DFU mode. UF2 path goes through the
|
||||
# bootloader, sets the flag, then we attach for RTT (no reset, no reflash).
|
||||
flash-attach board extra_features="":
|
||||
@just _ensure_tools
|
||||
@DEFMT_LOG=info,embassy_usb=error just build {{board}} release "{{extra_features}}"
|
||||
@just _flash_uf2 {{board}}
|
||||
@set -- $(just _info {{board}}); feat=$1; target=$2; chip=$3; \
|
||||
sleep 1; \
|
||||
probe-rs attach --chip $chip --no-catch-reset \
|
||||
"{{builds_dir}}/donglora-{{board}}-v{{version}}.elf"
|
||||
|
||||
# Attach probe-rs for live RTT/defmt streaming WITHOUT flashing or
|
||||
# resetting the chip. Logs are tee'd to a UTC-timestamped file in /tmp
|
||||
# so soak captures don't clobber each other across runs. Use this with
|
||||
# the dongle already running the desired firmware (flash via `just flash`
|
||||
# or `just flash-attach` first).
|
||||
attach board:
|
||||
@just _ensure_tools
|
||||
@set -- $(just _info {{board}}); feat=$1; target=$2; chip=$3; \
|
||||
log="/tmp/donglora-soak-$(date -u +%Y%m%dT%H%M%SZ).log"; \
|
||||
echo "Logging to $log"; \
|
||||
probe-rs attach --chip $chip --no-catch-reset \
|
||||
"{{builds_dir}}/donglora-{{board}}-v{{version}}.elf" 2>&1 \
|
||||
| tee "$log"
|
||||
|
||||
# Show binary size for a release build
|
||||
size board:
|
||||
@just _cargo {{board}} "size --release"
|
||||
|
||||
Reference in new issue
Block a user