From ec478c30edf9df5e9cf93c555722b3ddbcd2731e Mon Sep 17 00:00:00 2001 From: mikecarper Date: Sat, 24 Oct 2026 13:58:25 -0700 Subject: [PATCH] Publish 1.18.0.1 release catalogs and bootloader picker choices --- RELEASE.md | 23 +- docs/_data/firmware_controls.json | 10929 +++++++++-- docs/_javascript/firmware_picker.js | 28 +- docs/firmware_picker.md | 19 +- docs/index.md | 8 +- docs/old-releases/index.md | 2 +- docs/ota_nrf52_bootloader_update.md | 6 +- docs/releases/1.18.0.1.md | 106 + mesh-america/README.md | 8 +- ...mind-cascade-logging-v1.16.0-provider.json | 9410 +++++---- .../keymind-cascade-v1.16.0-provider.json | 9410 +++++---- mkdocs.yml | 1 + scripts/generate_mesh_america_release.py | 18 +- scripts/generate_picker_controls.py | 11 +- .../firmware_picker_1_17_1_9_controls.json | 16003 ++++++++++++++++ test/test_firmware_picker.js | 59 +- test/test_picker_controls_generator.py | 36 + 17 files changed, 37893 insertions(+), 8184 deletions(-) create mode 100644 docs/releases/1.18.0.1.md create mode 100644 test/fixtures/firmware_picker_1_17_1_9_controls.json diff --git a/RELEASE.md b/RELEASE.md index 87f6338a0..09e74dd38 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,24 +1,25 @@ # Releasing Firmware -For 1.17.1.9 and later, build the complete qualified local release from a +For 1.18.0.1, build the complete qualified local release from a clean, committed checkout. The builder runs one PlatformIO process at a time: ```bash python3 scripts/build_local_release.py \ - --firmware-version v1.17.1.9-halo-keymind-cascade-dev --pio-jobs 4 --resume + --firmware-version v1.18.0.1-halo-keymind-cascade-dev --pio-jobs 8 --resume ``` Package its completed directory for stable publication: ```bash python3 scripts/package_cascade_release.py \ - --input .releases/v1.17.1.9-halo-keymind-cascade-dev-SOURCE8 \ + --input .releases/v1.18.0.1-halo-keymind-cascade-dev-SOURCE8 \ --output /path/to/publication-stage --local-release --stable \ - --version 1.17.1.9 --commit FULL_SOURCE_COMMIT + --version 1.18.0.1 --commit FULL_SOURCE_COMMIT ``` The packager rechecks the local checksum inventory, qualified firmware, -full/reduced nRF52 pairs, and every exact ESP32 migration package. It keeps +Full/Reduced nRF52 pairs, separate exact-board OTAFIX 2.4.12 embedded variants, +standalone bootloader files, and every exact ESP32 migration package. It keeps migration-only application identities inside their migration ZIPs. It does not upload anything. Review `release-plan.json`, generate the picker controls as described in [the picker guide](docs/firmware_picker.md), and generate @@ -39,10 +40,12 @@ names, sizes and checksums before switching the catalogs. Regenerate the downloadable picker from the same family and update its checksum on every page. Documentation-only follow-up commits do not move firmware tags. -Include the [1.17.1.9 release notes](docs/releases/1.17.1.9.md) and -[1.17.1.8 WiFi upgrade guide](docs/upgrading_1.17.1.8_to_1.17.1.9.md) in the -publication review. Replace the release notes' final package-validation gate -with the completed inventory only after packaging passes. Keep the firmware +Include the [1.18.0.1 release notes](docs/releases/1.18.0.1.md) and +[embedded bootloader guide](docs/nrf52_embedded_bootloader.md) in the +publication review. The historical +[1.17.1.8 WiFi upgrade guide](docs/upgrading_1.17.1.8_to_1.17.1.9.md) retains +its measured starting-version limits. Record the completed inventory only +after packaging passes. Keep the firmware source separate from a later documentation-only commit, and retain the measured hardware scope and old-updater completion limitation. @@ -72,6 +75,6 @@ The current trigger explicitly excludes `repeater-room-*`. Use role-specific introductions for Companion, Repeater/Room Server, Sensor, LoRa OTA Repeater, and expanded Full infrastructure pages. Link the exact -board/storage [OTAFIX 2.4.6 release](https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/0.11.0-OTAFIX2.4.6) +board/storage [OTAFIX 2.4.12 release](https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.12) where nRF52 bootloader requirements apply. Later documentation commits can be linked from release notes without moving the firmware tag or rebuilding assets. diff --git a/docs/_data/firmware_controls.json b/docs/_data/firmware_controls.json index 53ed9a513..7698116e7 100644 --- a/docs/_data/firmware_controls.json +++ b/docs/_data/firmware_controls.json @@ -1,5 +1,5 @@ { - "familyTag": "v1.17.1.9-halo-keymind-cascade-dev-88c85108", + "familyTag": "v1.18.0.1-halo-keymind-cascade-dev-03214a16", "partitionMigrations": { "Ebyte_EoRa-S3_Repeater": "ebyte-eora-s3-repeater", "Ebyte_EoRa-S3_room_server": "ebyte-eora-s3-room-server", @@ -112,7 +112,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -138,7 +138,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -163,7 +163,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -190,9 +190,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -220,7 +220,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -260,7 +260,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_30S_Mesh_Kit_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 549804, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_30S_Mesh_Kit_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521828, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -300,7 +406,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -340,7 +446,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_30S_Mesh_Kit_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 504552, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_30S_Mesh_Kit_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 476612, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -380,7 +592,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -420,7 +632,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_Mesh_EVB_Pro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 517936, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_Mesh_EVB_Pro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 489504, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -460,7 +778,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -500,7 +818,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_Mesh_EVB_Pro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 472924, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_Mesh_EVB_Pro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 444512, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -538,9 +962,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -568,7 +992,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -608,7 +1032,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_Mesh_Tracker_Pro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 531224, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "GAT562_Mesh_Tracker_Pro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 503112, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -648,7 +1178,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -688,7 +1218,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_Mesh_Tracker_Pro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 486084, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "GAT562_Mesh_Tracker_Pro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 457832, + "asset_sha256": "86490cbca323a8b81fc8490f9a43fd06db4c776bac6aa0bda91ee807cf801c60", + "automatic_delay_seconds": 70, + "candidate_sha256": "5c4b0c5a83495d28b9837708f475d69fd5af9d087954803eeb3f36fe01cc426f", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "gat562", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -726,9 +1362,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -753,7 +1389,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -779,9 +1415,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -807,9 +1443,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -835,9 +1471,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts and 224 queued messages; all Full transports are retained. Export contacts before updating if you have more than 100; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -860,7 +1496,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -886,7 +1522,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -912,7 +1548,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -939,7 +1575,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -967,7 +1603,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -993,7 +1629,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1020,7 +1656,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1048,7 +1684,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1074,7 +1710,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1101,7 +1737,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1129,7 +1765,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1155,7 +1791,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1182,12 +1818,14 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "snmp": true, @@ -1210,7 +1848,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1236,7 +1874,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1262,9 +1900,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Wireless Paper Full capacity: 350 contacts and 40 channels. Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1291,7 +1929,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1319,7 +1957,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1336,6 +1974,9 @@ }, "Heltec_Wireless_Tracker_companion_radio_full": { "display": true, + "displayAuto": true, + "displayController": "st7735", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -1345,9 +1986,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 150 contacts and 256 queued messages; all Full transports are retained. Export contacts before updating if you have more than 150; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1363,6 +2004,9 @@ }, "Heltec_Wireless_Tracker_repeater-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7735", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": false, "femTx": false, @@ -1374,7 +2018,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1391,6 +2035,9 @@ }, "Heltec_Wireless_Tracker_room_server-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7735", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": false, "femTx": false, @@ -1402,7 +2049,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1428,9 +2075,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts and 224 queued messages; all Full transports are retained. Export contacts before updating if you have more than 100; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -1453,7 +2100,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1479,7 +2126,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -1506,9 +2153,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -1536,7 +2183,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1576,7 +2223,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1616,7 +2263,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1656,7 +2303,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1694,9 +2341,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -1717,16 +2364,18 @@ "femTx": false, "gps": true, "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1759,16 +2408,132 @@ "femTx": false, "gps": true, "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t096_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 549904, + "asset_sha256": "5d7121eb3fc9b429b0bfc03a46cd39c49cea99a523ef252fca76fbe83ae9c083", + "automatic_delay_seconds": 70, + "candidate_sha256": "35104826d134e46a5c3728088d58cc84c2fb03709c9910b9c51aafdbb8a3af19", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t096", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": true, + "femTx": false, + "gps": true, + "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t096_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521732, + "asset_sha256": "5d7121eb3fc9b429b0bfc03a46cd39c49cea99a523ef252fca76fbe83ae9c083", + "automatic_delay_seconds": 70, + "candidate_sha256": "35104826d134e46a5c3728088d58cc84c2fb03709c9910b9c51aafdbb8a3af19", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t096", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": true, + "femTx": false, + "gps": true, + "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1808,7 +2573,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1848,7 +2613,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t096_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 492472, + "asset_sha256": "5d7121eb3fc9b429b0bfc03a46cd39c49cea99a523ef252fca76fbe83ae9c083", + "automatic_delay_seconds": 70, + "candidate_sha256": "35104826d134e46a5c3728088d58cc84c2fb03709c9910b9c51aafdbb8a3af19", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t096", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": true, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t096_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 464364, + "asset_sha256": "5d7121eb3fc9b429b0bfc03a46cd39c49cea99a523ef252fca76fbe83ae9c083", + "automatic_delay_seconds": 70, + "candidate_sha256": "35104826d134e46a5c3728088d58cc84c2fb03709c9910b9c51aafdbb8a3af19", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t096", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": true, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1888,7 +2759,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1928,7 +2799,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -1957,6 +2828,9 @@ "Heltec_t114_companion_radio_full": { "dedicatedUsbLogging": true, "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -1966,9 +2840,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -1984,6 +2858,9 @@ }, "Heltec_t114_repeater_lora_ota_no_external_sensors-full": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -1993,10 +2870,12 @@ "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2024,6 +2903,9 @@ }, "Heltec_t114_repeater_lora_ota_no_external_sensors-reduced": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -2033,10 +2915,128 @@ "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t114_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 549572, + "asset_sha256": "138c69fe816c794f1effde6ddcee768dae4aa0e3bfeff90e3635ac3a182a3f0a", + "automatic_delay_seconds": 70, + "candidate_sha256": "fbc4532ada6e6694d3a9d8b8aa1e5967bf6c9aa97ed0f41da439c25beab1bea1", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t114", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t114_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521440, + "asset_sha256": "138c69fe816c794f1effde6ddcee768dae4aa0e3bfeff90e3635ac3a182a3f0a", + "automatic_delay_seconds": 70, + "candidate_sha256": "fbc4532ada6e6694d3a9d8b8aa1e5967bf6c9aa97ed0f41da439c25beab1bea1", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t114", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2064,6 +3064,9 @@ }, "Heltec_t114_room_server_lora_ota_no_external_sensors-full": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -2076,7 +3079,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2104,6 +3107,9 @@ }, "Heltec_t114_room_server_lora_ota_no_external_sensors-reduced": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -2116,7 +3122,119 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t114_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 492812, + "asset_sha256": "138c69fe816c794f1effde6ddcee768dae4aa0e3bfeff90e3635ac3a182a3f0a", + "automatic_delay_seconds": 70, + "candidate_sha256": "fbc4532ada6e6694d3a9d8b8aa1e5967bf6c9aa97ed0f41da439c25beab1bea1", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t114", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t114_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 464472, + "asset_sha256": "138c69fe816c794f1effde6ddcee768dae4aa0e3bfeff90e3635ac3a182a3f0a", + "automatic_delay_seconds": 70, + "candidate_sha256": "fbc4532ada6e6694d3a9d8b8aa1e5967bf6c9aa97ed0f41da439c25beab1bea1", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t114", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2144,6 +3262,9 @@ }, "Heltec_t114_sensor_lora_ota_no_external_sensors-full": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -2156,7 +3277,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2184,6 +3305,9 @@ }, "Heltec_t114_sensor_lora_ota_no_external_sensors-reduced": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -2196,195 +3320,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - }, - "Heltec_t114_without_display_companion_radio_full": { - "dedicatedUsbLogging": true, - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-source", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "bluetooth" - ], - "webconfig": false - }, - "Heltec_t114_without_display_repeater_lora_ota_no_external_sensors-full": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": true, - "rxgain": true, - "rxps": true, - "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash_and_retained_ram" - } - }, - "webconfig": false - }, - "Heltec_t114_without_display_repeater_lora_ota_no_external_sensors-reduced": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": true, - "rxgain": true, - "rxps": true, - "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash_and_retained_ram" - } - }, - "webconfig": false - }, - "Heltec_t114_without_display_room_server_lora_ota_no_external_sensors-full": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - }, - "Heltec_t114_without_display_room_server_lora_ota_no_external_sensors-reduced": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2422,9 +3358,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -2445,7 +3381,7 @@ "femTx": false, "gps": true, "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2454,7 +3390,7 @@ "rxgain": false, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2487,7 +3423,7 @@ "femTx": false, "gps": true, "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2496,7 +3432,117 @@ "rxgain": false, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t1_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 536028, + "asset_sha256": "ae6904dac781d1bea7fe0547abab3e95ea116114d3c57645084ef6ca91bbc444", + "automatic_delay_seconds": 70, + "candidate_sha256": "28054742498dbef489423440b73b56e7c6c5f09d1576480143be3f719a70b314", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Heltec_t1_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 507988, + "asset_sha256": "ae6904dac781d1bea7fe0547abab3e95ea116114d3c57645084ef6ca91bbc444", + "automatic_delay_seconds": 70, + "candidate_sha256": "28054742498dbef489423440b73b56e7c6c5f09d1576480143be3f719a70b314", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "memoryNote": "Flood rules: 4 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2536,7 +3582,7 @@ "rxgain": false, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2576,7 +3622,113 @@ "rxgain": false, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t1_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 490952, + "asset_sha256": "ae6904dac781d1bea7fe0547abab3e95ea116114d3c57645084ef6ca91bbc444", + "automatic_delay_seconds": 70, + "candidate_sha256": "28054742498dbef489423440b73b56e7c6c5f09d1576480143be3f719a70b314", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Heltec_t1_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 462692, + "asset_sha256": "ae6904dac781d1bea7fe0547abab3e95ea116114d3c57645084ef6ca91bbc444", + "automatic_delay_seconds": 70, + "candidate_sha256": "28054742498dbef489423440b73b56e7c6c5f09d1576480143be3f719a70b314", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_t1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2614,9 +3766,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -2636,6 +3788,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2644,7 +3802,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2676,6 +3834,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2684,7 +3848,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2716,6 +3880,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2724,7 +3894,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2757,6 +3927,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -2765,7 +3941,127 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_sd" + } + }, + "webconfig": false + }, + "Heltec_tower_v2_sdcard_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 523692, + "asset_sha256": "1b8beb90f26fb331e89a3f7ad4d07df130126fcef558031755490172dd94f6ea", + "automatic_delay_seconds": 70, + "candidate_sha256": "c9479891c5d0446d9a86bf2e7af03fdf0ad6032312395f48b2340ab7fe4b22ed", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_tower_v2_sdcard", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_sd" + } + }, + "webconfig": false + }, + "Heltec_tower_v2_sdcard_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 523692, + "asset_sha256": "1b8beb90f26fb331e89a3f7ad4d07df130126fcef558031755490172dd94f6ea", + "automatic_delay_seconds": 70, + "candidate_sha256": "c9479891c5d0446d9a86bf2e7af03fdf0ad6032312395f48b2340ab7fe4b22ed", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_tower_v2_sdcard", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -2803,9 +4099,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts, 8 channels and 16 queued messages. Export contacts and channels before updating if they exceed these limits; extra entries may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -2830,9 +4126,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -2858,7 +4154,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -2886,9 +4182,9 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts and 256 queued messages; all Full transports are retained. Export contacts before updating if you have more than 100; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -2915,12 +4211,14 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "snmp": true, @@ -2943,7 +4241,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -2969,7 +4267,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -2996,9 +4294,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -3026,7 +4324,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3066,7 +4364,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "KeepteenLT1_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 499004, + "asset_sha256": "4d1f29efaf156e388262a1a603ea72e4ee98ff7547e26b71cb0a93ad732864b2", + "automatic_delay_seconds": 70, + "candidate_sha256": "db95d6aef9fac82270a6aa64d21c226bc840487412b4789d88592d6884843dba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "keepteen_lt1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "KeepteenLT1_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 499004, + "asset_sha256": "4d1f29efaf156e388262a1a603ea72e4ee98ff7547e26b71cb0a93ad732864b2", + "automatic_delay_seconds": 70, + "candidate_sha256": "db95d6aef9fac82270a6aa64d21c226bc840487412b4789d88592d6884843dba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "keepteen_lt1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3106,7 +4510,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3146,7 +4550,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "KeepteenLT1_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 453724, + "asset_sha256": "4d1f29efaf156e388262a1a603ea72e4ee98ff7547e26b71cb0a93ad732864b2", + "automatic_delay_seconds": 70, + "candidate_sha256": "db95d6aef9fac82270a6aa64d21c226bc840487412b4789d88592d6884843dba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "keepteen_lt1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "KeepteenLT1_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 453724, + "asset_sha256": "4d1f29efaf156e388262a1a603ea72e4ee98ff7547e26b71cb0a93ad732864b2", + "automatic_delay_seconds": 70, + "candidate_sha256": "db95d6aef9fac82270a6aa64d21c226bc840487412b4789d88592d6884843dba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "keepteen_lt1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3175,6 +4685,9 @@ "LilyGo_T-Echo-Lite_companion_radio_full": { "dedicatedUsbLogging": true, "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3184,9 +4697,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -3200,36 +4713,11 @@ ], "webconfig": false }, - "LilyGo_T-Echo-Lite_non_shell_companion_radio_full": { - "dedicatedUsbLogging": true, - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-source", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "bluetooth" - ], - "webconfig": false - }, - "LilyGo_T-Echo-Lite_repeater_lora_ota_no_external_sensors-full": { + "LilyGo_T-Echo-Lite_repeater_lora_ota-full": { "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3242,7 +4730,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3258,18 +4746,22 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "LilyGo_T-Echo-Lite_repeater_lora_ota_no_external_sensors-reduced": { + "LilyGo_T-Echo-Lite_repeater_lora_ota-reduced": { "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3282,7 +4774,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3298,18 +4790,35 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "LilyGo_T-Echo-Lite_room_server_lora_ota_no_external_sensors-full": { + "LilyGo_T-Echo-Lite_repeater_lora_ota-with-bootloader-2.4.12-full": { "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 510320, + "asset_sha256": "cde601f61d858116ff591488e1856db747a77cdc8e3c3025e588cb79463ac440", + "automatic_delay_seconds": 70, + "candidate_sha256": "c912d45acc545b224a0462e9eb1874f72543102c2fce8d203f07f036e36d6eba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo_lite", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3322,7 +4831,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3338,18 +4847,35 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "LilyGo_T-Echo-Lite_room_server_lora_ota_no_external_sensors-reduced": { + "LilyGo_T-Echo-Lite_repeater_lora_ota-with-bootloader-2.4.12-reduced": { "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 510320, + "asset_sha256": "cde601f61d858116ff591488e1856db747a77cdc8e3c3025e588cb79463ac440", + "automatic_delay_seconds": 70, + "candidate_sha256": "c912d45acc545b224a0462e9eb1874f72543102c2fce8d203f07f036e36d6eba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo_lite", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3362,7 +4888,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3378,12 +4904,215 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo-Lite_room_server_lora_ota-full": { + "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo-Lite_room_server_lora_ota-reduced": { + "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo-Lite_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 468560, + "asset_sha256": "cde601f61d858116ff591488e1856db747a77cdc8e3c3025e588cb79463ac440", + "automatic_delay_seconds": 70, + "candidate_sha256": "c912d45acc545b224a0462e9eb1874f72543102c2fce8d203f07f036e36d6eba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo_lite", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo-Lite_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "displayAuto": true, + "displayController": "ssd1681", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 468560, + "asset_sha256": "cde601f61d858116ff591488e1856db747a77cdc8e3c3025e588cb79463ac440", + "automatic_delay_seconds": 70, + "candidate_sha256": "c912d45acc545b224a0462e9eb1874f72543102c2fce8d203f07f036e36d6eba", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo_lite", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -3400,9 +5129,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -3430,7 +5159,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3470,7 +5199,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3510,7 +5239,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3550,7 +5279,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3588,9 +5317,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -3618,7 +5347,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3659,7 +5388,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3686,7 +5415,115 @@ }, "webconfig": false }, - "LilyGo_T-Echo_repeater_lora_ota_no_external_sensors-full": { + "LilyGo_T-Echo_repeater-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521568, + "asset_sha256": "55d935ce7fb4d7c3944f93b38240f311255d6a0c8560b0783d7d0121e72098ac", + "automatic_delay_seconds": 70, + "candidate_sha256": "f13367a9d0321aeaa21057d953bf7f03d56532640428104f414bbf48f52f5f94", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo_repeater-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 514596, + "asset_sha256": "55d935ce7fb4d7c3944f93b38240f311255d6a0c8560b0783d7d0121e72098ac", + "automatic_delay_seconds": 70, + "candidate_sha256": "f13367a9d0321aeaa21057d953bf7f03d56532640428104f414bbf48f52f5f94", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "LilyGo_T-Echo_room_server_lora_ota-full": { "display": true, "espnowBridge": false, "femRx": false, @@ -3700,7 +5537,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3727,7 +5564,7 @@ }, "webconfig": false }, - "LilyGo_T-Echo_repeater_lora_ota_no_external_sensors-reduced": { + "LilyGo_T-Echo_room_server_lora_ota-reduced": { "display": true, "espnowBridge": false, "femRx": false, @@ -3741,7 +5578,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3768,8 +5605,21 @@ }, "webconfig": false }, - "LilyGo_T-Echo_room_server_lora_ota_no_external_sensors-full": { + "LilyGo_T-Echo_room_server_lora_ota-with-bootloader-2.4.12-full": { "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 474944, + "asset_sha256": "55d935ce7fb4d7c3944f93b38240f311255d6a0c8560b0783d7d0121e72098ac", + "automatic_delay_seconds": 70, + "candidate_sha256": "f13367a9d0321aeaa21057d953bf7f03d56532640428104f414bbf48f52f5f94", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3782,7 +5632,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3798,18 +5648,32 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "LilyGo_T-Echo_room_server_lora_ota_no_external_sensors-reduced": { + "LilyGo_T-Echo_room_server_lora_ota-with-bootloader-2.4.12-reduced": { "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 468020, + "asset_sha256": "55d935ce7fb4d7c3944f93b38240f311255d6a0c8560b0783d7d0121e72098ac", + "automatic_delay_seconds": 70, + "candidate_sha256": "f13367a9d0321aeaa21057d953bf7f03d56532640428104f414bbf48f52f5f94", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "lilygo_techo", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -3822,7 +5686,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -3838,12 +5702,13 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false @@ -3859,7 +5724,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -3884,7 +5749,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -3912,7 +5777,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -3938,7 +5803,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -3963,7 +5828,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -3991,7 +5856,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4017,7 +5882,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4042,7 +5907,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4070,7 +5935,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4096,7 +5961,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4121,7 +5986,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4147,7 +6012,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4174,7 +6039,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4202,7 +6067,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4228,9 +6093,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts, 8 channels and 16 queued messages. Export contacts and channels before updating if they exceed these limits; extra entries may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4253,12 +6118,14 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": false, "rxps": false, "snmp": false, @@ -4281,9 +6148,9 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4310,7 +6177,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4336,9 +6203,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -4366,7 +6233,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4406,7 +6273,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4443,7 +6310,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4466,7 +6333,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4492,7 +6359,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4518,7 +6385,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4541,7 +6408,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4566,7 +6433,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4591,7 +6458,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -4616,12 +6483,14 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "snmp": false, @@ -4642,7 +6511,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4668,7 +6537,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -4695,9 +6564,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -4725,7 +6594,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4765,7 +6634,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4805,7 +6674,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4845,7 +6714,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4883,9 +6752,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -4913,7 +6782,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4953,7 +6822,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Mesh_pocket_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 494944, + "asset_sha256": "65f4a62e02027f7852a04dcdd7624f6be467ca3fc4073157201043fb7ceebc51", + "automatic_delay_seconds": 70, + "candidate_sha256": "d8ccc30c08c718cf21e1c9cb39b94bfa3ee7f1fc7f07106a196792cda16a5c3d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_pocket", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Mesh_pocket_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 494944, + "asset_sha256": "65f4a62e02027f7852a04dcdd7624f6be467ca3fc4073157201043fb7ceebc51", + "automatic_delay_seconds": 70, + "candidate_sha256": "d8ccc30c08c718cf21e1c9cb39b94bfa3ee7f1fc7f07106a196792cda16a5c3d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_pocket", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -4993,7 +6968,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5033,7 +7008,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Mesh_pocket_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 450448, + "asset_sha256": "65f4a62e02027f7852a04dcdd7624f6be467ca3fc4073157201043fb7ceebc51", + "automatic_delay_seconds": 70, + "candidate_sha256": "d8ccc30c08c718cf21e1c9cb39b94bfa3ee7f1fc7f07106a196792cda16a5c3d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_pocket", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Mesh_pocket_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 450448, + "asset_sha256": "65f4a62e02027f7852a04dcdd7624f6be467ca3fc4073157201043fb7ceebc51", + "automatic_delay_seconds": 70, + "candidate_sha256": "d8ccc30c08c718cf21e1c9cb39b94bfa3ee7f1fc7f07106a196792cda16a5c3d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "heltec_mesh_pocket", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5070,9 +7151,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts, 30 channels and 16 queued messages. Export contacts and channels before updating if they exceed these limits; extra entries may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -5095,9 +7176,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -5123,7 +7204,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -5149,9 +7230,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts, 30 channels and 16 queued messages. Export contacts and channels before updating if they exceed these limits; extra entries may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -5174,9 +7255,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -5202,7 +7283,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -5228,7 +7309,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -5251,7 +7332,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -5277,9 +7358,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -5305,9 +7386,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -5335,7 +7416,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5375,7 +7456,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Minewsemi_me25ls01_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 481688, + "asset_sha256": "4d7ca3a59358cfdfbddbaac2d5f7f99dae346469dfbcc9ed6dad56ca72646552", + "automatic_delay_seconds": 70, + "candidate_sha256": "52b9a146ea76bcdd16f32df7491cc9998485d684c99f864e24057ac0a2b69443", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "minewsemi_mx25le01", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "Minewsemi_me25ls01_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 470984, + "asset_sha256": "4d7ca3a59358cfdfbddbaac2d5f7f99dae346469dfbcc9ed6dad56ca72646552", + "automatic_delay_seconds": 70, + "candidate_sha256": "52b9a146ea76bcdd16f32df7491cc9998485d684c99f864e24057ac0a2b69443", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "minewsemi_mx25le01", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5415,7 +7602,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5455,7 +7642,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Minewsemi_me25ls01_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 437416, + "asset_sha256": "4d7ca3a59358cfdfbddbaac2d5f7f99dae346469dfbcc9ed6dad56ca72646552", + "automatic_delay_seconds": 70, + "candidate_sha256": "52b9a146ea76bcdd16f32df7491cc9998485d684c99f864e24057ac0a2b69443", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "minewsemi_mx25le01", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "Minewsemi_me25ls01_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 426680, + "asset_sha256": "4d7ca3a59358cfdfbddbaac2d5f7f99dae346469dfbcc9ed6dad56ca72646552", + "automatic_delay_seconds": 70, + "candidate_sha256": "52b9a146ea76bcdd16f32df7491cc9998485d684c99f864e24057ac0a2b69443", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "minewsemi_mx25le01", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5493,9 +7786,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -5523,7 +7816,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5563,7 +7856,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5603,7 +7896,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5643,7 +7936,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5670,57 +7963,8 @@ "webconfig": false }, "PicoW_companion_radio": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, - "mqtt": false, - "otaRole": "none", - "platform": "RP2040_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [], - "webconfig": false - }, - "PicoW_companion_radio_ble": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, - "mqtt": false, - "otaRole": "none", - "platform": "RP2040_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [], - "webconfig": false - }, - "PicoW_companion_radio_usb": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, - "mqtt": false, - "otaRole": "none", - "platform": "RP2040_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [], - "webconfig": false - }, - "PicoW_companion_radio_wifi": { + "combinedCompanion": true, + "combinedCompanionSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "display": false, "espnowBridge": false, "femRx": false, @@ -5749,9 +7993,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -5776,10 +8020,12 @@ "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5816,10 +8062,122 @@ "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "ProMicro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 524484, + "asset_sha256": "03bcaee48da4717afb34a4eda2f1161e694b7a974189988c142969ff042e39bb", + "automatic_delay_seconds": 70, + "candidate_sha256": "87d1be570367495956239e268a319ea80c43dcbae2f767fd2249d3290727c30c", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "promicro_nrf52840", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "ProMicro_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 511664, + "asset_sha256": "03bcaee48da4717afb34a4eda2f1161e694b7a974189988c142969ff042e39bb", + "automatic_delay_seconds": 70, + "candidate_sha256": "87d1be570367495956239e268a319ea80c43dcbae2f767fd2249d3290727c30c", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "promicro_nrf52840", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5859,7 +8217,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5899,7 +8257,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "ProMicro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 467244, + "asset_sha256": "03bcaee48da4717afb34a4eda2f1161e694b7a974189988c142969ff042e39bb", + "automatic_delay_seconds": 70, + "candidate_sha256": "87d1be570367495956239e268a319ea80c43dcbae2f767fd2249d3290727c30c", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "promicro_nrf52840", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "ProMicro_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 454536, + "asset_sha256": "03bcaee48da4717afb34a4eda2f1161e694b7a974189988c142969ff042e39bb", + "automatic_delay_seconds": 70, + "candidate_sha256": "87d1be570367495956239e268a319ea80c43dcbae2f767fd2249d3290727c30c", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "promicro_nrf52840", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5939,7 +8403,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -5979,7 +8443,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6017,9 +8481,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -6047,7 +8511,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6087,7 +8551,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "R1Neo_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 523424, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "R1Neo_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 495216, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6127,7 +8697,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6167,7 +8737,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "R1Neo_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 478508, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "R1Neo_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 450000, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6207,7 +8883,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6247,7 +8923,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6301,7 +8977,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -6328,12 +9004,14 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "snmp": true, @@ -6356,7 +9034,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -6382,7 +9060,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -6409,9 +9087,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -6425,12 +9103,204 @@ ], "webconfig": false }, + "RAK_3401_repeater_bridge_rs232_serial1-full": { + "display": true, + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_bridge_rs232_serial1-reduced": { + "display": true, + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_bridge_rs232_serial1-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 563648, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_bridge_rs232_serial1-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 513752, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, "RAK_3401_repeater_lora_ota_no_external_sensors-full": { "display": true, "espnowBridge": false, "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6439,7 +9309,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6471,6 +9341,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6479,7 +9355,125 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 572608, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 523096, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6519,7 +9513,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6560,7 +9554,115 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_rak13302_w25q16_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 576840, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_rak13302_w25q16_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 527248, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6593,8 +9695,14 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Flood rules: 47 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6603,7 +9711,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6638,8 +9746,14 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Flood rules: 47 entries; the complete rule engine is retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6648,7 +9762,135 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_unified_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 582096, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "memoryNote": "Flood rules: 47 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_3401_repeater_unified_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 532456, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "memoryNote": "Flood rules: 47 entries; the complete rule engine is retained.", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6683,6 +9925,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6691,7 +9939,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6723,6 +9971,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6731,7 +9985,125 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_3401_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 535692, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_3401_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 485712, + "asset_sha256": "5b2d27a7ffb3efcdd2b3e7435f7d79f5c5088817d024de3d952d7ea3a27002c9", + "automatic_delay_seconds": 70, + "candidate_sha256": "57df468b525fe6ba3c1f6c756b9a85ad3875e845f080671201411e8044da05c6", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak3401_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6763,6 +10135,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6771,7 +10149,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6803,6 +10181,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -6811,7 +10195,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6866,9 +10250,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -6896,7 +10280,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6936,7 +10320,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_bridge_rs232_serial1_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 510932, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_bridge_rs232_serial1_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 510932, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -6976,7 +10466,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7016,7 +10506,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_bridge_rs232_serial2_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 539520, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_bridge_rs232_serial2_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 539520, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7056,7 +10652,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7096,7 +10692,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_ethernet-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 591716, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_ethernet-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 540840, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7128,15 +10830,23 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7144,7 +10854,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7152,12 +10862,15 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash_and_retained_ram" + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7168,15 +10881,23 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7184,7 +10905,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7192,12 +10913,143 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash_and_retained_ram" + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 623564, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 573296, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7216,7 +11068,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7257,7 +11109,115 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_rak15001_slot_c_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 575940, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_rak15001_slot_c_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 525784, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7290,15 +11250,23 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7333,15 +11301,151 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_unified_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 623564, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_unified_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 573296, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7384,7 +11488,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7425,7 +11529,115 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_w25q16_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 576020, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_repeater_w25q16_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 525784, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7466,7 +11678,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7474,7 +11686,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7482,12 +11694,15 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7506,7 +11721,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7514,7 +11729,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7522,12 +11737,127 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_room_server_ethernet_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 585124, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_room_server_ethernet_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 534440, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7538,6 +11868,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -7546,7 +11882,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7554,7 +11890,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7562,12 +11898,15 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7578,6 +11917,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -7586,7 +11931,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7594,7 +11939,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7602,12 +11947,139 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 569744, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" + } + }, + "webconfig": false + }, + "RAK_4631_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 519300, + "asset_sha256": "0a7d556cbe68f9698c20ce3e892d1f39a6fc08f1cfb178df7128b340f9f8dc35", + "automatic_delay_seconds": 70, + "candidate_sha256": "ec860fb46697ac4b458f4b961dec69b428380be1ce31a226cff60298f3281545", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wiscore_rak4631_auto", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7618,6 +12090,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -7626,7 +12104,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7634,7 +12112,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7642,12 +12120,15 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7658,6 +12139,12 @@ "femRx": false, "femTx": false, "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -7666,7 +12153,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7674,7 +12161,7 @@ ], "updateRequirements": { "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader": "Matching normal RAK3401 or RAK4631 adaptive OTAFIX bootloader, or the exact legacy storage profile", "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", "notes": [ "Use a destination-specific .mota package matching the board, target, and storage layout.", @@ -7682,12 +12169,15 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.", + "External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.", + "OTAFIX 2.4.11 provides normal RAK3401/RAK4631 *_auto bootloaders with standard board identities and internal signed bootloader-update staging. Historical *_AUTO_DFU or dedicated external identities need the documented local identity-matching migration, not a cross-profile LoRa update." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "adaptive_internal_or_external_qspi" } }, "webconfig": false @@ -7704,9 +12194,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -7734,7 +12224,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7774,7 +12264,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_WisMesh_Tag_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 520268, + "asset_sha256": "48e07eaac9926f0d9d569f484d35f07eca857dd76d2b688da2fe7e2bb69ed71d", + "automatic_delay_seconds": 70, + "candidate_sha256": "dd57a36dd601434202b660a8c9c765510516e63b16250ff79e96276d91e46684", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wismesh_tag", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "RAK_WisMesh_Tag_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 492012, + "asset_sha256": "48e07eaac9926f0d9d569f484d35f07eca857dd76d2b688da2fe7e2bb69ed71d", + "automatic_delay_seconds": 70, + "candidate_sha256": "dd57a36dd601434202b660a8c9c765510516e63b16250ff79e96276d91e46684", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wismesh_tag", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7814,7 +12410,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7854,7 +12450,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_WisMesh_Tag_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 475288, + "asset_sha256": "48e07eaac9926f0d9d569f484d35f07eca857dd76d2b688da2fe7e2bb69ed71d", + "automatic_delay_seconds": 70, + "candidate_sha256": "dd57a36dd601434202b660a8c9c765510516e63b16250ff79e96276d91e46684", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wismesh_tag", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "RAK_WisMesh_Tag_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 446812, + "asset_sha256": "48e07eaac9926f0d9d569f484d35f07eca857dd76d2b688da2fe7e2bb69ed71d", + "automatic_delay_seconds": 70, + "candidate_sha256": "dd57a36dd601434202b660a8c9c765510516e63b16250ff79e96276d91e46684", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wismesh_tag", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7894,7 +12596,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7934,7 +12636,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -7971,7 +12673,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -7996,9 +12698,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Display renders at 320x320 and scales to the 480x480 panel to preserve internal RAM. All Full transports, 350 contacts, 512 queued messages and full-length message previews are retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8012,6 +12714,32 @@ ], "webconfig": true }, + "SenseCapIndicator-LoRa-N16R2_repeater-full-logging": { + "display": true, + "espnowBridge": true, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, "SenseCapIndicator-LoRa_companion_radio_full": { "display": true, "espnowBridge": false, @@ -8023,9 +12751,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Display renders at 320x320 and scales to the 480x480 panel to preserve internal RAM. All Full transports, 350 contacts, 512 queued messages and full-length message previews are retained.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8039,6 +12767,32 @@ ], "webconfig": true }, + "SenseCapIndicator-LoRa_repeater-full-logging": { + "display": true, + "espnowBridge": true, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, "SenseCap_Solar_companion_radio_full": { "dedicatedUsbLogging": true, "display": false, @@ -8051,9 +12805,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -8081,7 +12835,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8122,7 +12876,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8149,8 +12903,21 @@ }, "webconfig": false }, - "SenseCap_Solar_repeater_lora_ota_no_external_sensors-full": { + "SenseCap_Solar_repeater-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521236, + "asset_sha256": "694fca8e68fb695ac1a5ef701baf26e8d52a7eb188f886496dcb6bc8b6fdc7cb", + "automatic_delay_seconds": 70, + "candidate_sha256": "d33c035c783e555049d2b41fe2f12367c6a87ee30b041c627d19088a2a6d8855", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "sensecap_solar_p1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -8163,7 +12930,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8190,8 +12957,21 @@ }, "webconfig": false }, - "SenseCap_Solar_repeater_lora_ota_no_external_sensors-reduced": { + "SenseCap_Solar_repeater-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 492700, + "asset_sha256": "694fca8e68fb695ac1a5ef701baf26e8d52a7eb188f886496dcb6bc8b6fdc7cb", + "automatic_delay_seconds": 70, + "candidate_sha256": "d33c035c783e555049d2b41fe2f12367c6a87ee30b041c627d19088a2a6d8855", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "sensecap_solar_p1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -8204,7 +12984,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8231,7 +13011,7 @@ }, "webconfig": false }, - "SenseCap_Solar_room_server_lora_ota_no_external_sensors-full": { + "SenseCap_Solar_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -8245,7 +13025,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8261,17 +13041,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "SenseCap_Solar_room_server_lora_ota_no_external_sensors-reduced": { + "SenseCap_Solar_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -8285,7 +13066,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8301,12 +13082,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "SenseCap_Solar_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 463188, + "asset_sha256": "694fca8e68fb695ac1a5ef701baf26e8d52a7eb188f886496dcb6bc8b6fdc7cb", + "automatic_delay_seconds": 70, + "candidate_sha256": "d33c035c783e555049d2b41fe2f12367c6a87ee30b041c627d19088a2a6d8855", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "sensecap_solar_p1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "SenseCap_Solar_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 434620, + "asset_sha256": "694fca8e68fb695ac1a5ef701baf26e8d52a7eb188f886496dcb6bc8b6fdc7cb", + "automatic_delay_seconds": 70, + "candidate_sha256": "d33c035c783e555049d2b41fe2f12367c6a87ee30b041c627d19088a2a6d8855", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "sensecap_solar_p1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -8322,7 +13212,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8349,7 +13239,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8377,7 +13267,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8403,11 +13293,14 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", "primaryEspnow": false, + "radioSlotAuto": true, + "radioSlotFamily": "sx1262", + "radioSlotSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rs232": false, "rxgain": false, "rxps": true, @@ -8417,88 +13310,6 @@ ], "webconfig": true }, - "Station_G3_ESP32_r2_repeater_observer_mqtt-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": true, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": false, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "Station_G3_ESP32_r2_room_server_observer_mqtt-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": true, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": false, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "Station_G3_ESP32_r2_sensor-full-logging": { - "display": true, - "espnowBridge": false, - "femRx": true, - "femTx": true, - "gps": true, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": false, - "rxps": true, - "snmp": false, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": false - }, "Station_G3_ESP32_repeater-full-usb-wifi": { "display": true, "espnowBridge": true, @@ -8512,11 +13323,14 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, + "radioSlotAuto": true, + "radioSlotFamily": "sx1262", + "radioSlotSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rs232": false, "rxgain": false, "rxps": true, @@ -8540,11 +13354,14 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, + "radioSlotAuto": true, + "radioSlotFamily": "sx1262", + "radioSlotSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rs232": false, "rxgain": false, "rxps": true, @@ -8566,11 +13383,14 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, + "radioSlotAuto": true, + "radioSlotFamily": "sx1262", + "radioSlotSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rs232": false, "rxgain": false, "rxps": true, @@ -8592,7 +13412,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8619,7 +13439,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8647,7 +13467,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8673,7 +13493,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8698,9 +13518,9 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Flood rules: 31 entries; the complete rule engine is retained. Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8728,7 +13548,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8754,7 +13574,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -8779,9 +13599,9 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Flood rules: 31 entries; the complete rule engine is retained. Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8809,7 +13629,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8835,7 +13655,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8861,7 +13681,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -8888,9 +13708,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -8918,7 +13738,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8959,7 +13779,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -8986,7 +13806,115 @@ }, "webconfig": false }, - "ThinkNode_M1_repeater_lora_ota_no_external_sensors-full": { + "ThinkNode_M1_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 487064, + "asset_sha256": "39758d00c22b010f64fb7c757ac0a600cce5fb2cfb7024879eda5e6ca2a5ed7d", + "automatic_delay_seconds": 70, + "candidate_sha256": "5e47e694a01792715be9cf14909fcc992acc5e189e612fa63b59ae515b992dad", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ThinkNode_M1_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 487064, + "asset_sha256": "39758d00c22b010f64fb7c757ac0a600cce5fb2cfb7024879eda5e6ca2a5ed7d", + "automatic_delay_seconds": 70, + "candidate_sha256": "5e47e694a01792715be9cf14909fcc992acc5e189e612fa63b59ae515b992dad", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ThinkNode_M1_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -9000,7 +13928,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9027,7 +13955,7 @@ }, "webconfig": false }, - "ThinkNode_M1_repeater_lora_ota_no_external_sensors-reduced": { + "ThinkNode_M1_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -9041,7 +13969,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9068,8 +13996,21 @@ }, "webconfig": false }, - "ThinkNode_M1_room_server_lora_ota_no_external_sensors-full": { + "ThinkNode_M1_room_server_lora_ota-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 440632, + "asset_sha256": "39758d00c22b010f64fb7c757ac0a600cce5fb2cfb7024879eda5e6ca2a5ed7d", + "automatic_delay_seconds": 70, + "candidate_sha256": "5e47e694a01792715be9cf14909fcc992acc5e189e612fa63b59ae515b992dad", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -9082,7 +14023,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9098,18 +14039,32 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ThinkNode_M1_room_server_lora_ota_no_external_sensors-reduced": { + "ThinkNode_M1_room_server_lora_ota-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 440632, + "asset_sha256": "39758d00c22b010f64fb7c757ac0a600cce5fb2cfb7024879eda5e6ca2a5ed7d", + "automatic_delay_seconds": 70, + "candidate_sha256": "5e47e694a01792715be9cf14909fcc992acc5e189e612fa63b59ae515b992dad", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -9122,7 +14077,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9138,12 +14093,13 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false @@ -9159,7 +14115,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -9185,7 +14141,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -9208,7 +14164,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -9235,9 +14191,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -9265,7 +14221,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9305,7 +14261,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "ThinkNode_M3_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 481184, + "asset_sha256": "26b86db8840e1de3f309a20ccc7e18fedd820dc645c5c85669bd9e0d1c029cb6", + "automatic_delay_seconds": 70, + "candidate_sha256": "f408bc457c03067cb36ebccd7629eba7c1d1961675d594fbce9d7278cfe2f5cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m3", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "ThinkNode_M3_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 481184, + "asset_sha256": "26b86db8840e1de3f309a20ccc7e18fedd820dc645c5c85669bd9e0d1c029cb6", + "automatic_delay_seconds": 70, + "candidate_sha256": "f408bc457c03067cb36ebccd7629eba7c1d1961675d594fbce9d7278cfe2f5cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m3", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9345,7 +14407,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9385,7 +14447,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "ThinkNode_M3_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 436208, + "asset_sha256": "26b86db8840e1de3f309a20ccc7e18fedd820dc645c5c85669bd9e0d1c029cb6", + "automatic_delay_seconds": 70, + "candidate_sha256": "f408bc457c03067cb36ebccd7629eba7c1d1961675d594fbce9d7278cfe2f5cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m3", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "ThinkNode_M3_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 436208, + "asset_sha256": "26b86db8840e1de3f309a20ccc7e18fedd820dc645c5c85669bd9e0d1c029cb6", + "automatic_delay_seconds": 70, + "candidate_sha256": "f408bc457c03067cb36ebccd7629eba7c1d1961675d594fbce9d7278cfe2f5cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m3", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9423,9 +14591,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -9453,7 +14621,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9493,7 +14661,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9533,7 +14701,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9573,7 +14741,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9610,7 +14778,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -9636,7 +14804,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -9659,7 +14827,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -9686,9 +14854,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -9716,7 +14884,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9757,7 +14925,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9784,7 +14952,115 @@ }, "webconfig": false }, - "ThinkNode_M6_repeater_lora_ota_no_external_sensors-full": { + "ThinkNode_M6_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 517724, + "asset_sha256": "950475dcbf3e4985b6754737527261489d83614246f1a6ecd91f2148b135a4dc", + "automatic_delay_seconds": 70, + "candidate_sha256": "af50901bd7dc9391dbccc0da6a2bf006da808f35b38a16835938ebba7159edcf", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m6", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ThinkNode_M6_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 489140, + "asset_sha256": "950475dcbf3e4985b6754737527261489d83614246f1a6ecd91f2148b135a4dc", + "automatic_delay_seconds": 70, + "candidate_sha256": "af50901bd7dc9391dbccc0da6a2bf006da808f35b38a16835938ebba7159edcf", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m6", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ThinkNode_M6_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -9798,7 +15074,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9825,7 +15101,7 @@ }, "webconfig": false }, - "ThinkNode_M6_repeater_lora_ota_no_external_sensors-reduced": { + "ThinkNode_M6_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -9839,7 +15115,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9866,8 +15142,21 @@ }, "webconfig": false }, - "ThinkNode_M6_room_server_lora_ota_no_external_sensors-full": { + "ThinkNode_M6_room_server_lora_ota-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 471420, + "asset_sha256": "950475dcbf3e4985b6754737527261489d83614246f1a6ecd91f2148b135a4dc", + "automatic_delay_seconds": 70, + "candidate_sha256": "af50901bd7dc9391dbccc0da6a2bf006da808f35b38a16835938ebba7159edcf", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m6", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -9880,7 +15169,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9896,18 +15185,32 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ThinkNode_M6_room_server_lora_ota_no_external_sensors-reduced": { + "ThinkNode_M6_room_server_lora_ota-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 442932, + "asset_sha256": "950475dcbf3e4985b6754737527261489d83614246f1a6ecd91f2148b135a4dc", + "automatic_delay_seconds": 70, + "candidate_sha256": "af50901bd7dc9391dbccc0da6a2bf006da808f35b38a16835938ebba7159edcf", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "thinknode_m6", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -9920,7 +15223,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -9936,12 +15239,13 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false @@ -9957,7 +15261,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -9984,7 +15288,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10012,7 +15316,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10039,9 +15343,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -10069,7 +15373,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10109,7 +15413,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10149,7 +15453,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10189,7 +15493,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10226,7 +15530,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -10251,7 +15555,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10277,7 +15581,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10320,7 +15624,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -10345,7 +15649,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10360,6 +15664,85 @@ ], "webconfig": true }, + "Waveshare_S3_LR1121_companion_radio_full": { + "display": false, + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-source", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "snmp": false, + "updateMethods": [], + "webconfig": true + }, + "Waveshare_S3_LR1121_repeater_observer_mqtt-full-usb-wifi": { + "display": false, + "espnowBridge": true, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "logging.output", + "loggingModes": [ + "none", + "usb", + "wifi", + "both" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": true, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, + "Waveshare_S3_LR1121_room_server_observer_mqtt-full-usb-wifi": { + "display": false, + "espnowBridge": true, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "logging.output", + "loggingModes": [ + "none", + "usb", + "wifi", + "both" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": true, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, "WioTrackerL1-1W_companion_radio_full": { "dedicatedUsbLogging": true, "display": true, @@ -10372,9 +15755,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -10402,7 +15785,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10442,7 +15825,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "WioTrackerL1-1W_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 524092, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": true, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "WioTrackerL1-1W_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 496660, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": true, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10482,7 +15971,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10522,7 +16011,113 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "WioTrackerL1-1W_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 482348, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": true, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "WioTrackerL1-1W_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 454888, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": true, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10560,9 +16155,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -10588,9 +16183,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -10618,7 +16213,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10659,7 +16254,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10686,7 +16281,115 @@ }, "webconfig": false }, - "WioTrackerL1_repeater_lora_ota_no_external_sensors-full": { + "WioTrackerL1_repeater-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 530124, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "WioTrackerL1_repeater-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 502676, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "WioTrackerL1_room_server_lora_ota-full": { "display": true, "espnowBridge": false, "femRx": false, @@ -10700,7 +16403,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10727,7 +16430,7 @@ }, "webconfig": false }, - "WioTrackerL1_repeater_lora_ota_no_external_sensors-reduced": { + "WioTrackerL1_room_server_lora_ota-reduced": { "display": true, "espnowBridge": false, "femRx": false, @@ -10741,7 +16444,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10768,8 +16471,21 @@ }, "webconfig": false }, - "WioTrackerL1_room_server_lora_ota_no_external_sensors-full": { + "WioTrackerL1_room_server_lora_ota-with-bootloader-2.4.12-full": { "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 483468, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -10782,7 +16498,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10798,18 +16514,32 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "WioTrackerL1_room_server_lora_ota_no_external_sensors-reduced": { + "WioTrackerL1_room_server_lora_ota-with-bootloader-2.4.12-reduced": { "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 456052, + "asset_sha256": "aceae36b3b4c8fa2fa72be9a0d68d63bed53398a17ace6736e932b99b6d85b58", + "automatic_delay_seconds": 70, + "candidate_sha256": "15f66078197b10352f8217d2d5809357cd3f71341b2c3ed9e55f209ffc71d90d", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "wio_tracker_l1", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -10822,7 +16552,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -10838,16 +16568,94 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, + "Wio_Tracker_L2_companion_radio_full": { + "display": true, + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-source", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi" + ], + "webconfig": true + }, + "Wio_Tracker_L2_repeater-full-logging": { + "display": true, + "espnowBridge": true, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, + "Wio_Tracker_L2_room_server-full-logging": { + "display": true, + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, "Xiao_C3_companion_radio_full": { "display": false, "espnowBridge": false, @@ -10859,9 +16667,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts and 224 queued messages; all Full transports are retained. Export contacts before updating if you have more than 100; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -10884,7 +16692,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10910,7 +16718,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10936,7 +16744,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -10959,7 +16767,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -10985,7 +16793,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -11012,7 +16820,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11040,7 +16848,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11066,7 +16874,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11092,7 +16900,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -11119,7 +16927,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11147,7 +16955,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11173,7 +16981,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11200,9 +17008,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -11227,16 +17035,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11274,16 +17084,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11310,21 +17122,42 @@ }, "webconfig": false }, - "Xiao_nrf52_repeater_bridge_rs232-full": { + "Xiao_nrf52_repeater-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 530228, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11340,31 +17173,53 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "Xiao_nrf52_repeater_bridge_rs232-reduced": { + "Xiao_nrf52_repeater-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 501708, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11380,17 +17235,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "Xiao_nrf52_room_server_lora_ota_no_external_sensors-full": { + "Xiao_nrf52_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -11404,7 +17260,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11420,17 +17276,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "Xiao_nrf52_room_server_lora_ota_no_external_sensors-reduced": { + "Xiao_nrf52_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -11444,7 +17301,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -11460,12 +17317,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "Xiao_nrf52_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 471720, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "Xiao_nrf52_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 443328, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -11489,6 +17455,9 @@ }, "heltec_rc32_companion_radio_full": { "display": true, + "displayAuto": true, + "displayController": "nv3001b", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -11498,7 +17467,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -11514,6 +17483,9 @@ }, "heltec_rc32_repeater-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "nv3001b", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": false, "femTx": false, @@ -11525,7 +17497,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11542,6 +17514,9 @@ }, "heltec_rc32_room_server-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "nv3001b", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": false, "femTx": false, @@ -11553,7 +17528,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11570,6 +17545,9 @@ }, "heltec_rc32_sensor-full-logging": { "display": true, + "displayAuto": true, + "displayController": "nv3001b", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, @@ -11579,114 +17557,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": false - }, - "heltec_rc32_without_display_companion_radio_full": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-source", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "wifi" - ], - "webconfig": true - }, - "heltec_rc32_without_display_repeater-full-usb-wifi": { - "display": false, - "espnowBridge": true, - "femRx": false, - "femTx": false, - "gps": false, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "heltec_rc32_without_display_room_server-full-usb-wifi": { - "display": false, - "espnowBridge": true, - "femRx": false, - "femTx": false, - "gps": false, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "heltec_rc32_without_display_sensor-full-logging": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11703,6 +17574,9 @@ }, "heltec_tracker_v1_1_repeater_observer_mqtt-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7735", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": true, "femTx": false, @@ -11714,9 +17588,9 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Neighbor table: 50 entries.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11733,6 +17607,9 @@ }, "heltec_tracker_v1_1_room_server_observer_mqtt-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7735", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": true, "femTx": false, @@ -11744,7 +17621,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11770,9 +17647,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion capacity: 100 contacts and 224 queued messages; all Full transports are retained. Export contacts before updating if you have more than 100; entries beyond this limit may be unavailable or omitted by a later save.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -11799,7 +17676,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11814,6 +17691,32 @@ ], "webconfig": true }, + "heltec_tracker_v2_repeater_bridge_rs232-full-logging": { + "display": false, + "espnowBridge": true, + "femRx": true, + "femTx": false, + "gps": true, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "ESP32_PLATFORM", + "primaryEspnow": false, + "rs232": true, + "rxgain": true, + "rxps": true, + "snmp": false, + "updateMethods": [ + "wifi", + "lora" + ], + "webconfig": true + }, "heltec_tracker_v2_room_server-full-usb-wifi": { "display": true, "espnowBridge": true, @@ -11827,7 +17730,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11853,7 +17756,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -11881,7 +17784,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -11895,87 +17798,6 @@ ], "webconfig": true }, - "heltec_v4_expansionkit_repeater-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": false, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "heltec_v4_expansionkit_room_server_observer_mqtt-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": false, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "heltec_v4_expansionkit_tft_companion_radio_full_femon": { - "display": true, - "espnowBridge": false, - "femRx": true, - "femTx": false, - "gps": true, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": false, - "otaRole": "lora-source", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "wifi" - ], - "webconfig": true - }, "heltec_v4_r8_companion_radio_full": { "display": true, "espnowBridge": false, @@ -11987,7 +17809,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -12014,7 +17836,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12042,7 +17864,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12068,7 +17890,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12085,6 +17907,11 @@ }, "heltec_v4_r8_tft_companion_radio_full": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displayRotation": true, + "displayRotationSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": true, "femTx": false, @@ -12094,7 +17921,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -12108,64 +17935,13 @@ ], "webconfig": true }, - "heltec_v4_r8_tft_portrait_repeater_observer_mqtt-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": false, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, - "heltec_v4_r8_tft_portrait_room_server_observer_mqtt-full-usb-wifi": { - "display": true, - "espnowBridge": true, - "femRx": true, - "femTx": false, - "gps": true, - "loggingControl": "logging.output", - "loggingModes": [ - "none", - "usb", - "wifi", - "both" - ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", - "mqtt": true, - "otaRole": "lora-receiver", - "platform": "ESP32_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": true, - "updateMethods": [ - "wifi", - "lora" - ], - "webconfig": true - }, "heltec_v4_r8_tft_repeater-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displayRotation": true, + "displayRotationSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": true, "femTx": false, @@ -12177,7 +17953,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12194,6 +17970,11 @@ }, "heltec_v4_r8_tft_room_server-full-usb-wifi": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displayRotation": true, + "displayRotationSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": true, "femRx": true, "femTx": false, @@ -12205,7 +17986,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12222,6 +18003,11 @@ }, "heltec_v4_r8_tft_sensor-full-logging": { "display": true, + "displayAuto": true, + "displayController": "st7789", + "displayRotation": true, + "displayRotationSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": true, "femTx": false, @@ -12231,7 +18017,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12259,8 +18045,10 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, + "oledExpansionCompatible": true, + "oledExpansionCompatibleSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, @@ -12287,8 +18075,10 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, + "oledExpansionCompatible": true, + "oledExpansionCompatibleSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", "primaryEspnow": false, @@ -12313,7 +18103,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12339,7 +18129,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -12348,6 +18138,8 @@ "rxgain": true, "rxps": true, "snmp": false, + "tftExpansionCompatible": true, + "tftExpansionCompatibleSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "updateMethods": [ "wifi" ], @@ -12364,7 +18156,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12390,7 +18182,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12416,7 +18208,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -12443,9 +18235,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -12470,7 +18262,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12479,7 +18271,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12517,7 +18309,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12526,7 +18318,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12553,7 +18345,127 @@ }, "webconfig": false }, - "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_handheld_nrf_e22_30dbm_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 508320, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_handheld_nrf_e22_30dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 479832, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -12567,7 +18479,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12583,17 +18495,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -12607,7 +18520,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12623,12 +18536,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 462832, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_handheld_nrf_e22_30dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 434264, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -12645,9 +18667,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -12672,7 +18694,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12681,7 +18703,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12719,7 +18741,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12728,7 +18750,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12755,7 +18777,127 @@ }, "webconfig": false }, - "ikoka_nano_nrf_22dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_nano_nrf_22dbm_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 512932, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_22dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 484588, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_22dbm_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -12769,7 +18911,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12785,17 +18927,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_nano_nrf_22dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_nano_nrf_22dbm_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -12809,7 +18952,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12825,12 +18968,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_22dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 467524, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_22dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 438908, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -12847,9 +19099,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -12874,7 +19126,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12883,7 +19135,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12921,7 +19173,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -12930,7 +19182,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12957,7 +19209,127 @@ }, "webconfig": false }, - "ikoka_nano_nrf_30dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_nano_nrf_30dbm_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 512932, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_30dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 484588, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_30dbm_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -12971,7 +19343,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -12987,17 +19359,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_nano_nrf_30dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_nano_nrf_30dbm_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -13011,7 +19384,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13027,12 +19400,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_30dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 467524, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_30dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 438908, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -13049,9 +19531,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -13076,7 +19558,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13085,7 +19567,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13123,7 +19605,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13132,7 +19614,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13159,7 +19641,127 @@ }, "webconfig": false }, - "ikoka_nano_nrf_33dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_nano_nrf_33dbm_repeater-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 512932, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_33dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 484588, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_33dbm_room_server_lora_ota-full": { "display": false, "espnowBridge": false, "femRx": false, @@ -13173,7 +19775,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13189,17 +19791,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_nano_nrf_33dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_nano_nrf_33dbm_room_server_lora_ota-reduced": { "display": false, "espnowBridge": false, "femRx": false, @@ -13213,7 +19816,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13229,12 +19832,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_33dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 467524, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_nano_nrf_33dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 438908, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -13251,9 +19963,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -13278,7 +19990,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13287,7 +19999,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13325,7 +20037,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13334,7 +20046,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13361,7 +20073,127 @@ }, "webconfig": false }, - "ikoka_stick_nrf_22dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_stick_nrf_22dbm_repeater-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521736, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_22dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 493296, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_22dbm_room_server_lora_ota-full": { "display": true, "espnowBridge": false, "femRx": false, @@ -13375,7 +20207,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13391,17 +20223,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_stick_nrf_22dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_stick_nrf_22dbm_room_server_lora_ota-reduced": { "display": true, "espnowBridge": false, "femRx": false, @@ -13415,7 +20248,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13431,12 +20264,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_22dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 476216, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_22dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 447552, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -13453,9 +20395,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -13480,7 +20422,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13489,7 +20431,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13527,7 +20469,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13536,7 +20478,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13563,7 +20505,127 @@ }, "webconfig": false }, - "ikoka_stick_nrf_30dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_stick_nrf_30dbm_repeater-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521736, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_30dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 493296, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_30dbm_room_server_lora_ota-full": { "display": true, "espnowBridge": false, "femRx": false, @@ -13577,7 +20639,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13593,17 +20655,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_stick_nrf_30dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_stick_nrf_30dbm_room_server_lora_ota-reduced": { "display": true, "espnowBridge": false, "femRx": false, @@ -13617,7 +20680,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13633,12 +20696,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_30dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 476216, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_30dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 447552, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -13655,9 +20827,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -13682,7 +20854,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13691,7 +20863,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13729,7 +20901,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", @@ -13738,7 +20910,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13765,7 +20937,127 @@ }, "webconfig": false }, - "ikoka_stick_nrf_33dbm_room_server_lora_ota_no_external_sensors-full": { + "ikoka_stick_nrf_33dbm_repeater-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 521736, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_33dbm_repeater-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 493296, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_33dbm_room_server_lora_ota-full": { "display": true, "espnowBridge": false, "femRx": false, @@ -13779,7 +21071,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13795,17 +21087,18 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "ikoka_stick_nrf_33dbm_room_server_lora_ota_no_external_sensors-reduced": { + "ikoka_stick_nrf_33dbm_room_server_lora_ota-reduced": { "display": true, "espnowBridge": false, "femRx": false, @@ -13819,7 +21112,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -13835,12 +21128,121 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_33dbm_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 476216, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "ikoka_stick_nrf_33dbm_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": true, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 447552, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" } }, "webconfig": false @@ -13856,7 +21258,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -13883,7 +21285,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -13911,7 +21313,7 @@ "wifi", "both" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": true, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -13937,7 +21339,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -13954,19 +21356,22 @@ }, "muzi_base_duo_companion_radio_full": { "dedicatedUsbLogging": true, - "display": false, + "display": true, + "displayAuto": true, + "displayController": "sh1107", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, - "gps": false, + "gps": true, "loggingControl": "usb.logging", "loggingModes": [ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -13994,7 +21399,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14034,7 +21439,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14074,7 +21479,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14114,7 +21519,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14140,40 +21545,24 @@ }, "webconfig": false }, - "muzi_base_duo_superIO_companion_radio_ble": { + "muzi_base_uno_companion_radio_full": { + "dedicatedUsbLogging": true, "display": true, + "displayAuto": true, + "displayController": "sh1107", + "displaySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": true, - "mqtt": false, - "otaRole": "none", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": false, - "rxps": false, - "snmp": false, - "updateMethods": [ - "bluetooth" - ], - "webconfig": false - }, - "muzi_base_uno_companion_radio_full": { - "dedicatedUsbLogging": true, - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": false, "loggingControl": "usb.logging", "loggingModes": [ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -14201,7 +21590,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14241,7 +21630,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14281,7 +21670,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14321,7 +21710,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14347,25 +21736,6 @@ }, "webconfig": false }, - "muzi_base_uno_superIO_companion_radio_ble": { - "display": true, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "none", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "bluetooth" - ], - "webconfig": false - }, "nibble_screen_connect_companion_radio_full_": { "display": true, "espnowBridge": false, @@ -14377,7 +21747,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -14400,7 +21770,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -14426,7 +21796,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -14452,7 +21822,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "ESP32_PLATFORM", @@ -14475,7 +21845,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -14501,7 +21871,7 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "ESP32_PLATFORM", @@ -14528,9 +21898,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -14555,16 +21925,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14602,16 +21974,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14638,21 +22012,42 @@ }, "webconfig": false }, - "solarxiao_30S_room_server-full": { + "solarxiao_30S_repeater-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 545312, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14668,31 +22063,53 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "solarxiao_30S_room_server-reduced": { + "solarxiao_30S_repeater-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 516600, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14708,12 +22125,13 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false @@ -14732,7 +22150,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14773,7 +22191,115 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "solarxiao_30S_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 486916, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "solarxiao_30S_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 458188, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14812,9 +22338,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -14839,16 +22365,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14886,16 +22414,18 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14922,21 +22452,42 @@ }, "webconfig": false }, - "solarxiao_33S_room_server-full": { + "solarxiao_33S_repeater-with-bootloader-2.4.12-full": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 545312, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14952,31 +22503,53 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false }, - "solarxiao_33S_room_server-reduced": { + "solarxiao_33S_repeater-with-bootloader-2.4.12-reduced": { "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 516600, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "espnowBridge": false, "femRx": false, "femTx": false, "gps": false, + "loggingControl": "usb.logging", + "loggingModes": [ + "none", + "usb" + ], + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-receiver", "platform": "NRF52_PLATFORM", "primaryEspnow": false, - "rs232": false, + "rs232": true, + "rs232Merged": true, + "rs232Source": "03214a16df2bd09d3272dfb001d2d322c6740f60", "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -14992,12 +22565,13 @@ "The package must fit the receiver's staging and apply workspace.", "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." ], "package_types": [ + "full", "in_place_delta" ], - "storage": "internal_flash" + "storage": "external_qspi" } }, "webconfig": false @@ -15016,7 +22590,7 @@ "rxgain": true, "rxps": true, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15057,7 +22631,115 @@ "rxgain": true, "rxps": true, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "solarxiao_33S_room_server_lora_ota-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 486916, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the matching external-storage hardware, wiring, and storage-aware OTAFIX bootloader." + ], + "package_types": [ + "full", + "in_place_delta" + ], + "storage": "external_qspi" + } + }, + "webconfig": false + }, + "solarxiao_33S_room_server_lora_ota-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 458188, + "asset_sha256": "2f943dbac7dd22a7c63712eb138cc8f9078a20f6975079793124f10f1c246d87", + "automatic_delay_seconds": 70, + "candidate_sha256": "ac9c60fd29b39cef68607b677975b80731dcdf4b13b6c4979cff4ab40eead3cc", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "xiao_nrf52840_ble", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": false, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": true, + "rxps": true, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15095,9 +22777,9 @@ "none", "usb" ], - "loggingSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "loggingSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "88c85108005a30a730fa7b78b2899b210754f3be", + "memorySource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "mqtt": false, "otaRole": "lora-source", "platform": "NRF52_PLATFORM", @@ -15125,7 +22807,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15165,7 +22847,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "t1000e_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 478064, + "asset_sha256": "35b2d7a3a45a2223da48c30a66f187ade82f63439457c8680a1732ad5dbbfc73", + "automatic_delay_seconds": 70, + "candidate_sha256": "a6aba61d48c3661604a361aaa6e9a8542c1ab5149dcb861e5d3e07f7b5dea8c5", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "t1000_e", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash_and_retained_ram" + } + }, + "webconfig": false + }, + "t1000e_repeater_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 478064, + "asset_sha256": "35b2d7a3a45a2223da48c30a66f187ade82f63439457c8680a1732ad5dbbfc73", + "automatic_delay_seconds": 70, + "candidate_sha256": "a6aba61d48c3661604a361aaa6e9a8542c1ab5149dcb861e5d3e07f7b5dea8c5", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "t1000_e", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15205,7 +22993,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15245,7 +23033,113 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "t1000e_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-full": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 432864, + "asset_sha256": "35b2d7a3a45a2223da48c30a66f187ade82f63439457c8680a1732ad5dbbfc73", + "automatic_delay_seconds": 70, + "candidate_sha256": "a6aba61d48c3661604a361aaa6e9a8542c1ab5149dcb861e5d3e07f7b5dea8c5", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "t1000_e", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "full", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "snmp": false, + "updateMethods": [ + "bluetooth", + "lora" + ], + "updateRequirements": { + "lora": { + "bootloader": "Matching board/storage OTAFIX bootloader", + "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", + "notes": [ + "Use a destination-specific .mota package matching the board, target, and storage layout.", + "An in-place delta requires the exact firmware currently running as its base.", + "The package must fit the receiver's staging and apply workspace.", + "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", + "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", + "Internal storage accepts in-place application deltas, not full application packages." + ], + "package_types": [ + "in_place_delta" + ], + "storage": "internal_flash" + } + }, + "webconfig": false + }, + "t1000e_room_server_lora_ota_no_external_sensors-with-bootloader-2.4.12-reduced": { + "display": false, + "embeddedBootloader": { + "activation": "ota bootloader update", + "app_offset": 432864, + "asset_sha256": "35b2d7a3a45a2223da48c30a66f187ade82f63439457c8680a1732ad5dbbfc73", + "automatic_delay_seconds": 70, + "candidate_sha256": "a6aba61d48c3661604a361aaa6e9a8542c1ab5149dcb861e5d3e07f7b5dea8c5", + "image_bytes": 40960, + "legacy_sha256": null, + "manifest_sha256": "d2f62a4ec9b7c5643d8ed787d9e1710a2fabac34607a0bbb6ea5883a458e6df3", + "profile": "t1000_e", + "release": "2.4.12" + }, + "embeddedBootloaderSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", + "espnowBridge": false, + "femRx": false, + "femTx": false, + "gps": true, + "mqtt": false, + "otaRole": "lora-receiver", + "platform": "NRF52_PLATFORM", + "primaryEspnow": false, + "rs232": false, + "rxgain": false, + "rxps": false, + "sensorProfile": "reduced", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15285,7 +23179,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15325,7 +23219,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15435,7 +23329,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15475,7 +23369,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15515,7 +23409,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "full", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15555,7 +23449,7 @@ "rxgain": false, "rxps": false, "sensorProfile": "reduced", - "sensorProfileSource": "88c85108005a30a730fa7b78b2899b210754f3be", + "sensorProfileSource": "03214a16df2bd09d3272dfb001d2d322c6740f60", "snmp": false, "updateMethods": [ "bluetooth", @@ -15582,422 +23476,5 @@ "webconfig": false } }, - "source": "88c85108005a30a730fa7b78b2899b210754f3be", - "supplementalReleases": [ - { - "familyTag": "v1.18.0.1.preview1-794f5f7b", - "partitionMigrations": { - "Ebyte_EoRa-S3_Repeater": "ebyte-eora-s3-repeater", - "Ebyte_EoRa-S3_room_server": "ebyte-eora-s3-room-server", - "Generic_E22_sx1262_repeater": "generic-e22-sx1262-repeater", - "Generic_E22_sx1268_repeater": "generic-e22-sx1268-repeater", - "Heltec_E213_repeater": "heltec-e213-repeater", - "Heltec_E213_room_server": "heltec-e213-room-server", - "Heltec_E290_repeater": "heltec-e290-repeater", - "Heltec_E290_room_server": "heltec-e290-room-server", - "Heltec_T190_repeater_": "heltec-t190-repeater", - "Heltec_T190_room_server_": "heltec-t190-room-server", - "Heltec_WSL3_repeater": "heltec-wsl3-repeater", - "Heltec_WSL3_room_server": "heltec-wsl3-room-server", - "Heltec_WSL3_sensor": "heltec-wsl3-sensor", - "Heltec_Wireless_Paper_repeater": "heltec-wireless-paper-repeater", - "Heltec_Wireless_Paper_room_server": "heltec-wireless-paper-room-server", - "Heltec_Wireless_Tracker_repeater": "heltec-wireless-tracker-repeater", - "Heltec_Wireless_Tracker_room_server": "heltec-wireless-tracker-room-server", - "Heltec_ct62_repeater": "heltec-ct62-repeater", - "Heltec_ct62_sensor": "heltec-ct62-sensor", - "Heltec_v2_repeater": "heltec-v2-repeater", - "Heltec_v2_room_server": "heltec-v2-room-server", - "Heltec_v3_repeater": "heltec-v3-repeater", - "Heltec_v3_room_server": "heltec-v3-room-server", - "Heltec_v3_sensor": "heltec-v3-sensor", - "LilyGo_T3S3_sx1262_repeater": "t3s3-sx1262-repeater", - "LilyGo_T3S3_sx1262_room_server": "t3s3-sx1262-room-server", - "LilyGo_T3S3_sx1276_repeater": "t3s3-sx1276-repeater", - "LilyGo_T3S3_sx1276_room_server": "t3s3-sx1276-room-server", - "LilyGo_TBeam_1W_repeater": "lilygo-tbeam-1w-repeater", - "LilyGo_TBeam_1W_room_server": "lilygo-tbeam-1w-room-server", - "LilyGo_TDeck_repeater": "lilygo-tdeck-repeater", - "LilyGo_TETH_Elite_sx1262_repeater": "lilygo-teth-elite-sx1262-repeater", - "LilyGo_TETH_Elite_sx1262_room_server": "lilygo-teth-elite-sx1262-room-server", - "MKE_s3_repeater": "mke-s3-repeater", - "MKE_s3_room_server": "mke-s3-room-server", - "MKE_s3_sensor": "mke-s3-sensor", - "RAK_3112_repeater": "rak-3112-repeater", - "RAK_3112_room_server": "rak-3112-room-server", - "RAK_3112_sensor": "rak-3112-sensor", - "Station_G2_logging_repeater": "station-g2-logging-repeater", - "Station_G2_repeater": "station-g2-repeater", - "Station_G2_room_server": "station-g2-room-server", - "Station_G3_ESP32_logging_repeater": "station-g3-esp32-logging-repeater", - "Station_G3_ESP32_repeater": "station-g3-esp32-repeater", - "Station_G3_ESP32_room_server": "station-g3-esp32-room-server", - "T_Beam_S3_Supreme_SX1262_repeater": "t-beam-s3-supreme-sx1262-repeater", - "T_Beam_S3_Supreme_SX1262_room_server": "t-beam-s3-supreme-sx1262-room-server", - "Tenstar_C3_sx1262_repeater": "tenstar-c3-sx1262-repeater", - "Tenstar_C3_sx1268_repeater": "tenstar-c3-sx1268-repeater", - "ThinkNode_M2_Repeater": "thinknode-m2-repeater", - "ThinkNode_M2_room_server": "thinknode-m2-room-server", - "ThinkNode_M5_Repeater": "thinknode-m5-repeater", - "ThinkNode_M5_room_server": "thinknode-m5-room-server", - "ThinkNode_M7_repeater": "thinknode-m7-repeater", - "ThinkNode_M7_room_server": "thinknode-m7-room-server", - "ThinkNode_M9_repeater_": "thinknode-m9-repeater", - "ThinkNode_M9_room_server_": "thinknode-m9-room-server", - "Waveshare_S3_LR1121_repeater_observer_mqtt": "waveshare-s3-lr1121-observer-repeater", - "Waveshare_S3_LR1121_room_server_observer_mqtt": "waveshare-s3-lr1121-observer-room-server", - "Xiao_C3_repeater": "xiao-c3-repeater", - "Xiao_C3_room_server": "xiao-c3-room-server", - "Xiao_S3_WIO_repeater": "xiao-s3-wio", - "Xiao_S3_WIO_room_server": "xiao-s3-wio-room-server", - "Xiao_S3_WIO_sensor": "xiao-s3-wio-sensor", - "Xiao_S3_repeater": "xiao-s3-repeater", - "Xiao_S3_room_server": "xiao-s3-room-server", - "Xiao_S3_sensor": "xiao-s3-sensor", - "heltec_rc32_repeater": "heltec-rc32-repeater", - "heltec_rc32_room_server": "heltec-rc32-room-server", - "heltec_rc32_sensor": "heltec-rc32-sensor", - "heltec_rc32_without_display_repeater": "heltec-rc32-no-display-repeater", - "heltec_rc32_without_display_room_server": "heltec-rc32-no-display-room-server", - "heltec_rc32_without_display_sensor": "heltec-rc32-no-display-sensor", - "heltec_tracker_v2_repeater": "heltec-tracker-v2-repeater", - "heltec_tracker_v2_room_server": "heltec-tracker-v2-room-server", - "heltec_tracker_v2_sensor": "heltec-tracker-v2-sensor", - "heltec_v4_expansionkit_repeater": "heltec-v4-expansionkit-repeater", - "heltec_v4_r8_repeater": "heltec-v4-r8-repeater", - "heltec_v4_r8_room_server": "heltec-v4-r8-room-server", - "heltec_v4_r8_sensor": "heltec-v4-r8-sensor", - "heltec_v4_r8_tft_repeater": "heltec-v4-r8-tft-repeater", - "heltec_v4_r8_tft_room_server": "heltec-v4-r8-tft-room-server", - "heltec_v4_r8_tft_sensor": "heltec-v4-r8-tft-sensor", - "heltec_v4_repeater": "heltec-v4", - "heltec_v4_room_server": "heltec-v4-room-server", - "heltec_v4_sensor": "heltec-v4-sensor", - "heltec_v4_tft_repeater": "heltec-v4-tft-repeater", - "heltec_v4_tft_room_server": "heltec-v4-tft-room-server", - "heltec_v4_tft_sensor": "heltec-v4-tft-sensor", - "meshnology_w12_repeater": "meshnology-w12-repeater", - "meshnology_w12_room_server": "meshnology-w12-room-server", - "meshnology_w12_sensor": "meshnology-w12-sensor", - "nibble_screen_connect_repeater_": "nibble-screen-repeater", - "nibble_screen_connect_room_server_": "nibble-screen-room-server", - "nibble_zero_connect_repeater_": "nibble-zero-repeater", - "nibble_zero_connect_room_server_": "nibble-zero-room-server" - }, - "profiles": { - "Heltec_t114_companion_radio_full": { - "dedicatedUsbLogging": true, - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "loggingControl": "usb.logging", - "loggingModes": [ - "none", - "usb" - ], - "loggingSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "memoryNote": "Full Companion queue: 256 offline messages normally; 128 while mOTA borrows queue storage. Sync unread messages with a Companion app before starting mOTA if more than 128 are pending. Stopping or disconnecting the source restores all 256 slots.", - "memorySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "mqtt": false, - "otaRole": "lora-source", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [ - "bluetooth" - ], - "webconfig": false - }, - "Heltec_t114_kiss_modem": { - "display": false, - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "none", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "snmp": false, - "updateMethods": [], - "webconfig": false - }, - "Heltec_t114_repeater_lora_ota_no_external_sensors-full": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": true, - "rs232Merged": true, - "rs232Source": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "rxgain": true, - "rxps": true, - "sensorProfile": "full", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash_and_retained_ram" - } - }, - "webconfig": false - }, - "Heltec_t114_repeater_lora_ota_no_external_sensors-reduced": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": true, - "rs232Merged": true, - "rs232Source": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "rxgain": true, - "rxps": true, - "sensorProfile": "reduced", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Requires the exact-board retained-RAM handoff bootloader profile; a transfer cannot resume after the receiver restarts." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash_and_retained_ram" - } - }, - "webconfig": false - }, - "Heltec_t114_room_server_lora_ota_no_external_sensors-full": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "full", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - }, - "Heltec_t114_room_server_lora_ota_no_external_sensors-reduced": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "reduced", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - }, - "Heltec_t114_sensor_lora_ota_no_external_sensors-full": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "full", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - }, - "Heltec_t114_sensor_lora_ota_no_external_sensors-reduced": { - "display": true, - "displayAuto": true, - "displayController": "st7789", - "displaySource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "espnowBridge": false, - "femRx": false, - "femTx": false, - "gps": true, - "mqtt": false, - "otaRole": "lora-receiver", - "platform": "NRF52_PLATFORM", - "primaryEspnow": false, - "rs232": false, - "rxgain": true, - "rxps": true, - "sensorProfile": "reduced", - "sensorProfileSource": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "snmp": false, - "updateMethods": [ - "bluetooth", - "lora" - ], - "updateRequirements": { - "lora": { - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/v0.11.0-OTAFIX2.4.11", - "notes": [ - "Use a destination-specific .mota package matching the board, target, and storage layout.", - "An in-place delta requires the exact firmware currently running as its base.", - "The package must fit the receiver's staging and apply workspace.", - "Check the release's exact-board bootloader manifest; hardware-pending boards are not covered by the normal release.", - "Artifact inspection verifies compiled support; it does not verify the bootloader installed on a physical device.", - "Internal storage accepts in-place application deltas, not full application packages." - ], - "package_types": [ - "in_place_delta" - ], - "storage": "internal_flash" - } - }, - "webconfig": false - } - }, - "source": "794f5f7b8c508b708ee8fc7db7bff066aa3d1a0a", - "releaseTag": "heltec-t114-v1.18.0.1.preview1" - } - ] + "source": "03214a16df2bd09d3272dfb001d2d322c6740f60" } diff --git a/docs/_javascript/firmware_picker.js b/docs/_javascript/firmware_picker.js index 1364f43e0..74d4dd655 100644 --- a/docs/_javascript/firmware_picker.js +++ b/docs/_javascript/firmware_picker.js @@ -1048,6 +1048,17 @@ profile.variant = variantWithoutSensorMarker(profile.variant); } } + const embedded = controls.embeddedBootloader; + if (profile.sensorProfile && ["repeater", "room"].includes(profile.role) && + sensorSourceMatches && controls.embeddedBootloaderSource === sensorSource && + embedded && /^\d+(?:\.\d+){2}$/.test(embedded.release || "") && + embedded.automatic_delay_seconds === 70 && embedded.image_bytes === 40960 && + embedded.activation === "ota bootloader update" && + /^[0-9a-f]{64}$/.test(embedded.candidate_sha256 || "") && + /^[0-9a-f]{64}$/.test(embedded.asset_sha256 || "") && + profile.target.endsWith("-with-bootloader-" + embedded.release + "-" + profile.sensorProfile)) { + profile.embeddedBootloader = embedded; + } } function variantWithoutSensorMarker(value) { @@ -1385,8 +1396,15 @@ function firmwareProfileLabel(profile) { if (profile.sensorProfile) { const label = (profile.sensorProfile === "full" ? "Full supported sensors" : "Reduced sensors") + " + LoRa OTA"; - const variant = variantWithoutSensorMarker(profile.variant); - return label + (variant !== "default" ? " - " + humanizeVariant(variant, profile.hardware) : ""); + let variant = variantWithoutSensorMarker(profile.variant); + const embedded = profile.embeddedBootloader; + if (embedded) { + variant = variant.replace(new RegExp("(?:^|-)with-bootloader-" + + escapeRegExp(embedded.release.replace(/\./g, "-")) + "(?=-|$)"), "") + .replace(/^-+|-+$/g, "") || "default"; + } + return label + (variant !== "default" ? " - " + humanizeVariant(variant, profile.hardware) : "") + + (embedded ? " + OTAFIX " + embedded.release + " bootloader included" : ""); } const parts = []; if (profile.feature === "full") parts.push("Full"); @@ -2007,6 +2025,12 @@ ], }; const extra = []; + if (profile.embeddedBootloader) { + const embedded = profile.embeddedBootloader; + extra.push("This application includes the exact-board OTAFIX " + embedded.release + + " bootloader. Leave it running for at least " + embedded.automatic_delay_seconds + + " seconds after startup. It checks once when radio and OTA activity are idle, updates a recognized compatible older bootloader, and skips a matching current or newer version. Recovery and unrecognized bootloaders require the documented local migration route. After any reboot, check get bootloader.ver."); + } if (isExpandedEsp32Infrastructure(profile) && kind === "bin") { extra.push( "If the node still has a smaller layout, first flash the matching merged image over USB or use the linked exact board/role migration ZIP, when available. Follow its README to check the installed OTA target and source layout before starting. Never send this app-only image across a partition change." diff --git a/docs/firmware_picker.md b/docs/firmware_picker.md index 7ccd423b7..1a3bd30d6 100644 --- a/docs/firmware_picker.md +++ b/docs/firmware_picker.md @@ -4,7 +4,7 @@ # Firmware picker -
+