-
Notifications
You must be signed in to change notification settings - Fork 3
Firmware Receiver v22
OneSeventyFour edited this page May 15, 2026
·
2 revisions
| Released | 2026-05 |
| Status | Superseded by v23 |
| Pairs with dongle | v16+ |
| Predecessor | v16 |
| File | Purpose | Download |
|---|---|---|
os4_receiver_v22.bin |
App partition. | Download |
os4_receiver_v22.bootloader.bin |
Chip bootloader. | Download |
os4_receiver_v22.partitions.bin |
Partition table. | Download |
os4_receiver_v22.boot_app0.bin |
OTA "next-app" pointer. | Download |
Receiver-side configuration query/set protocol (paired with dongle FW v16+).
- Two new message types:
-
RECEIVER_CONFIG_QUERY (18)— dongle → receiver -
RECEIVER_CONFIG_RESPONSE (19)— receiver → dongle (in ACK payload)
-
- The query carries a
flagsbyte plus per-config fields. Today the only knob isfire_duration_ms(gated byCFG_FLAG_SET_FIRE_DURATION); more knobs will land in the same struct's reserved space without a wire-protocol bump.flags=0is a pure fetch (no settings written). - The response is a fixed-size 17-byte struct carrying
NODE_ID, FW / board version,NUM_BOARDS/noBoardsDetected/cuesAvailable, and the persistedfire_duration_ms(plus 8 bytes reserved for future fields). -
cuesAvailable = 0when no cue boards are detected (noBoardsDetectedtrue), otherwiseNUM_BOARDS * 8(NUM_LEDS). Reported authoritatively here so the host UI no longer has to guess from operator-edited cue counts. -
fire_duration_msis now persisted in the same NVS namespace as the identity ("byh_rx", key"fire_dur"), defaulting to 1000 ms on a fresh unit. Replaces the compile-time#define FIRE_MS_DURATION 1000— the host can tune fire pulse width per-receiver without a reflash. - ACK choreography mirrors the
OTA_BEGINhandshake: a query's auto-ACK fires before the receiver CPU runs (so it carries stale status), then the receiver loads theCONFIG_RESPONSEinto the FIFO and sets aconfigResponsePendingflag. The flag suppresses periodic / post-command status refreshes from clobbering the response, so any subsequent inbound command (the dongle queues aCLOCK_SYNCright after the query) carries the response in its auto-ACK. The flag auto-clears on the first non-config inbound command, restoring normalRECEIVER_STATUSpiggybacking thereafter.
-
Dongle pairing required. Pair with dongle FW v16+ — older dongles never send
CONFIG_QUERY, so the new code paths are dormant but harmless on a v22 receiver. -
fire_duration_msof 1000 ms is preserved by the NVS migration; existing receivers behave identically until the host pushes a new value.
- OTA: OTA flashing.
- Wired: Flashing a receiver.
Getting started
- Overview
- Desktop installers (macOS / Windows)
- macOS
- Linux
- Windows
- Production vs Development
- Connecting the dongle
- Flash a receiver
- Flash a dongle
- OTA flashing
Raspberry Pi
System overview
Subsystems
Hardware
- Receiver firmware
- Dongle firmware
- RF protocol
- Contributor Portal — BOMs, schematics, and board resources
UI walkthrough
Reference
Downloads
- Firmware
- Installers
Module Build & User Guides
- Cue
- Receiver
- Dongle