From 7da8b335ab973ce99a8fdae1d41b3af234921688 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Tue, 21 Apr 2026 22:16:23 +0200 Subject: [PATCH] Review comments --- .github/workflows/release.yml | 21 +----- .github/workflows/release_candidate.yml | 13 +--- scripts/patch_min_chip_rev.py | 64 +++++++++++++++++++ .../network/WifiSelectionActivity.cpp | 5 ++ src/main.cpp | 9 ++- src/network/OtaUpdater.cpp | 22 ++----- src/network/OtaUpdater.h | 1 - 7 files changed, 82 insertions(+), 53 deletions(-) create mode 100644 scripts/patch_min_chip_rev.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 360e9076..bcd73969 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,26 +29,7 @@ jobs: run: pio run -e gh_release - name: Patch min_chip_rev_full to 0 - run: | - python3 - <<'EOF' - import struct, sys - # esp_image_header_t (8 bytes) + extended header: - # offset 0: wp_pin (B) - # offset 1: clk/q drv (B) - # offset 2: d/cs drv (B) - # offset 3: hd/wp drv (B) - # offset 4: chip_id (H, 2 bytes) - # offset 6: min_rev (B) - # offset 7: min_rev_full (H, 2 bytes) <-- patch target - MIN_REV_FULL_OFFSET = 8 + 7 - path = ".pio/build/gh_release/firmware.bin" - with open(path, "r+b") as f: - f.seek(MIN_REV_FULL_OFFSET) - old = struct.unpack(" 0.0") - f.seek(MIN_REV_FULL_OFFSET) - f.write(struct.pack(" 0.0") - f.seek(MIN_REV_FULL_OFFSET) - f.write(struct.pack(" None: + with open(path, "r+b") as f: + data = bytearray(f.read()) + + if data[0] != 0xE9: + print(f"ERROR: {path}: not a valid ESP image (magic=0x{data[0]:02x})", file=sys.stderr) + sys.exit(1) + + old = struct.unpack_from(" v0.0") + struct.pack_into("", file=sys.stderr) + sys.exit(1) + patch(sys.argv[1]) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 5235ea4c..1c45441b 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -280,6 +280,11 @@ bool WifiSelectionActivity::checkCaptivePortal() { String location = http.getLocation(); http.end(); + if (code < 0) { + LOG_DBG("WIFI", "Captive portal probe failed (connection error %d)", code); + return false; + } + if (code == 204) { return false; // Open internet, no captive portal } diff --git a/src/main.cpp b/src/main.cpp index 456d2bb3..f1914ee5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,7 +31,6 @@ #include "util/ButtonNavigator.h" #include "util/ScreenshotUtil.h" - MappedInputManager mappedInputManager(gpio); GfxRenderer renderer(display); ActivityManager activityManager(renderer, mappedInputManager); @@ -182,7 +181,13 @@ void setupDisplayAndFonts() { } void setup() { - esp_ota_mark_app_valid_cancel_rollback(); + { + esp_ota_img_states_t otaState; + const esp_partition_t* running = esp_ota_get_running_partition(); + if (esp_ota_get_state_partition(running, &otaState) == ESP_OK && otaState == ESP_OTA_IMG_PENDING_VERIFY) { + esp_ota_mark_app_valid_cancel_rollback(); + } + } HalSystem::begin(); gpio.begin(); powerManager.begin(); diff --git a/src/network/OtaUpdater.cpp b/src/network/OtaUpdater.cpp index e08ecac4..732b2e3f 100644 --- a/src/network/OtaUpdater.cpp +++ b/src/network/OtaUpdater.cpp @@ -201,7 +201,10 @@ const std::string& OtaUpdater::getLatestVersion() const { return latestVersion; void OtaUpdater::cleanupUpdate() { if (otaHandle) { - esp_https_ota_finish(otaHandle); + const esp_err_t err = esp_https_ota_finish(otaHandle); + if (err != ESP_OK) { + LOG_ERR("OTA", "esp_https_ota_finish on cleanup: %s", esp_err_to_name(err)); + } otaHandle = nullptr; } cancelRequested = false; @@ -365,20 +368,3 @@ OtaUpdater::OtaUpdaterError OtaUpdater::performInstallUpdateStep() { LOG_INF("OTA", "Update completed"); return OK; } - -OtaUpdater::OtaUpdaterError OtaUpdater::installUpdate() { - const auto beginResult = beginInstallUpdate(); - if (beginResult != UPDATE_IN_PROGRESS) { - return beginResult; - } - - OtaUpdaterError result; - do { - result = performInstallUpdateStep(); - if (result == UPDATE_IN_PROGRESS) { - delay(100); - } - } while (result == UPDATE_IN_PROGRESS); - - return result; -} diff --git a/src/network/OtaUpdater.h b/src/network/OtaUpdater.h index 26812fa3..4ed2b1a9 100644 --- a/src/network/OtaUpdater.h +++ b/src/network/OtaUpdater.h @@ -51,7 +51,6 @@ class OtaUpdater { OtaUpdaterError performInstallUpdateStep(); void cancelUpdate(); void cleanupUpdate(); - OtaUpdaterError installUpdate(); private: static int forceSetOtaBootPartition();