/* 「重启不断电」的 ESP 胶水(2026-09-27,需求 SR-6 改写)。只在 IDF 目标里有;说明在 warm_esp.c 文件头。 */ #ifndef WARM_ESP_H #define WARM_ESP_H #include #include #include "esp_partition.h" #include "esp_system.h" /* 启动时调(app_main 最前面、bringup 之前):这次是不是**我们自己计划的**重启、 重启前哪几路开着。返回 bringup 的 `adopt`(bit0 = CH1);不是 = 0。标记一次性,读完就作废。 还会核对那几根 EN 脚**线上**真的是高(hold 真的生效了);是低的那几路不接管。 */ uint8_t warm_take(esp_reset_reason_t why); /* 这个分区里的固件认不认「接管」(镜像头后面的能力标记)。认不了的固件起来会照常把 EN 写低, 但写不到被锁住的线上 —— 五路从此关不掉,所以对它**不许**锁。 */ bool warm_target_ok(const esp_partition_t *part); /* 计划内重启:目标固件认接管 ⇒ 记下开着的路、锁住五根 EN、重启;不认 ⇒ 照老样子重启(五路全断一次)。 `rollback` = 标记当前固件无效、回滚到另一个槽(esp_ota_mark_app_invalid_rollback_and_reboot)。不返回。 */ void warm_restart(bool rollback); #endif /* WARM_ESP_H */