mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-13 10:15:00 +00:00
57 lines
1.7 KiB
C
57 lines
1.7 KiB
C
#include "arch.h"
|
|
|
|
#if MG_ARCH == MG_ARCH_ESP32 && MG_OTA == MG_OTA_ESP32
|
|
|
|
static const esp_partition_t *s_ota_update_partition;
|
|
static esp_ota_handle_t s_ota_update_handle;
|
|
static bool s_ota_success;
|
|
|
|
// Those empty macros do nothing, but mark places in the code which could
|
|
// potentially trigger a watchdog reboot due to the log flash erase operation
|
|
#define disable_wdt()
|
|
#define enable_wdt()
|
|
|
|
bool mg_ota_begin(size_t new_firmware_size) {
|
|
if (s_ota_update_partition != NULL) {
|
|
MG_ERROR(("Update in progress. Call mg_ota_end() ?"));
|
|
return false;
|
|
} else {
|
|
s_ota_success = false;
|
|
disable_wdt();
|
|
s_ota_update_partition = esp_ota_get_next_update_partition(NULL);
|
|
esp_err_t err = esp_ota_begin(s_ota_update_partition, new_firmware_size,
|
|
&s_ota_update_handle);
|
|
enable_wdt();
|
|
MG_DEBUG(("esp_ota_begin(): %d", err));
|
|
s_ota_success = (err == ESP_OK);
|
|
}
|
|
return s_ota_success;
|
|
}
|
|
|
|
bool mg_ota_write(const void *buf, size_t len) {
|
|
disable_wdt();
|
|
esp_err_t err = esp_ota_write(s_ota_update_handle, buf, len);
|
|
enable_wdt();
|
|
MG_INFO(("esp_ota_write(): %d", err));
|
|
s_ota_success = err == ESP_OK;
|
|
return s_ota_success;
|
|
}
|
|
|
|
bool mg_ota_end(void) {
|
|
esp_err_t err = esp_ota_end(s_ota_update_handle);
|
|
MG_DEBUG(("esp_ota_end(%p): %d", s_ota_update_handle, err));
|
|
if (s_ota_success && err == ESP_OK) {
|
|
err = esp_ota_set_boot_partition(s_ota_update_partition);
|
|
s_ota_success = (err == ESP_OK);
|
|
}
|
|
MG_DEBUG(("Finished ESP32 OTA, success: %d", s_ota_success));
|
|
s_ota_update_partition = NULL;
|
|
if (s_ota_success) {
|
|
MG_OTA_STATE_SET(MG_OTA_TESTING);
|
|
esp_restart();
|
|
}
|
|
return s_ota_success;
|
|
}
|
|
|
|
#endif
|