This commit is contained in:
76
lib/fetchOTA/fetchOTA.cpp
Normal file
76
lib/fetchOTA/fetchOTA.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef UNIT_TEST
|
||||
#include <fetchOTA.h>
|
||||
|
||||
|
||||
#include "Arduino.h"
|
||||
#include <ArduinoJson.h>
|
||||
#include <HTTPClient.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
||||
OTA::OTA(String server_url, String currentVersion, String currentDeviceConfiguration) {
|
||||
_serverUrl = server_url;
|
||||
_currentVersion = parseVersion(currentVersion.c_str());
|
||||
_current_device_configuration = currentDeviceConfiguration;
|
||||
}
|
||||
|
||||
|
||||
Firmware OTA::getLatestVersionOnServer() {
|
||||
HTTPClient http;
|
||||
http.begin(_serverUrl);
|
||||
int httpCode = http.GET();
|
||||
|
||||
if (httpCode != 200) {
|
||||
return createErrorResponse("HTTP GET request failed with code " + String(httpCode));
|
||||
}
|
||||
|
||||
String payload = http.getString();
|
||||
DynamicJsonDocument doc(4096);
|
||||
DeserializationError error = deserializeJson(doc, payload);
|
||||
|
||||
if (error) {
|
||||
return createErrorResponse("Failed to deserialize JSON");
|
||||
}
|
||||
|
||||
if (!doc.containsKey("Configurations")) {
|
||||
return createErrorResponse("JSON response does not contain a 'Configurations' key");
|
||||
}
|
||||
|
||||
std::vector<Configuration> configs;
|
||||
for (JsonObject config : doc["Configurations"].as<JsonArray>()) {
|
||||
if (config.containsKey("Version") && config.containsKey("URL")) {
|
||||
configs.push_back(Configuration{
|
||||
parseVersion(config["Version"]),
|
||||
config["URL"],
|
||||
config["Board"],
|
||||
config["Configuration"]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (configs.empty()) {
|
||||
return createErrorResponse("No valid configuration found in the JSON response");
|
||||
}
|
||||
|
||||
Configuration latest = getLatestConfiguration(configs.data(), configs.size());
|
||||
return Firmware{
|
||||
latest.version,
|
||||
latest.url,
|
||||
true,
|
||||
""
|
||||
};
|
||||
}
|
||||
|
||||
Firmware OTA::createErrorResponse(const String& errorMsg) {
|
||||
return Firmware{
|
||||
Version{0, 0, 0},
|
||||
"",
|
||||
false,
|
||||
errorMsg
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user