From f79d22c8104dbfd8317e43584198671856c9bca8 Mon Sep 17 00:00:00 2001 From: agessaman Date: Sun, 19 Jul 2026 16:42:38 -0700 Subject: [PATCH] fix: resolve remaining upstream-merge build breaks; park oversize TLora MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three real regressions from the 2026-07-19 upstream merge, all invisible to the two prescribed smoke builds: - heltec_tracker_v2/HeltecTrackerV2Board.cpp: the FEM trio (setLoRaFemLnaEnabled/canControlLoRaFemLna/isLoRaFemLnaEnabled) was duplicated verbatim by auto-merge, and upstream's new powerOff() (35f654ce) used P_LORA_PA_POWER unguarded — a macro defined only for the tracker_v2 envs, while heltec_tracker_v1_1 compiles the same board file. Guarded it the same way LoRaFEMControl.cpp already guards that macro. - SimpleMeshTables.h: the tracker variants pull in TFT_eSPI, whose TFT_eSPI_ESP32_S3.h defines FS_NO_GLOBALS. That suppresses FS.h's own 'using fs::File', so File never reached global scope and every TU routed through it failed with "'File' has not been declared" — here and at simple_repeater/MyMesh.h:158. Restore the using when FS_NO_GLOBALS is set. Explicit fs::File is not an option: File is also the global type on the nRF52/RP2040 paths, which have no fs namespace. - ST7735Display.cpp: upstream's HSPI fix (d30d8ed7) guarded on HELTEC_LORA_V3 || HELTEC_TRACKER_V2. heltec_tracker_v1_1 matches neither and fell through to &SPI1, which is not instantiated on ESP32. Added it to the guard. Also parks LilyGo_TLora_V2_1_1_6_{repeater,room_server}_observer_mqtt with a trailing underscore (the nibble_screen_connect convention from b8f1fad6), which also excludes them from the workflows' enumeration regex. That board does NOT fit and never did: 2,069,397 / 1,966,080 = 105.3% on flex, with no webconfig and no upstream merge. It has been failing on production all along — the release ships 30 envs, not 32 — hidden because build.sh does not propagate pio's exit code. Dropping webconfig would recover ~46 KB of a ~101 KB deficit, so that is not a fix. Rationale and options in .scratch/tlora-v2-oversize.md. --- src/helpers/SimpleMeshTables.h | 10 ++++++++ src/helpers/ui/ST7735Display.cpp | 6 ++++- .../HeltecTrackerV2Board.cpp | 25 +++++-------------- variants/lilygo_tlora_v2_1/platformio.ini | 14 +++++++++-- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/helpers/SimpleMeshTables.h b/src/helpers/SimpleMeshTables.h index 956f36fa..f0e6ca12 100644 --- a/src/helpers/SimpleMeshTables.h +++ b/src/helpers/SimpleMeshTables.h @@ -4,6 +4,16 @@ #ifdef ESP32 #include + // TFT_eSPI (pulled in by the tracker variants' display driver) defines + // FS_NO_GLOBALS, which suppresses FS.h's own `using fs::File`. Without this, + // File never reaches global scope and every TU that reaches FS.h through + // TFT_eSPI first fails with "'File' has not been declared" — here and in + // simple_repeater/MyMesh.h. Restore exactly what FS.h would have done. + // Cannot use fs::File explicitly instead: File is also the global type on the + // nRF52/RP2040 paths, which have no fs namespace. + #if defined(FS_NO_GLOBALS) + using fs::File; + #endif #endif #define MAX_PACKET_HASHES (128+32) diff --git a/src/helpers/ui/ST7735Display.cpp b/src/helpers/ui/ST7735Display.cpp index 905ff503..62b27a16 100644 --- a/src/helpers/ui/ST7735Display.cpp +++ b/src/helpers/ui/ST7735Display.cpp @@ -102,7 +102,11 @@ static TFT_eSPI lcd = TFT_eSPI(160, 80); static uint32_t curr_color; -#if defined(HELTEC_LORA_V3) || defined(HELTEC_TRACKER_V2) +// HELTEC_TRACKER_V1_1 added to upstream's HSPI guard (d30d8ed7): that board uses +// the same ST7735 panel and also needs a dedicated HSPI instance. Without it the +// #else branch references SPI1, which is not instantiated on ESP32, so every +// heltec_tracker_v1_1 env fails to compile. +#if defined(HELTEC_LORA_V3) || defined(HELTEC_TRACKER_V2) || defined(HELTEC_TRACKER_V1_1) static SPIClass tft_spi(HSPI); #define _spi (&tft_spi) #else diff --git a/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp b/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp index 72251daa..1b7396dd 100644 --- a/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp +++ b/variants/heltec_tracker_v2/HeltecTrackerV2Board.cpp @@ -36,9 +36,14 @@ void HeltecTrackerV2Board::begin() { } void HeltecTrackerV2Board::powerOff() { - // Turn off PA + // Turn off PA. Guarded because this board file is also compiled for the + // heltec_tracker_v1_1 envs, which do not define P_LORA_PA_POWER (it is set + // only in variants/heltec_tracker_v2/platformio.ini). Same guard idiom + // LoRaFEMControl.cpp already uses for this macro. +#if defined(P_LORA_PA_POWER) digitalWrite(P_LORA_PA_POWER, LOW); rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_POWER); +#endif ESP32Board::powerOff(); } @@ -86,21 +91,3 @@ void HeltecTrackerV2Board::begin() { bool HeltecTrackerV2Board::isLoRaFemLnaEnabled() const { return loRaFEMControl.isLNAEnabled(); } - - bool HeltecTrackerV2Board::setLoRaFemLnaEnabled(bool enable) { - if (!loRaFEMControl.isLnaCanControl()) { - return false; - } - - loRaFEMControl.setLNAEnable(enable); - loRaFEMControl.setRxModeEnable(); - return true; - } - - bool HeltecTrackerV2Board::canControlLoRaFemLna() const { - return loRaFEMControl.isLnaCanControl(); - } - - bool HeltecTrackerV2Board::isLoRaFemLnaEnabled() const { - return loRaFEMControl.isLNAEnabled(); - } diff --git a/variants/lilygo_tlora_v2_1/platformio.ini b/variants/lilygo_tlora_v2_1/platformio.ini index 8558cc57..c411e8fa 100644 --- a/variants/lilygo_tlora_v2_1/platformio.ini +++ b/variants/lilygo_tlora_v2_1/platformio.ini @@ -142,7 +142,16 @@ lib_deps = ; Use ONE active WSS broker preset at a time. Two concurrent TLS sessions usually exhaust ; contiguous internal heap; the second slot fails (mbedtls_ssl_setup / esp-tls 0x8017). ; Set extra slots to "none" (e.g. set mqtt2.preset none). See MQTT_IMPLEMENTATION.md. -[env:LilyGo_TLora_V2_1_1_6_repeater_observer_mqtt] +; TEMPORARILY EXCLUDED FROM AUTOMATIC BUILDS (trailing underscore, same +; convention as the nibble_screen_connect envs). This board does not fit: +; flex baseline (no webconfig, no upstream merge): 2,069,397 / 1,966,080 = 105.3% +; It has been silently failing on production for some time — the observer release +; ships 30 envs, not 32, and build.sh swallowing pio's exit code hid it. Dropping +; webconfig would recover only ~46 KB of a ~101 KB (flex) / ~242 KB (dev) deficit, +; so a NO_WEBCONFIG flag cannot rescue it. ESP32 (not S3), 4 MB flash, already on +; min_spiffs.csv. Real options: single-app partition (fits, but loses OTA), or +; trim ~250 KB for this board. See .scratch/tlora-v2-oversize.md. +[env:LilyGo_TLora_V2_1_1_6_repeater_observer_mqtt_] extends = LilyGo_TLora_V2_1_1_6_core extra_scripts = ${esp32_base.extra_scripts} @@ -187,7 +196,8 @@ lib_deps = paulstoffregen/Time@1.6.1 ; Same single-broker guidance as LilyGo_TLora_V2_1_1_6_repeater_observer_mqtt (see comment block above). -[env:LilyGo_TLora_V2_1_1_6_room_server_observer_mqtt] +; TEMPORARILY EXCLUDED — see the repeater env above. +[env:LilyGo_TLora_V2_1_1_6_room_server_observer_mqtt_] extends = LilyGo_TLora_V2_1_1_6_core extra_scripts = ${esp32_base.extra_scripts}