Files
filamentguard_esp32/src/FirmwareUpdater.cpp
Bjarne Pedersen d757e13ce6 Version 1 færdig
Læser og kalder API som det skal.
OTA virker
Opsætning af wifi via ESP32's eget hotspot virker

Mangler at få lavet skrivning, men det bliver v2.
2026-07-27 14:33:06 +02:00

164 lines
3.4 KiB
C++

#include "FirmwareUpdater.h"
#include <Arduino.h>
#include <SPIFFS.h>
#include <WiFi.h>
#include <esp32FOTA.hpp>
namespace
{
constexpr const char* FirmwareType =
"filamentguard";
constexpr const char* FirmwareVersion =
"1.0.2";
constexpr const char* ManifestUrl =
"https://ota-filamentguard.maximuss.dk/firmware/manifest.json";
esp32FOTA firmwareUpdate(
FirmwareType,
FirmwareVersion);
CryptoFileAsset rootCertificate(
"/root_ca.pem",
&SPIFFS);
}
FirmwareUpdater::FirmwareUpdater(
FilamentGuardLogger& newLogger)
: logger(newLogger)
{
}
bool FirmwareUpdater::begin()
{
logger.info(
"FirmwareUpdater",
"Starter firmware-opdatering.");
if (!SPIFFS.begin(false))
{
logger.error(
"FirmwareUpdater",
"Kunne ikke starte SPIFFS.");
return false;
}
if (!SPIFFS.exists("/root_ca.pem"))
{
logger.error(
"FirmwareUpdater",
"Certifikatet findes ikke.",
"{\"certificate\":\"/root_ca.pem\"}");
return false;
}
firmwareUpdate.setManifestURL(
ManifestUrl);
firmwareUpdate.setRootCA(
&rootCertificate);
firmwareUpdate.setProgressCb(
[this](
const size_t progress,
const size_t total)
{
if (total == 0)
{
return;
}
const unsigned int percentage =
static_cast<unsigned int>(
(progress * 100) / total);
static unsigned int lastLoggedPercentage =
101;
const bool shouldLog =
percentage == 100 ||
percentage / 10 !=
lastLoggedPercentage / 10;
if (!shouldLog)
{
return;
}
lastLoggedPercentage =
percentage;
const String progressData =
String("{\"percentage\":") +
percentage +
",\"downloadedBytes\":" +
progress +
",\"totalBytes\":" +
total +
"}";
logger.info(
"FirmwareUpdater",
"Firmware downloades.",
progressData);
});
const String firmwareData =
String("{\"firmwareType\":\"") +
FirmwareType +
"\",\"firmwareVersion\":\"" +
FirmwareVersion +
"\",\"manifestUrl\":\"" +
ManifestUrl +
"\"}";
logger.info(
"FirmwareUpdater",
"Firmware-opdatering er klar.",
firmwareData);
return true;
}
void FirmwareUpdater::checkForUpdate()
{
if (WiFi.status() != WL_CONNECTED)
{
logger.error(
"FirmwareUpdater",
"Firmwarekontrol sprunget over: Wi-Fi er ikke forbundet.");
return;
}
logger.info(
"FirmwareUpdater",
"Kontrollerer efter ny firmware.");
const bool updateAvailable =
firmwareUpdate.execHTTPcheck();
if (!updateAvailable)
{
logger.info(
"FirmwareUpdater",
"Ingen ny firmware fundet.");
return;
}
logger.info(
"FirmwareUpdater",
"Ny firmware fundet.");
logger.info(
"FirmwareUpdater",
"Downloader og installerer firmware.");
firmwareUpdate.execOTA();
}