OTA downloads always failed because GitHub's browser_download_url returns a 301/302 redirect to a signed objects.githubusercontent.com URL, which HTTPUpdate doesn't follow by default. Now sets HTTPC_STRICT_FOLLOW_REDIRECTS before downloading. Update results (success and failure) are now shown as a persistent info screen requiring an explicit tap to dismiss, instead of a 1.2-1.5s auto-vanishing message followed by an automatic restart - a firmware update result is important enough that it shouldn't be missable. Also fixes long dynamic titles (e.g. "Update available: v3.5.0") and the installing-progress label overflowing the screen edge in some languages. Release workflow no longer renames the build artifact to CYD-flightradar.bin before upload; the release asset is just firmware.bin now, matching what OtaUpdate::checkForUpdate() looks for. CLAUDE.md's release workflow updated to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
2.1 KiB
C++
43 lines
2.1 KiB
C++
#pragma once
|
|
#include <Arduino.h>
|
|
|
|
// Firmware-Update ueber WLAN (Menue > System > "Nach Update suchen") -
|
|
// prueft gegen die neueste Version im GitHub-Repository (Releases-API) und
|
|
// installiert sie bei Bestaetigung direkt auf dem Geraet, ohne Kabel/
|
|
// Web-Flasher. Blockierende, synchrone HTTPS-Aufrufe - werden nur bei
|
|
// explizitem Tastendruck ausgefuehrt (kein Hintergrund-Polling), analog zu
|
|
// AircraftDetails' Modell-/Routen-Abfragen, nur eben auf Core 1 statt
|
|
// Core 0, da hier direkt auf Nutzer-Interaktion reagiert wird.
|
|
namespace OtaUpdate {
|
|
|
|
enum class CheckResult { Error, UpToDate, UpdateAvailable };
|
|
|
|
struct CheckInfo {
|
|
CheckResult result = CheckResult::Error;
|
|
// Neueste verfuegbare Version OHNE "v"-Praefix (z.B. "3.5.0") -
|
|
// sowohl bei UpToDate als auch bei UpdateAvailable gesetzt, damit
|
|
// der aufrufende Screen sie in beiden Faellen anzeigen kann.
|
|
char latestVersion[16] = {0};
|
|
// Direkter Download-Link zur firmware.bin des Releases - nur
|
|
// gesetzt, wenn result == UpdateAvailable.
|
|
char downloadUrl[192] = {0};
|
|
};
|
|
|
|
// Fragt die GitHub-Releases-API nach dem neuesten Release ab, vergleicht
|
|
// dessen Versionsnummer (Tag-Name, "v"-Praefix wird ignoriert) gegen
|
|
// Config::APP_VERSION und sucht im Release den Anhang "firmware.bin".
|
|
// CheckResult::Error bei jedem Fehler unterwegs (kein WLAN, Zeitueber-
|
|
// schreitung, unerwartetes JSON, kein firmware.bin im Release).
|
|
CheckInfo checkForUpdate();
|
|
|
|
// Laedt die firmware.bin von 'url' herunter und flasht sie (ueber die
|
|
// Standard-Arduino-HTTPUpdate-Bibliothek). Ruft bei Erfolg BEWUSST
|
|
// NICHT selbst ESP.restart() auf - der Aufrufer zeigt zuerst eine
|
|
// kurze Erfolgsmeldung an und startet danach selbst neu. onProgress
|
|
// wird waehrend des Downloads wiederholt mit 0-100 (Prozent) aufgerufen
|
|
// (darf nullptr sein). Gibt false zurueck, wenn Download oder Flash-
|
|
// Vorgang fehlschlagen - das Geraet laeuft in dem Fall unveraendert mit
|
|
// der bisherigen Firmware weiter.
|
|
bool performUpdate(const char* url, void (*onProgress)(uint8_t percent));
|
|
}
|