mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-04 20:54:42 +00:00

Some checks failed
CI / setup (check) (push) Waiting to run
CI / setup (esp32) (push) Waiting to run
CI / setup (esp32c3) (push) Waiting to run
CI / setup (esp32c6) (push) Waiting to run
CI / setup (esp32s3) (push) Waiting to run
CI / setup (nrf52840) (push) Waiting to run
CI / setup (rp2040) (push) Waiting to run
CI / setup (stm32) (push) Waiting to run
CI / check (push) Blocked by required conditions
CI / build-esp32 (push) Blocked by required conditions
CI / build-esp32-s3 (push) Blocked by required conditions
CI / build-esp32-c3 (push) Blocked by required conditions
CI / build-esp32-c6 (push) Blocked by required conditions
CI / build-nrf52 (push) Blocked by required conditions
CI / build-rpi2040 (push) Blocked by required conditions
CI / build-stm32 (push) Blocked by required conditions
CI / build-debian-src (push) Waiting to run
CI / package-pio-deps-native-tft (push) Waiting to run
CI / test-native (push) Waiting to run
CI / docker-debian-amd64 (push) Waiting to run
CI / docker-alpine-amd64 (push) Waiting to run
CI / docker-debian-arm64 (push) Waiting to run
CI / docker-debian-armv7 (push) Waiting to run
CI / after-checks (push) Blocked by required conditions
CI / gather-artifacts (esp32) (push) Blocked by required conditions
CI / gather-artifacts (esp32c3) (push) Blocked by required conditions
CI / gather-artifacts (esp32c6) (push) Blocked by required conditions
CI / gather-artifacts (esp32s3) (push) Blocked by required conditions
CI / gather-artifacts (nrf52840) (push) Blocked by required conditions
CI / gather-artifacts (rp2040) (push) Blocked by required conditions
CI / gather-artifacts (stm32) (push) Blocked by required conditions
CI / release-artifacts (push) Blocked by required conditions
CI / release-firmware (esp32) (push) Blocked by required conditions
CI / release-firmware (esp32c3) (push) Blocked by required conditions
CI / release-firmware (esp32c6) (push) Blocked by required conditions
CI / release-firmware (esp32s3) (push) Blocked by required conditions
CI / release-firmware (nrf52840) (push) Blocked by required conditions
CI / release-firmware (rp2040) (push) Blocked by required conditions
CI / release-firmware (stm32) (push) Blocked by required conditions
Nightly / Trunk Check and Upload (push) Has been cancelled
Nightly / Trunk Upgrade (PR) (push) Has been cancelled
* Support WiFi OTA * Fix trunk warnings * Make getVersion() check for project name too --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
#include "WiFiOTA.h"
|
|
#include "configuration.h"
|
|
#include <Preferences.h>
|
|
#include <esp_ota_ops.h>
|
|
|
|
namespace WiFiOTA
|
|
{
|
|
|
|
static const char *nvsNamespace = "ota-wifi";
|
|
static const char *appProjectName = "OTA-WiFi";
|
|
|
|
static bool updated = false;
|
|
|
|
bool isUpdated()
|
|
{
|
|
return updated;
|
|
}
|
|
|
|
void initialize()
|
|
{
|
|
Preferences prefs;
|
|
prefs.begin(nvsNamespace);
|
|
if (prefs.getBool("updated")) {
|
|
LOG_INFO("First boot after OTA update");
|
|
updated = true;
|
|
prefs.putBool("updated", false);
|
|
}
|
|
prefs.end();
|
|
}
|
|
|
|
void recoverConfig(meshtastic_Config_NetworkConfig *network)
|
|
{
|
|
LOG_INFO("Recovering WiFi settings after OTA update");
|
|
|
|
Preferences prefs;
|
|
prefs.begin(nvsNamespace, true);
|
|
String ssid = prefs.getString("ssid");
|
|
String psk = prefs.getString("psk");
|
|
prefs.end();
|
|
|
|
network->wifi_enabled = true;
|
|
strncpy(network->wifi_ssid, ssid.c_str(), sizeof(network->wifi_ssid));
|
|
strncpy(network->wifi_psk, psk.c_str(), sizeof(network->wifi_psk));
|
|
}
|
|
|
|
void saveConfig(meshtastic_Config_NetworkConfig *network)
|
|
{
|
|
LOG_INFO("Saving WiFi settings for upcoming OTA update");
|
|
|
|
Preferences prefs;
|
|
prefs.begin(nvsNamespace);
|
|
prefs.putString("ssid", network->wifi_ssid);
|
|
prefs.putString("psk", network->wifi_psk);
|
|
prefs.putBool("updated", false);
|
|
prefs.end();
|
|
}
|
|
|
|
const esp_partition_t *getAppPartition()
|
|
{
|
|
return esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, NULL);
|
|
}
|
|
|
|
bool getAppDesc(const esp_partition_t *part, esp_app_desc_t *app_desc)
|
|
{
|
|
if (esp_ota_get_partition_description(part, app_desc) != ESP_OK)
|
|
return false;
|
|
if (strcmp(app_desc->project_name, appProjectName) != 0)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
bool trySwitchToOTA()
|
|
{
|
|
const esp_partition_t *part = getAppPartition();
|
|
esp_app_desc_t app_desc;
|
|
if (!getAppDesc(part, &app_desc))
|
|
return false;
|
|
if (esp_ota_set_boot_partition(part) != ESP_OK)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
String getVersion()
|
|
{
|
|
const esp_partition_t *part = getAppPartition();
|
|
esp_app_desc_t app_desc;
|
|
if (!getAppDesc(part, &app_desc))
|
|
return String();
|
|
return String(app_desc.version);
|
|
}
|
|
|
|
} // namespace WiFiOTA
|