mirror of
https://github.com/esphome/esphome.git
synced 2026-05-30 23:54:04 +08:00
Use WatchdogManager for OTA on ESP32
This commit is contained in:
@@ -24,6 +24,8 @@ def AUTO_LOAD() -> list[str]:
|
|||||||
components = ["safe_mode"]
|
components = ["safe_mode"]
|
||||||
if not CORE.using_zephyr:
|
if not CORE.using_zephyr:
|
||||||
components.extend(["md5"])
|
components.extend(["md5"])
|
||||||
|
if CORE.is_esp32:
|
||||||
|
components.extend(["watchdog"])
|
||||||
return components
|
return components
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "ota_backend_esp_idf.h"
|
#include "ota_backend_esp_idf.h"
|
||||||
|
|
||||||
#include "esphome/components/md5/md5.h"
|
#include "esphome/components/md5/md5.h"
|
||||||
|
#include "esphome/components/watchdog/watchdog.h"
|
||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
|
|
||||||
@@ -28,29 +29,9 @@ OTAResponseTypes IDFOTABackend::begin(size_t image_size) {
|
|||||||
return OTA_RESPONSE_ERROR_NO_UPDATE_PARTITION;
|
return OTA_RESPONSE_ERROR_NO_UPDATE_PARTITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_ESP_TASK_WDT_TIMEOUT_S < 15
|
watchdog::WatchdogManager watchdog(15000);
|
||||||
// The following function takes longer than the 5 seconds timeout of WDT
|
|
||||||
esp_task_wdt_config_t wdtc;
|
|
||||||
wdtc.idle_core_mask = 0;
|
|
||||||
#if CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0
|
|
||||||
wdtc.idle_core_mask |= (1 << 0);
|
|
||||||
#endif
|
|
||||||
#if CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1
|
|
||||||
wdtc.idle_core_mask |= (1 << 1);
|
|
||||||
#endif
|
|
||||||
wdtc.timeout_ms = 15000;
|
|
||||||
wdtc.trigger_panic = false;
|
|
||||||
esp_task_wdt_reconfigure(&wdtc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
esp_err_t err = esp_ota_begin(this->partition_, image_size, &this->update_handle_);
|
esp_err_t err = esp_ota_begin(this->partition_, image_size, &this->update_handle_);
|
||||||
|
|
||||||
#if CONFIG_ESP_TASK_WDT_TIMEOUT_S < 15
|
|
||||||
// Set the WDT back to the configured timeout
|
|
||||||
wdtc.timeout_ms = CONFIG_ESP_TASK_WDT_TIMEOUT_S * 1000;
|
|
||||||
esp_task_wdt_reconfigure(&wdtc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
esp_ota_abort(this->update_handle_);
|
esp_ota_abort(this->update_handle_);
|
||||||
this->update_handle_ = 0;
|
this->update_handle_ = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user