Skip to content

Firmware Receiver v15

OneSeventyFour edited this page May 15, 2026 · 2 revisions

Receiver firmware v15

Released 2026-05
Status Superseded by v16
Pairs with dongle v10+
Predecessor v14
Notable First release with OTA flash support.

Downloads

File Purpose Download
os4_receiver_v15.bin App partition. Download
os4_receiver_v15.bootloader.bin Chip bootloader. Download
os4_receiver_v15.partitions.bin Partition table. Download
os4_receiver_v15.boot_app0.bin OTA "next-app" pointer. Download

Release notes

OTA flash mode (paired with dongle FW v10+).

  • New message types OTA_BEGIN(13) / OTA_DATA(14) / OTA_END(15) / OTA_ABORT(16) and a piggy-back ACK status RECEIVER_OTA_STATUS(17).
  • On OTA_BEGIN we call Update.begin(totalSize), switch the radio to the high data rate the dongle requested (1 Mbps or 2 Mbps), and start streaming chunks straight into the OTA partition via Update.write(). Each chunk is up to 29 bytes (32 B nRF payload − 1 B type − 2 B chunkIdx); the dongle's auto-retry handles loss.
  • On OTA_END we Update.end(true), accept-the-image, and ESP.restart() — the bootloader picks the new partition next boot. NVS is untouched so identity (NODE_ID + RECEIVER_IDENT) survives.
  • On OTA_ABORT or any local error, Update.abort() runs and the radio switches back to the standard 250 kbps so the receiver can resume normal polling without a reboot.
  • While the OTA state machine is active, runPlayLoop / animation / status-LED updates are suspended; the status strip shows a slow dim-white breathe so the operator can see the unit is being reflashed. We keep refreshing the ACK payload on every chunk so the dongle gets up-to-date bytesReceived / lastChunk / state / errorCode for progress reporting up to the host.

Upgrade notes

  • Mandatory upgrade if you want OTA. v15 receivers can be reflashed over the air by any v10+ dongle. Older receivers must be flashed via USB.
  • No breaking wire-protocol changes for normal operation. v15 still talks the same baseline ACK-payload protocol introduced in v9.

How to flash

Clone this wiki locally