feat(ota): 会话 epoch/通道标识 + BLE 中止命令 + NVS 线程安全

- 新增 ota_channel_t(WiFi/BLE) + m_otaEpoch 会话代次,
  abortCurrentIfEpoch 防止同类型重启后旧 handler 误清新会话
- 同通道再次发起 OTA 时自动中止旧会话并重开
- 统一 prepareGd32Storage(validate+begin+erase+meta),
  消除 BLE/WiFi 两路径隐式差异
- OtaRelay 拆分子步骤(doRelayPackets/doFinishAndVerify),
  状态成员私有化消除数据竞争
- Gd32FlashStore NVS 读写加 mutex,metaUpdate 原子化
- BLE OTA 新增 0xFB 中止命令(保持连接)+ 0x20 ABORTED 处理
- HTTP handler 改 per-request buffer 支持并发
- 修复 CRITICAL 状态 RSSI 恢复无法降级的缺陷
- main.cpp 关键任务失败触发看门狗重启
- style.css 增强动画 + prefers-reduced-motion 兼容
This commit is contained in:
小龙虾
2026-06-28 04:32:18 +08:00
parent 6ef97307c3
commit a93dba60d2
41 changed files with 3142 additions and 6349 deletions
+18
View File
@@ -130,6 +130,24 @@ private:
*/
void resetState();
// begin() 失败后的统一清理:释放 mutex + resetState() + 返回 code
// 不调 esp_ota_abort(begin 失败时 m_handle 未成功创建)
/**
* @brief begin() 失败后的统一清理。
* @param code 返回给调用方的错误码。
* @return 透传 code。
*/
esp_err_t beginCleanupAndReturn(esp_err_t code);
// finalize() 失败后的统一清理:若 m_ended=false 调 esp_ota_abort 释放 handle;
// 再复位 m_ended + 释放 mutex + resetState() + 返回 code
/**
* @brief finalize() 失败后的统一清理。
* @param code 返回给调用方的错误码。
* @return 透传 code。
*/
esp_err_t finalizeCleanupAndReturn(esp_err_t code);
bool m_active = false;
esp_ota_handle_t m_handle = 0;
const esp_partition_t *m_partition = nullptr;