diff --git a/main/ota/ota_manager.c b/main/ota/ota_manager.c new file mode 100644 index 0000000..a528fab --- /dev/null +++ b/main/ota/ota_manager.c @@ -0,0 +1,33 @@ +#include "ota_manager.h" + +#include "esp_log.h" +#include "esp_ota_ops.h" +#include "esp_http_client.h" +#include "esp_https_ota.h" + +static const char *TAG = "ota"; + +esp_err_t ota_update_from_url(const char *url) +{ + ESP_LOGI(TAG, "Starting OTA from: %s", url); + + esp_http_client_config_t config = { + .url = url, + .timeout_ms = 120000, + .buffer_size = 4096, + }; + + esp_https_ota_config_t ota_config = { + .http_config = &config, + }; + + esp_err_t ret = esp_https_ota(&ota_config); + if (ret == ESP_OK) { + ESP_LOGI(TAG, "OTA successful, restarting..."); + esp_restart(); + } else { + ESP_LOGE(TAG, "OTA failed: %s", esp_err_to_name(ret)); + } + + return ret; +} diff --git a/main/ota/ota_manager.h b/main/ota/ota_manager.h new file mode 100644 index 0000000..28dd6ff --- /dev/null +++ b/main/ota/ota_manager.h @@ -0,0 +1,12 @@ +#pragma once + +#include "esp_err.h" + +/** + * Perform OTA firmware update from a URL. + * Downloads the firmware binary and applies it. Reboots on success. + * + * @param url HTTPS URL to the firmware .bin file + * @return ESP_OK on success (device will reboot), error code otherwise + */ +esp_err_t ota_update_from_url(const char *url);