From 7ee33c71495587cf40188bc7ead4895bdf0078cb Mon Sep 17 00:00:00 2001 From: mikecarper Date: Fri, 25 Sep 2026 10:37:10 -0700 Subject: [PATCH] Describe local adaptive OTAFIX requirement in release metadata --- scripts/check_firmware_capabilities.py | 7 +++++-- test/test_firmware_capabilities.py | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/scripts/check_firmware_capabilities.py b/scripts/check_firmware_capabilities.py index f5a6e788..eef243ee 100644 --- a/scripts/check_firmware_capabilities.py +++ b/scripts/check_firmware_capabilities.py @@ -34,6 +34,7 @@ def nrf52_lora_details(application): if layout.auto_store: notes.append("One application detects RAK external NOR and chooses QSPI only with the exact matching OTAFIX bootloader; otherwise it uses internal flash where safe.") notes.append("External QSPI accepts full images and in-place deltas; internal flash accepts in-place deltas only and needs the retained-RAM OTAFIX profile.") + notes.append("The merged RAK OTAFIX bootloader is a local 2.4.8.1 preview; install the exact RAK core package by serial/BLE DFU or SWD. Bootloader self-update is unavailable in this merged profile.") elif layout.hybrid_ram: notes.append("Requires OTAFIX 2.4.6 retained-RAM handoff support; a transfer cannot resume after the receiver restarts.") elif layout.external_backed: @@ -43,8 +44,10 @@ def nrf52_lora_details(application): return { "storage": storage, "package_types": ["full", "in_place_delta"] if layout.auto_store or layout.external_backed else ["in_place_delta"], - "bootloader": "Matching board/storage OTAFIX bootloader", - "bootloader_release": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/0.11.0-OTAFIX2.4.6", + "bootloader": ("Merged RAK3401 or RAK4631 OTAFIX bootloader, or the exact legacy storage profile" + if layout.auto_store else "Matching board/storage OTAFIX bootloader"), + "bootloader_release": (None if layout.auto_store else + "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/tag/0.11.0-OTAFIX2.4.6"), "notes": notes, } diff --git a/test/test_firmware_capabilities.py b/test/test_firmware_capabilities.py index 03c77a54..e634d3a3 100644 --- a/test/test_firmware_capabilities.py +++ b/test/test_firmware_capabilities.py @@ -232,7 +232,11 @@ class FirmwareCapabilityCheckerTest(unittest.TestCase): details = manifest["ota_update_requirements"]["lora"] self.assertEqual(details["storage"], storage) self.assertEqual(details["package_types"], types) - self.assertTrue(details["bootloader_release"].endswith("0.11.0-OTAFIX2.4.6")) + if flags == 48: + self.assertIsNone(details["bootloader_release"]) + self.assertIn("Merged RAK", details["bootloader"]) + else: + self.assertTrue(details["bootloader_release"].endswith("0.11.0-OTAFIX2.4.6")) def test_nrf52_full_companion_cannot_claim_lora_self_update(self): result, manifest = self.run_checker(