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.
164 lines
3.4 KiB
C++
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();
|
|
}
|