From 2cb31ce04f2a045072ed793503b6effaa45411fe Mon Sep 17 00:00:00 2001 From: mikecarper Date: Fri, 25 Sep 2026 00:37:35 -0700 Subject: [PATCH] Fix logging matrix firmware build failures --- build.sh | 2 +- scripts/check_firmware_ram.py | 1 + src/helpers/radiolib/CustomLR1121Wrapper.h | 37 +++++++++++++++------- test/test_build_profiles.sh | 4 +++ test/test_firmware_ram.py | 6 ++++ variants/heltec_rc32/HeltecRC32Board.h | 1 + variants/muzi_base/platformio.ini | 16 +++++----- variants/thinknode_m4/platformio.ini | 4 +-- 8 files changed, 48 insertions(+), 23 deletions(-) diff --git a/build.sh b/build.sh index f034ef32..01fbce6d 100755 --- a/build.sh +++ b/build.sh @@ -5086,7 +5086,7 @@ is_redundant_bulk_build_target() { # Bench fixtures and migration utilities use their dedicated PlatformIO # recipes; they are not node firmware for the release/OTA packaging matrix. case "${1,,}" in - profile_switch_*|*_partition_migrator|*_partition_migrator_test_*|*_partition_legacy_seed|*_sim) + profile_switch_*|*partition_migrator*|*partition_expander*|*_partition_legacy_seed|*_sim) return 0 ;; esac diff --git a/scripts/check_firmware_ram.py b/scripts/check_firmware_ram.py index 959e9038..83d4d2c4 100644 --- a/scripts/check_firmware_ram.py +++ b/scripts/check_firmware_ram.py @@ -26,6 +26,7 @@ DISPLAY_HEAP = { "": 0, "NullDisplayDriver": 0, "ST7735Display": 25602, "SSD1306Display": 4096, "SH1106Display": 4096, "U8g2Display": 4096, + "SH1107Display": 4096, # These drivers render directly or embed their pixel storage in globals. "ST7789Display": 0, "ST7789LCDDisplay": 0, "NV3001BDisplay": 0, "GxEPDDisplay": 0, "E213Display": 8192, "E290Display": 8192, diff --git a/src/helpers/radiolib/CustomLR1121Wrapper.h b/src/helpers/radiolib/CustomLR1121Wrapper.h index 40a0f352..0247a969 100644 --- a/src/helpers/radiolib/CustomLR1121Wrapper.h +++ b/src/helpers/radiolib/CustomLR1121Wrapper.h @@ -8,15 +8,28 @@ class CustomLR1121Wrapper : public RadioLibWrapper { public: CustomLR1121Wrapper(CustomLR1121& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { } - void setParams(float freq, float bw, uint8_t sf, uint8_t cr) override { - ((CustomLR1121 *)_radio)->setFrequency(freq); - ((CustomLR1121 *)_radio)->setSpreadingFactor(sf); - ((CustomLR1121 *)_radio)->setBandwidth(bw); - ((CustomLR1121 *)_radio)->setCodingRate(cr); - updatePreamble(sf); - PacketMillis pm = calcMaxPacketMillis(sf, bw, cr, preambleLengthForSF(sf)); + void powerOff() { + _radio->standby(); + _radio->sleep(); + } + +protected: + bool applyParams(float freq, float bw, uint8_t sf, uint8_t cr) override { + if (((CustomLR1121 *)_radio)->setFrequency(freq) != RADIOLIB_ERR_NONE + || ((CustomLR1121 *)_radio)->setSpreadingFactor(sf) != RADIOLIB_ERR_NONE + || ((CustomLR1121 *)_radio)->setBandwidth(bw) != RADIOLIB_ERR_NONE + || ((CustomLR1121 *)_radio)->setCodingRate(cr) != RADIOLIB_ERR_NONE + || !updatePreamble(sf, bw)) return false; + PacketMillis pm = calcMaxPacketMillis(sf, bw, cr, preambleLengthForParams(sf, bw)); ((CustomLR1121 *)_radio)->setPreambleMillis(pm.preambleMillis); ((CustomLR1121 *)_radio)->setMaxPayloadMillis(pm.payloadMillis); + return true; + } + +public: + bool setCodingRate(uint8_t cr) override { + if (isCarrierWaveActive()) return false; + return ((CustomLR1121 *)_radio)->setCodingRate(cr) == RADIOLIB_ERR_NONE; } void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio, ((CustomLR1121 *)_radio)->getFreqMHz(), getRxBoostedGainMode()); } @@ -31,7 +44,7 @@ public: void onSendFinished() override { RadioLibWrapper::onSendFinished(); - _radio->setPreambleLength(preambleLengthForSF(getSpreadingFactor())); // overcomes weird issues with small and big pkts + _radio->setPreambleLength(currentPreambleLength()); // overcomes weird issues with small and big pkts } uint32_t getEstAirtimeFor(int len_bytes) override { @@ -39,14 +52,14 @@ public: return airtime < 200 ? 200 : airtime; // at least 200 millis } - float getLastRSSI() const override { return ((CustomLR1121 *)_radio)->getRSSI(); } - float getLastSNR() const override { return ((CustomLR1121 *)_radio)->getSNR(); } - uint8_t getSpreadingFactor() const override { return ((CustomLR1121 *)_radio)->getSpreadingFactor(); } - bool setRxBoostedGainMode(bool en) override { +protected: + bool applyRxBoostedGainMode(bool en) override { return ((CustomLR1121 *)_radio)->setRxBoostedGainMode(en) == RADIOLIB_ERR_NONE; } +public: + bool supportsRxBoostedGainMode() const override { return true; } bool getRxBoostedGainMode() const override { return ((CustomLR1121 *)_radio)->getRxBoostedGainMode(); } diff --git a/test/test_build_profiles.sh b/test/test_build_profiles.sh index f0d24bdd..5513dc7a 100644 --- a/test/test_build_profiles.sh +++ b/test/test_build_profiles.sh @@ -14,6 +14,10 @@ fail() { for utility in profile_switch_t096_sx1262 xiao_s3_partition_migrator \ heltec_v4_partition_migrator_test_hold xiao_s3_partition_legacy_seed \ + esp32_4mb_partition_migrator_lora \ + heltec_v4_partition_migrator_lora_repeater \ + heltec_v4_partition_migrator_lora_repeater_lora_ota_no_external_sensors \ + Xiao_S3_WIO_partition_expander \ Heltec_v3_repeater_observer_mqtt_sim; do is_redundant_bulk_build_target "$utility" \ || fail "release matrix includes development utility $utility" diff --git a/test/test_firmware_ram.py b/test/test_firmware_ram.py index 488d50a0..b4e9a412 100644 --- a/test/test_firmware_ram.py +++ b/test/test_firmware_ram.py @@ -66,6 +66,12 @@ def esp_fixture(path, modern=False, fragmented=False): class FirmwareRamTest(unittest.TestCase): + def test_sh1107_framebuffer_is_budgeted(self): + policy = ram.requirements("NRF52_PLATFORM", { + "DISPLAY_CLASS": "SH1107Display", + }, "muzi_base_uno_superIO_companion_radio_ble") + self.assertEqual(policy["components"]["display_pixels_and_driver"], 4096) + def test_heap_tables_and_ota_remain_in_runtime_budget(self): policy = ram.requirements("ESP32_PLATFORM", { "ENABLE_OTA": 1, "OTA_HEAP_CONTEXT": 1, diff --git a/variants/heltec_rc32/HeltecRC32Board.h b/variants/heltec_rc32/HeltecRC32Board.h index 624935b9..22f88b58 100644 --- a/variants/heltec_rc32/HeltecRC32Board.h +++ b/variants/heltec_rc32/HeltecRC32Board.h @@ -20,6 +20,7 @@ public: void begin(); void onBootComplete() override; + void powerOff() override; void onBeforeTransmit() override; void onAfterTransmit() override; uint16_t getBattMilliVolts() override; diff --git a/variants/muzi_base/platformio.ini b/variants/muzi_base/platformio.ini index 72a3ecac..a253c4b9 100644 --- a/variants/muzi_base/platformio.ini +++ b/variants/muzi_base/platformio.ini @@ -103,7 +103,7 @@ lib_deps = ${muzi_base_duo.lib_deps} [env:muzi_base_duo_companion_radio_usb] extends = muzi_base_duo board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_duo.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=350 @@ -122,7 +122,7 @@ lib_deps = ${muzi_base_duo.lib_deps} [env:muzi_base_duo_companion_radio_ble] extends = muzi_base_duo board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_duo.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=350 @@ -147,7 +147,7 @@ lib_deps = ${muzi_base_duo.lib_deps} [muzi_base_duo_superIO] extends = muzi_base_duo board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_duo.build_flags} -D MUZI_BASE_SUPERIO -D UI_HAS_JOYSTICK=1 @@ -176,7 +176,7 @@ upload_protocol = nrfutil [env:muzi_base_duo_superIO_companion_radio_ble] extends = muzi_base_duo_superIO board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_duo_superIO.build_flags} -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=40 @@ -230,7 +230,7 @@ lib_deps = ${muzi_base_uno.lib_deps} [env:muzi_base_uno_companion_radio_usb] extends = muzi_base_uno board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_uno.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=350 @@ -249,7 +249,7 @@ lib_deps = ${muzi_base_uno.lib_deps} [env:muzi_base_uno_companion_radio_ble] extends = muzi_base_uno board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_uno.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=350 @@ -274,7 +274,7 @@ lib_deps = ${muzi_base_uno.lib_deps} [muzi_base_uno_superIO] extends = muzi_base_uno board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_uno.build_flags} -D MUZI_BASE_SUPERIO -D UI_HAS_JOYSTICK=1 @@ -303,7 +303,7 @@ upload_protocol = nrfutil [env:muzi_base_uno_superIO_companion_radio_ble] extends = muzi_base_uno_superIO board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${muzi_base_uno_superIO.build_flags} -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=40 diff --git a/variants/thinknode_m4/platformio.ini b/variants/thinknode_m4/platformio.ini index 06762f88..dbf419ba 100644 --- a/variants/thinknode_m4/platformio.ini +++ b/variants/thinknode_m4/platformio.ini @@ -73,7 +73,7 @@ lib_deps = ${ThinkNode_M4.lib_deps} [env:ThinkNode_M4_companion_radio_usb] extends = ThinkNode_M4 board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${ThinkNode_M4.build_flags} -I examples/companion_radio/ui-orig -D MAX_CONTACTS=350 @@ -98,7 +98,7 @@ lib_deps = ${ThinkNode_M4.lib_deps} [env:ThinkNode_M4_companion_radio_ble] extends = ThinkNode_M4 board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 708608 +board_upload.maximum_size = 712704 build_flags = ${ThinkNode_M4.build_flags} -I examples/companion_radio/ui-orig -D MAX_CONTACTS=350