#ifndef UNIT_TEST #include #include "Arduino.h" #include #include #include 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 configs; for (JsonObject config : doc["Configurations"].as()) { 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