docs: 新增 .qoder Repowiki 知识库文档
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
||||
schema_version: 1
|
||||
module_path: js_frontend/ota
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
scope:
|
||||
- js/ota/
|
||||
source_files: []
|
||||
depends_on: []
|
||||
related_to:
|
||||
- path: js_frontend/ble
|
||||
reason: 两者均为浏览器端固件升级方案:js/ota 走 WiFi ESP32 HTTP(分块上传+SHA-256),js/ble 走 Web Bluetooth GATT(分包 ACK+窗口+SHA-256),同一业务目标的不同实现。
|
||||
kk_module_id: 697d6afd-9c08-42a6-900d-2b51dd09c507
|
||||
kk_ordinal: 1
|
||||
kk_cards:
|
||||
architecture_design:
|
||||
id: 7e17f40a-f0ea-4d4d-bba0-99559868e617
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
coding_conventions:
|
||||
id: 79bc6166-c07c-4910-b704-f898340b0b69
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
overview:
|
||||
id: 95c1a351-1033-42a9-a77b-086cd3d5186c
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
tech_stack:
|
||||
id: b16589eb-b0da-4e30-960e-4a0d3b051ed3
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
unique_setup_and_commands:
|
||||
id: 93240d0d-1e8c-4a7d-9f5f-9e26a332988e
|
||||
title: 前端 OTA 刷写会话与进度管理
|
||||
+1
@@ -0,0 +1 @@
|
||||
纯浏览器端 JavaScript (ES Module),使用 IndexedDB 持久化 FileSystemFileHandle 实现刷新后热重载恢复;XHR+fetch 混合进行文件分块上传;通过 ES import 引入 ../common/*(log、toast、utils、connection)。
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
模块以**集中式会话状态机**(session.js)为核心,定义 IDLE→UPLOADING/VERIFYING/RELAYING/REBOOTING→DONE/FAILED 的状态流转,所有 UI、上传、轮询通过 window.* 全局总线共享 otaSessionState / otaSessionTarget / activeUploadChip 等标志,避免分散布尔位导致的“网络错误后轮询覆盖”问题。
|
||||
- 入口编排:console-mode.js 接管 switchStageFlow,提供 WiFi/BLE/ESP32/GD32 多通道目标切换与共享固件文件同步;upload-esp32.js 作为统一入口 startUpload(chip) 处理互斥探测、热重载重读、XHR 分块上传、SHA-256 校验与设备重启。
|
||||
- 后端协议:upload-gd32.js 仅负责 POST /ota/relay 触发 GD32 中继,并通过 emitRelayProgress/markGd32OtaUiComplete/startRelayProgressWatch 与 stages.js 中的 status 轮询路径协同;ECT 负载显示由独立的 ecat_load.js 基于 /ecat/api/app/load 退避轮询。
|
||||
- UI 层:progress.js 维护折叠面板、阶段节点 es1..es6/s1..s6 与进度条;stages.js 把 relay_state/sys_state_code 映射到 GD32 阶段节点并调用 progress 更新仪表盘;file-handle.js 封装 HEX→BIN、IndexedDB FSAPI handle 持久化、localStorage 偏好(flashTarget、文件元信息)。
|
||||
- 依赖方向单向:console-mode → upload-* → session + progress + file-handle,stages/ecat_load 消费 session/progress,无任何反向引用。
|
||||
+1
@@ -0,0 +1 @@
|
||||
为 ESP32/GD32/DPU 提供浏览器侧的固件选择、分块上传、校验、中继触发与会话状态机,并渲染阶段节点与进度条。
|
||||
+1
@@ -0,0 +1 @@
|
||||
无构建脚本——模块由 HTML 页面直接按模块加载;EtherCAT 负载显示需主站 esp32_server 打开 ECAT native 循环并提供 /api/app/load,本模块仅做 100ms 退避轮询(失败→5s→30s),不强制拉起后端。
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
- 跨模块共享可变状态统一挂载在 window.* 上(如 isUploading、activeXhr、otaSessionState、activeUploadChip),各模块通过导入函数访问,而非显式传参。
|
||||
- 所有会话生命周期变更必须经由 session.js 的 otaSessionTransition() 驱动,禁止直接修改窗口标志,保证是Uploading/Verify/Reboot/Done/Fail 等终态时自动清理按钮、阶段与定时器。
|
||||
- 失败路径统一调用 progress.cleanupAfterOtaFailure(reason) 进入 FAILED 态并清除残留 DOM/定时器/进程句柄,使后续 status 轮询不会覆盖失败 UI。
|
||||
- DOM 写入采用「先比较后写入」模式(setNodeText/setNodeClass/setTitle)或缓存 lastDisplayedRelayState,避免每秒轮询时无条件赋值导致样式失效重排。
|
||||
- 长耗时用户操作(选文件、热重载、请求)均包裹 try/catch 并以 addLog('W'/'E','OTA'/'文件',...) 记录,同时用 showToast 给出用户可见反馈,区分日志与提示。
|
||||
- 轮询器以幂等的 start*/stop* 成对暴露(stopRelayProgressWatch、startUploadWaitHeartbeat、startEcatLoadPoller),内部持 timerId 并在页面无对应元素或已运行时直接 return,避免重复调度。
|
||||
Reference in New Issue
Block a user