From c40fd24c1a4a421102a086536b9ed0894e827279 Mon Sep 17 00:00:00 2001 From: super_agent_bot Date: Fri, 6 Nov 2026 18:34:33 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E6=95=85=E9=9A=9C=E5=BD=95=E6=B3=A2):=20?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E5=B9=95=E5=B0=BE=E6=AD=A5=E5=9D=8F=E6=AE=B5?= =?UTF-8?q?/=E7=A9=BA=E6=80=81=E7=94=BB=E9=9D=A2=E6=9D=BF=E7=BA=A7?= =?UTF-8?q?=E9=97=AD=E7=8E=AF=E5=85=A5=E6=A1=A3=EF=BC=88#68=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同号翻位覆盖列内段 WAVE06 → 回放页显式「该段不可读」(零波形元素, 判据「绝不许画直线」过);全删段 → 「无录波段」空态 + 串口 open fail fr=4 互证。证据目录 wave_shot_20261106:三态 PNG 与原始 帧、坏样本与原件、PC 侧 wave_read REJECT 实录、串口摘录、sha256 清单。收工:板上九件原件逐件 sha 复验恢复、坏样本不留板(§7 二 选一取删除),UI 停 STANDBY。发现 F1(STOR 新文件不进钉表,需同 号顶当前段或手动录波触发重扫)与 F2(数据 CRC 判废串口静默、画 面自证)记 §10。同步销项:手册第二幕状态与现场记录表第 3 行、 设计说明 §10「回放页坏段/空态画面闭环记录」、任务规划 README §2.0 独立行。本轮不改代码。关联 #68 #38。 --- docs/任务规划/README.md | 2 +- docs/子系统设计/故障录波设计说明.md | 41 +++- .../专项验证/故障录波板级到场轮执行手册.md | 13 +- .../测试数据/wave_shot_20261106/README.md | 74 +++++++ .../after_restore_page_normal.png | Bin 0 -> 1690 bytes .../after_restore_page_normal_raw3200.bin | Bin 0 -> 3200 bytes .../arrival_open_waveplay.png | Bin 0 -> 1690 bytes .../arrival_open_waveplay_raw3200.bin | Bin 0 -> 3200 bytes .../bad_segment_reject_wave06.png | Bin 0 -> 971 bytes .../bad_segment_reject_wave06_raw3200.bin | Bin 0 -> 3200 bytes .../empty_state_no_segments.png | Bin 0 -> 949 bytes .../empty_state_no_segments_raw3200.bin | Bin 0 -> 3200 bytes .../empty_state_recheck.png | Bin 0 -> 949 bytes .../empty_state_recheck_raw3200.bin | Bin 0 -> 3200 bytes .../good_wave06_sec6_ua.png | Bin 0 -> 2509 bytes .../good_wave06_sec6_ua_raw3200.bin | Bin 0 -> 3200 bytes .../wave_shot_20261106/manifest_sha256.json | 20 ++ .../wave_shot_20261106/pc_side_dump.txt | 44 +++++ .../samples/WAVE06_bitflip_reject.BIN | Bin 0 -> 5250 bytes .../samples/WAVE06_original.BIN | Bin 0 -> 5250 bytes .../samples/WAVE09_seed_bitflip_reject.BIN | Bin 0 -> 5250 bytes .../wave_shot_20261106/serial_excerpt.txt | 180 ++++++++++++++++++ 22 files changed, 368 insertions(+), 6 deletions(-) create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/README.md create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/arrival_open_waveplay.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/arrival_open_waveplay_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/bad_segment_reject_wave06.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/bad_segment_reject_wave06_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/empty_state_no_segments.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/empty_state_no_segments_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/good_wave06_sec6_ua.png create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/good_wave06_sec6_ua_raw3200.bin create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/manifest_sha256.json create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/pc_side_dump.txt create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_bitflip_reject.BIN create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_original.BIN create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE09_seed_bitflip_reject.BIN create mode 100644 docs/测试说明/测试数据/wave_shot_20261106/serial_excerpt.txt diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 4aa134ae..b59e27d0 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -66,7 +66,7 @@ | **6** | 保护元件与采集增强 | 等待标准源或硬件改版 | 保护先解除未标定闭锁;三相同时刻类功能等 V0.2 硬件 | | **7** | 验证窗口事项 | 逢条件顺带 | CI runner、PC peer、CH340、负向故障注入条件到位时执行 | | **8** | 独立模块与暂缓项 | 当前不排 | 开入开出、104 文件传输单独立项(SNTP 已单独立项并于 2026-11-04 落地 #73,:8888 随 #78 退役);RS-485 与内存优化按各自重启条件 | -| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项、2026-11-02 回放页枚举缺陷已修复闭环,余注量对表与人到场项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发);同轮发现的缺陷「回放页段表枚举恒空」**已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错,顺带修键处理缺失效;回放页真段/切段/切道已实测,登记簿条目已销项,证据见设计说明 §10「回放页枚举恒空缺陷修复记录」);**没跑的是注量对表那半轮**(注 1 V / 50 Hz、与 `meas:` 行和 104 浮点遥测对表、回放页放坏段与空态画面)加 P 触发 / bench T 源,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 | +| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项、2026-11-02 回放页枚举缺陷已修复闭环、2026-11-04 注量对表闭环(#40 §8 交流轮)、2026-11-06 第二幕尾步坏段/空态画面台架远程轮拍毕——回放页三态板级判据全部实证;余 P 触发(需标定解锁决定)、bench T 源与卷占用、`task_prof` 耗时峰值等到场/裁定项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发);同轮发现的缺陷「回放页段表枚举恒空」**已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错,顺带修键处理缺失效;回放页真段/切段/切道已实测,登记簿条目已销项,证据见设计说明 §10「回放页枚举恒空缺陷修复记录」);**注量对表半轮已于 2026-11-04 由 #40 §8 交流轮闭环**(幅值 / 相位 / 削顶三项实测,`meas:` 行与板上读数逐项核对,104 浮点遥测按用户裁定不作对照证据;`docs/测试说明/测试数据/boot_log_data/20261104_ac_*`);**回放页放坏段与空态画面已于 2026-11-06 台架远程轮拍毕闭环**(同号翻位覆盖→「该段不可读」零波形元素绝不平线;全删→「无录波段」+ 串口 `open fail fr=4` 互证;证据 `docs/测试说明/测试数据/wave_shot_20261106/`,记录见设计说明 §10「回放页坏段/空态画面闭环记录」);**没跑的只剩** P 触发对时刻(先要标定解锁决定)/ bench T 源与卷占用(需 bench 构建)/ `task_prof` 读路径耗时峰值,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 | ### 2.1 关键依赖 diff --git a/docs/子系统设计/故障录波设计说明.md b/docs/子系统设计/故障录波设计说明.md index bbf3f494..0ac0bc3f 100644 --- a/docs/子系统设计/故障录波设计说明.md +++ b/docs/子系统设计/故障录波设计说明.md @@ -324,7 +324,7 @@ flowchart TD | 跨工具链分叉(实证,写进来是为了下一个模块别重踩) | 两份录波 .c 只 include 自身头(链上只有 stdint.h)时,ARMCC 报 22 条 identifier "NULL" is undefined;而主机 MSVC / gcc 会传递性把 stddef.h 拉进来,**主机单测完全照不出这个分叉** → 新增模块需要用 NULL 就自己 include stddef.h(与 `App/algo/sample_ring.c` 同口径,别塞公共头) | | 板级 | 信号发生器注 1 V / 50 Hz → 手动一段 → FTP 拉回 → PC 脚本量出周波数、幅值、极性与注入一致;再把 PC 重算的基波有效值与板上 `meas:` 对表。**判据只量四样:周波数、幅值、极性、钉轨路数——不比绝对相位**(理由见 §4.2「段内点序」:触发瞬间在工频周期内任意落点,段字节里没有绝对时间参考;真要比相位必须让发生器给同步触发,本波不做)。**钉轨对表的合格判据 = 头位图 ⊇ 实测钉轨路数,且差异必须能由注入条件解释**——因为 `clip_mask` 是按来源派生的链路可信性标记(§6.2 偏移 24 行),不是本段实测值:只加直流或小幅注入时那五路本就不该钉轨,硬取等式会假红。**同段另起一条强观察项**:V0.1 下这五路若在做**交流注入**时反而没钉轨,先怀疑接线或该路根本没被驱动——这是告警面,不是失败面(等式仍作为默认尺子留在 PC 侧 `shape --strict` 里,因为它有这个信号价值;要放行差异用那条判据的解释权,不靠改尺子)。**§5.2 第四条的板级观察项(代码与单测面已有、板级未测)**:bench 连续自抓期间人为把卷占住 2 s 以上(例如同一段跑 FTP 大文件读),看串口 `wave:` 行的 `err` 是否加一、是否只出现**一条** `[ERR] … seg drop: ring abandoned` 留痕(不是每拍刷屏)、且段号不推进(下一段仍写同号文件) | | 板级·触发来路(2026-10-30 并入原卡「手动触发与保护启动接线」板级段) | 真机面板按一次「手动录波」出一段;造一次过流,段号与该时刻 `/log/start.log` 事件对齐;冷却期内二次触发只加 `ovf` 不重录(**同时看 `armed` 与那一刻 start.log 的时刻,不要只盯 `ovf` 数字**——容差见 §9);冻结窗口内 104 上送与保护判据不受影响(这条是「丢录波样本不丢采集」的验收) | -| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面的测试面**已于 2026-11-02 枚举缺陷修复后打开**(真机已验证真段显示 + 切段切道,见下「回放页枚举恒空缺陷修复记录」小节),坏段/空态两画面本身仍是到场轮要拍的项 | +| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面的测试面**已于 2026-11-02 枚举缺陷修复后打开**(真机已验证真段显示 + 切段切道,见下「回放页枚举恒空缺陷修复记录」小节),坏段/空态两画面本身**已于 2026-11-06 台架远程轮拍毕闭环——见下「回放页坏段/空态画面闭环记录」小节,本行判据全部板级实证完毕** | | UI | `ui-verify` 五步;回放页入 `ui-golden` 黄金参考(**参考图一旦入库只能改代码对齐,禁止刷参考掩盖**);新叶走 `gen_menu.py` 重生成 + 字库链 | | 构建 | `/keil-build` 要求 0 错误 0 警告;新 .c 双端注册走 `new-source-file`(`MDK-ARM/STM32F407-Demo.uvprojx` 与 `simulator/CMakeLists.txt` 两处显式列表) | | 台账 | R6 三处同步 + `scripts/ram_baseline.py --update` + `mem-numbers` 与 `mem-budget` 钩子 | @@ -383,7 +383,8 @@ try 锁纪律)照常读出并显示 ⇒ try 锁读径正常;`manual_req` 作 **本半轮没跑的(人到场轮清单)**:注量对表(周波数 / 幅值 / 极性 / 钉轨路数)、`meas:` 浮点数值对表、两个待台架核数值(封存超时窗 §4.2 兜底行与冷却时长 `App/algo/wave_ring.h`)、P 触发与 start.log 对齐(还得先解标定闭锁)、 bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、~~回放页坏段画面与空态画面 -(等枚举缺陷修复后才有测试面)~~ **(2026-11-02 枚举缺陷修复后测试面已开,见下小节)**、 +(等枚举缺陷修复后才有测试面)~~ **(2026-11-02 枚举缺陷修复后测试面已开,见下小节;2026-11-06 +台架远程轮两画面已拍毕闭环,见「回放页坏段/空态画面闭环记录」小节)**、 `task_prof` 读路径耗时峰值。**执行动作侧**(到场的人做什么、 说哪句话、会看到什么)→ `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md`。 @@ -440,6 +441,42 @@ bench 锁全程持有;三次烧录(埋点 / 诊断加强 / 根因修复) (Before/After、切段、切道共四帧 + 串口实录,见该目录 README)。 **至此回放页「真段 / 坏段 / 空态」三态全部有了测试面**,第二幕尾步的坏段画面判据可跑。 +### 回放页坏段/空态画面闭环记录(2026-11-06,台架远程轮,#68 第二幕尾步) + +bench 锁全程持有(任务 `remote-shoot-68-274d2d56da74`,17:03:38 起、收工 `--bench-pass` 释放), +无人到场;固件 `Nov 6 2026 00:17:43 suite=NONE`(#53 台架轮复核构建,回放页读侧代码自 11-02 +修复后零改动,本轮**不涉代码**)。执行手册 §4 步 7 原文流,三态画面 + 恢复态共四帧入档 +`docs/测试说明/测试数据/wave_shot_20261106/`(README 含判据对照、串口锚点、复现口令与 +sha256 全清单;7003 `LCDMEM` 原帧 4× 渲染,与上小节同法): + +| 画面 | 实拍结果 | 判据 | +|---|---|---| +| 覆盖前 `UA SEG6 M` | 阶梯正弦 + 0 线 + 触发光标,Pk≈1423 mV | 对照基准(真段正常放波) | +| **坏段同号覆盖后** | **仅标题 + 「该段不可读」,零波形元素、零顶行底行字段** | **绝不许画直线 = 过**(画面逐比特 = `WP_ST_BAD` 显式文案路径) | +| **空态(`/WAVE` 全删后开页)** | **仅标题 + 「无录波段」**,同刻串口 `[ERR][UI_TASK] ui wave head idx=8 open fail fr=4` | 显式说「没有」= 过;再按 `r` 再探盘画面逐字节不变 | +| 九件原件恢复后 | 网格 + 波形区回归,帧与到场首帧逐字节相同 | 收工板况 = 到场板况 | + +坏段制造 = `RETR WAVE06.BIN → byte[130]^=0x01 → STOR 同号覆盖`(页开着覆盖、`r` 走满一圈 +再入该段触发读侧判废——`ui_task_wave_load_head()` 头 CRC+长度等式+数据区流式 CRC 全量验, +`App/task/ui_task.c`);PC 侧同件 `wave_read dump` 同判 `REJECT: data CRC16 mismatch: +stored 0xF991 calc 0xB111 …nothing drawn`(rc=1),画面与解码器两份独立实现互证。 +收工处置走手册 §7 二选一的**「不留常设负样本」**分支:板上坏段与本环投放的 `WAVE09.BIN` +均已删除,`/WAVE` 恰为到场九件原件、逐件 RETR+sha256 复验一致;坏样本点名留档在证据目录 +`samples/WAVE06_bitflip_reject.BIN`(原件 `samples/WAVE06_original.BIN` 一并留档,两件只差 +第 131 字节一比特)。 + +两条现场发现(都记账不修码):**F1** 开机后 `STOR` 的新文件(坏版、有效版都试过)**不进 +回放页段表**——表只在 `manual_req` 或「当前段消失」时重扫(11-02 v1.6 钉表纪律),页开关不 +触发重扫;首攻 `WAVE09` 因此静默出局,改列内既有段同号覆盖一次即中(FTP 手工投放段要让回放 +页看见需顶掉当前段或触发一次手动录波——纪律性事实,供后续轮引用)。**F2** 数据 CRC 判废在 +串口**静默**、靠画面自证(留痕只给 `open fail fr=` 一类),与 11-02 修复记录的留痕设计一致。 +另记台架环境事实:到场时板网链路已断(会议室网口),人插回网线后远程轮才得以执行—— +`[ERR][I104] i104: bind port 2404 FAIL` 在该构建每次上电复现,属 #53 跟踪面,本轮不新开。 + +**至此第二幕(注量对表 + 坏段/空态画面)全幕闭环**:注量三项 2026-11-04 由 #40 §8 交流轮 +跑完(幅值 / 相位 / 削顶,104 浮点遥测按用户裁定不作对照证据),尾步两画面 2026-11-06 拍毕; +手册第二幕状态与 `docs/任务规划/README.md` §2.0「独立」行已同步销项。 + --- ## 11. 与 `docs/任务规划/数据可信.md` 的口径变更(三处) diff --git a/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md b/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md index cb471a7c..9b7423ff 100644 --- a/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md +++ b/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md @@ -1,7 +1,7 @@ # 故障录波板级到场轮执行手册(人要做的事,一步一行) > **这份手册解决什么**:录波的判据里剩下的那半轮——需要**有人的手和信号发生器**的验证——把它拆成"你做什么、说哪句话、会看到什么"。 -> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」。 +> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环 + 2026-11-04 第二幕注量对表闭环(#40 交流轮)+ 2026-11-06 坏段/空态两画面台架远程轮拍毕)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」「回放页坏段/空态画面闭环记录」。 > **一句话预算**:你到场约 1.5~2 小时;其中真正动手的只有**接三次线、按不超过六次键、拍两个决定**——其余全部由会话里的 agent 跑脚本。 --- @@ -11,7 +11,7 @@ | 幕 | 名字 | 要你在场? | 你动手的部分 | agent 跑的部分 | 对应判据 | |---|---|---|---|---|---| | 第一幕 | 枚举埋点与修复上板 | **已完成(2026-11-02,远程)** | 无 | 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 | `docs/子系统设计/故障录波设计说明.md` §10「回放页枚举恒空缺陷修复记录」 | -| 第二幕 | 注量对表 | **要到场**(只有接线需要手) | 接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键) | 记心跳基准 → FTP 拉段 → `wave_read` 量四样 → `meas:`/104 YC 对表 → 削顶注大一遍 → 坏段上板看回放页绝不平线 | `docs/子系统设计/故障录波设计说明.md` §10「板级」行 +「板级·回放页」行后半 | +| 第二幕 | 注量对表 | **已闭环(2026-11-06)**——注量对表 2026-11-04 由 #40 交流轮跑完;坏段/空态画面 2026-11-06 台架远程轮拍毕,本幕现场无需重做 | ~~接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键)~~ 已由远程轮与 #40 消化 | 记心跳基准 → FTP 拉段 → `wave_read` 量四样 → `meas:`/104 YC 对表 → 削顶注大一遍 → 坏段上板看回放页绝不平线 | `docs/子系统设计/故障录波设计说明.md` §10「板级」行 +「板级·回放页」行后半 +「回放页坏段/空态画面闭环记录」 | | 第三幕 | P 触发对时刻 | **要到场**,还含**两个由你拍板的决定** | IA 两点标定各接一次线 + 过流加大到 UI 见数值过 2 A | 读码算 k/b → 写配置生效 → 验证解锁 → 触发后对 start.log 时刻/段号/src=P | `docs/子系统设计/故障录波设计说明.md` §10「板级·触发来路」行 | | 第四幕 | bench 自抓与卷占用 | **可远程**(烧录同上;占卷用 FTP 造) | 无 | 烧 bench 构建 → 造占卷 ≥2 s → 看 `err`+1、**一条** `ring abandoned`、同号重写 → 还原产品构建 | `docs/子系统设计/故障录波设计说明.md` §10 板级行的 `ring abandoned` 观察项 | @@ -80,7 +80,14 @@ flowchart LR |---|---|---|---|---|---|---|---| | UA 1.000 V 50.000 Hz | 待填 | WAVE__ | __ Hz | __ V | 正/反 | __ 路 | 过/不过 | | 削顶注大 | 待填 | WAVE__ | __ Hz | __ V | 正/反 | __ 路 | 过/不过 | -| 坏段(回放页画面) | — | 同号覆盖 | — | — | — | — | 不平线=过 | +| 坏段(回放页画面) | — | WAVE06 同号覆盖(`RETR→byte[130]^=0x01→STOR`) | — | — | — | — | **过**(2026-11-06 台架远程轮实测:「该段不可读」零波形元素,绝非直线) | + +> 2026-11-06 收工状态(台架远程轮,bench 锁全程持有,无人到场):第 3 行坏段拒收画面与配套的 +> 「无录波段」空态画面真机抓屏已入档 `docs/测试说明/测试数据/wave_shot_20261106/`(README 含 +> 判据对照、串口锚点与复现口令);第 1、2 行的注量实测数值归 2026-11-04 #40 §8 交流轮 +> (`docs/测试说明/测试数据/boot_log_data/20261104_ac_*`,实测结论见 `docs/硬件平台/ADC通道映射说明.md` §8.2), +> 104 浮点遥测按该轮用户裁定不作对照证据。**本幕至此全幕闭环**;坏段样本收工不留板 +> (手册 §7 二选一取「删除」,样本点名留档见证据目录 `samples/` 与设计说明 §10 闭环记录小节)。 --- diff --git a/docs/测试说明/测试数据/wave_shot_20261106/README.md b/docs/测试说明/测试数据/wave_shot_20261106/README.md new file mode 100644 index 00000000..0331d6e9 --- /dev/null +++ b/docs/测试说明/测试数据/wave_shot_20261106/README.md @@ -0,0 +1,74 @@ +# 回放页坏段/空态画面闭环证据(2026-11-06,台架远程轮) + +本目录是 `docs/子系统设计/故障录波设计说明.md` §10「回放页坏段/空态画面闭环记录」的图源留档, +执行 `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md` 第二幕 §4 步 7 与其空态收尾: +**真机回放页上把「坏段拒收」与「无录波段」两种画面拍下来存证,判据 = 绝不许画成一条直线**。 + +台架远程操作、bench 锁全程持有(`remote-shoot-68-274d2d56da74`,17:03:38 起);固件身份 +`Nov 6 2026 00:17:43 suite=NONE`(#53 台架轮复核构建,回放页代码自 2026-11-02 修复后未再改动); +所有画面帧由 `scripts/board_ui_nav.py` 的 7003 链路取 `LCDMEM` 原帧(160×160 1bpp 3200 B, +本目录 PNG 按 **4×** 放大渲染,与 wave_enum_20261102 同法),同一次上电、同一块板。 + +## 三态画面(判据对照) + +| 文件 | 画面 | 说明 | +|---|---|---| +| `good_wave06_sec6_ua.png` | `UA SEG6 M` 阶梯正弦 + 0 线 + 触发光标,Pk≈1423 mV | **覆盖前**:WAVE06 原件在盘、回放页正常放波(对照基准) | +| `bad_segment_reject_wave06.png` | 仅「录波回放」标题 + 「该段不可读」 | **覆盖后同号翻位坏段的拒收态**:零波形元素、零顶行/底行字段——绝不许画直线,判据过 | +| `empty_state_no_segments.png` | 仅「录波回放」标题 + 「无录波段」 | **真·空态**:FTP 把 `/WAVE` 十件全删后开页;串口同刻 `[ERR][UI_TASK] ui wave head idx=8 open fail fr=4`(FR_NO_FILE=卷上真没有) | +| `empty_state_recheck.png` | 同上 | 空态下按 `r`(再探盘)画面逐字节不变(两 `_raw3200.bin` sha 相同) | +| `after_restore_page_normal.png` | 网格 + 0 线 + 光标恢复绘制 | 九件原件逐件 RETR+sha256 复验后重开页,正常态回归;页面回落到 RAM 记忆的 SEC5 段,故该帧与 `arrival_open_waveplay.png` **逐字节相同**——收工画面 = 到场画面,正是想要的巧合 | +| `arrival_open_waveplay.png` | `UA SEC5 M` 平线 + PK1744mV | 到场首帧(开页落数值最大段前身的 SEC5;平线是该段真实数据,非缺陷) | + +各 PNG 附同屏 `_raw3200.bin` 原始帧,供逐比特复核。 + +## 坏段制造口径(手册 §4 步 7 原文流) + +`RETR WAVE06.BIN → byte[130] ^= 0x01(数据区内翻一位)→ STOR 同号覆盖`。页开着覆盖、 +`r` 走满一圈(周期 9)再入该段即触发读侧判废:`ui_task_wave_load_head()` 头 CRC+长度等式+ +数据区流式 CRC 全量验(`App/task/ui_task.c`),任一不符即 `UI_WAVE_BAD` → 页面显式文案。 +样本在 `samples/`:`WAVE06_original.BIN`(sha256 `9f88ee34…`,与覆盖后板上现行字节复验一致) +与 `WAVE06_bitflip_reject.BIN`(sha256 `a9e097bf…`),两件只差第 131 字节一比特。 + +PC 侧同件判据实录见 `pc_side_dump.txt`:`test/host/wave_read.py dump` 对坏件打印 +`REJECT: … data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128 -- +segment rejected, nothing drawn`(rc=1),对原件双 CRC OK(rc=0)——板上画面与 PC 解码器 +**同一判据、两份独立实现**互证。 + +## 串口与时间线 + +`serial_excerpt.txt` 为 serial-assistant 日志摘录(原样、剔除 `seg=0` 心跳行),关键锚点: + +- 18:11:18 开页 → 18:11:38 `[FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK`(坏版覆盖)→ + 18:11:39 RETR 复验 sha=坏 → **18:12:02 抓屏拒收态** → 18:12:01 `UPLOAD '/WAVE/WAVE06.BIN' OK`(原字节恢复); +- 18:14:42–47 `DELE WAVE00…09.BIN` ×10 → 18:14:55/58 三次 `open fail fr=4`(段表记忆 idx=8、 + 盘上已无文件 → FR_NO_FILE,正是留痕本意)→ **18:14:59 抓屏空态** → + 18:15:04–13 `STOR` 九件恢复(每件后随 RETR 复验 sha256); +- 两窗之间全程 `wave:` 心跳 `err=0 ovf=0`,无一轮 [ERR] 越界(空态那次 fr=4 是留痕本意,见修复记录小节)。 + +自动化事件日志(含每步帧名/ink/位差判定):`shoot_phase2c.py` / `shoot_phase3b.py` 产物在会话 +`ci-artifacts/shoot/phase2c.json`、`phase3b.json`(一次性产物,随会话留存不入台账;本目录即台账面)。 + +## 两条现场发现 + +- **F1(已知缓存纪律的实面)**:开机后 `STOR` 新文件(先攻用 `WAVE09.BIN`,坏版与有效版都试过) + **不进回放页段表**——表只在 `manual_req` 或「当前段消失」时重扫(`ui_task_wave_scan` 钉表纪律, + 2026-11-02 v1.6),页开关不触发重扫。故本幕尾步按手册原文改用**列内既有段同号覆盖**,一次即中。 + 这不是缺陷(写侧轮转覆盖走 find-失败重扫路,天然收敛),但 FTP 手工投放段要让回放页看见, + 需同号顶掉当前段或触发一次手动录波——记此免得后人重踩。 +- **F2(拒收留痕口径确认)**:数据 CRC 判废在串口**静默**(留痕只给「表上有、开档失败」的 + `open fail fr=` 一类,判废靠画面自证)——与 2026-11-02 修复记录的留痕设计一致,本轮实测无违和。 + +## 收工处置(手册 §7 二选一) + +**不留常设负样本**:坏段样本已从板上删除(`WAVE09.BIN` 为本轮投放件、一并删除),`/WAVE` 恢复 +到场时的九件原件且逐件 sha256 复验一致(清单见 `manifest_sha256.json` 与 §10 记录);`samples/` +两件即「删除」分支的点名留档。固件仍为在场构建、UI 停 STANDBY、bench 锁收工释放。 + +## 复现口令(台架同环境) + +1. `& .venv\Scripts\python.exe scripts\board_ui_nav.py --where --i-hold-bench-lock`(身份互证) +2. FTP `admin` 登录 → `CWD /WAVE` → `RETR WAVE06.BIN` → 翻 `byte[130]` → `STOR WAVE06.BIN`(页开着覆盖) +3. `& .venv\Scripts\python.exe test\host\wave_read.py dump <坏件>`(应 REJECT rc=1) +4. 7003 开回放页(记录查询列第 10 行)→ `r` 走满一圈回踩该段 → `LCDMEM` 取帧(本目录坏段帧生成法) +5. `DELE` 全部段 → 关开页 → 取空态帧 → `STOR` 九件原件恢复(逐件 RETR+sha 复验) diff --git a/docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal.png b/docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..90cd344d31bed9fb2a17bcba9f0e4df722307f01 GIT binary patch literal 1690 zcmeAS@N?(olHy`uVBq!ia0y~yU}^wi4xj*o=CW!385r0SJzX3_DsH{KdpB>ffk4B> zJ^#J8hfmdNc`Nz2LEZ9s+Gds1n;*7z#n#2?gLDCb#*1`?&GSNUe?IqB*@02Xfknfi z$ncBOi&kO7sOb!>8V)QS46G+=nJ0#ETwI{^a7`62lZXP7O9NBNUj-E_hnc(uBA?E% zSV9F=?0$6cxw$QLRgz+z%`3&oB>*&%@zcD<<7XOKZyrC+*abE+L!UFCVUPNb7x$wb z*Klkw4-j0yz}mq8BqOCC79MwJQ@P1tEPRnkWC2JF=!kdS2AdWyE==*a5CW?N3NaSt z*X%uh^WgDU3`f;LF0b|mIx4neV&{|1FN~TeobmK$Qv^8+Xb9_x&yL^Nc-J%0@Zi>ue4 zzf(}~Y&IJsS3m<3Ff>FG{w+JdShl`&C)k5P=W$Kg%lzi9%&zY{zM9^YcI5`E`?d<` zmc5MIoOOk{LXH%J2=`r>z(a8*%`BL*1_!j>UiRfpB!(}BK8e1 zs}?ZqR6j5?{zJOImk>BAfIh6WJ9O~zgbr6BX1odF441ZUK?Y`pbH=@u; z;ZhMh@#eAYwuiIjL2d(u642F53N%4v%?Lh3aA*IJRNG)771b)Ie*kh+J)r@UHN16|2Dq)JdN{$5jdG{ z@o4}@5R`cHyu#?z{rl&?2yQ`2AHeycL~+O~6h)-V1aT~_(p zbmezHcnZlAPbh0mUmq>`VCvU7fA>$@+sR++_I~ekV?$tmf+eGGc5~*}E~pK+*!wl+ z?z}g%V^j~k`6S8=aR(@={n*K9XIQbr>Z4Sw|51i;UJbY3HbxWWC7-|zIq;sV;M?Ih zZ`dEjbxe$Z_g*X^zdGINbe;3Jf3aZifQ|Xd_|8Dk_LqaructL%eD6J7aOKSJk0}ik z8z+L3Gbqcfk$k`>d~tJNO8Jd->`UD4Uq7?y8vm3NEt}yg{@h^*pUbi($#%242WP=s z{)yV^>k;mF&Ya`BXWbr&0J8(->(xKq$riq-p>*E?=2f5-$e|i=@r|d|#OLedd^n*Q z%}74tJ=3$rlP?*cPk-zRDlLFH-p2TaL~KcViSx4)zQrxTqECTif)!)hd~*(94g;16 z6Kb2HEd_0*mbm0S=!KSzJIgOztgbuiQu5v(RyzD+jH`_UW;SquJlV;RuD&RGeeb+2 zPZC0aDeEmOuoSXoSDop2=F tVEj~5vR1$?@N1m4Fsx8#f%}i+7pr~nlEdHr9-9Ob^K|udS?83{1OQlK5ElRd literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal_raw3200.bin b/docs/测试说明/测试数据/wave_shot_20261106/after_restore_page_normal_raw3200.bin new file mode 100644 index 0000000000000000000000000000000000000000..ddec55e7e394df0304e25b4976d18a3c5e3ff349 GIT binary patch literal 3200 zcmd6pziSg=7{}lDQroxC>ZKq!bU5Nk?ix^+LZgMeNF3TF2>t=Zt%HNq#VMCSrM-w8 z!NH-3I5oQzbaD{g%pcIjicoNBGu0occc)Lu`{oM|R1}YpC-3L^e!g$AMTkFsnvpBU zT&rfoZGNy=ZT-9UEGAkr`qC5A{jujZeBWeali!y7nD!ne1Y#-taAURtDN; z{<^FE4by$S8Zoho=U@&(>uE>!Cez5u-de zk&77DLwn>RMtN=`7qQ`cSW0<*cplyh?MPm*xtSIqNv;Mq@i;2Wmm|b2ezZ-Q|>JZg{j>&fIp! z9{+L!5tMRv&Hef*WxAB8ZReP|%ZXTvW|K31p}&>qZn+uzhmVxfiOl=tVYTX*NQh#k zSF>`W7>0H(bt^9|SISCn&T^#;!x46PCA@06qBz$pjIhd!*yffk4B> zJ^#J8hfmdNc`Nz2LEZ9s+Gds1n;*7z#n#2?gLDCb#*1`?&GSNUe?IqB*@02Xfknfi z$ncBOi&kO7sOb!>8V)QS46G+=nJ0#ETwI{^a7`62lZXP7O9NBNUj-E_hnc(uBA?E% zSV9F=?0$6cxw$QLRgz+z%`3&oB>*&%@zcD<<7XOKZyrC+*abE+L!UFCVUPNb7x$wb z*Klkw4-j0yz}mq8BqOCC79MwJQ@P1tEPRnkWC2JF=!kdS2AdWyE==*a5CW?N3NaSt z*X%uh^WgDU3`f;LF0b|mIx4neV&{|1FN~TeobmK$Qv^8+Xb9_x&yL^Nc-J%0@Zi>ue4 zzf(}~Y&IJsS3m<3Ff>FG{w+JdShl`&C)k5P=W$Kg%lzi9%&zY{zM9^YcI5`E`?d<` zmc5MIoOOk{LXH%J2=`r>z(a8*%`BL*1_!j>UiRfpB!(}BK8e1 zs}?ZqR6j5?{zJOImk>BAfIh6WJ9O~zgbr6BX1odF441ZUK?Y`pbH=@u; z;ZhMh@#eAYwuiIjL2d(u642F53N%4v%?Lh3aA*IJRNG)771b)Ie*kh+J)r@UHN16|2Dq)JdN{$5jdG{ z@o4}@5R`cHyu#?z{rl&?2yQ`2AHeycL~+O~6h)-V1aT~_(p zbmezHcnZlAPbh0mUmq>`VCvU7fA>$@+sR++_I~ekV?$tmf+eGGc5~*}E~pK+*!wl+ z?z}g%V^j~k`6S8=aR(@={n*K9XIQbr>Z4Sw|51i;UJbY3HbxWWC7-|zIq;sV;M?Ih zZ`dEjbxe$Z_g*X^zdGINbe;3Jf3aZifQ|Xd_|8Dk_LqaructL%eD6J7aOKSJk0}ik z8z+L3Gbqcfk$k`>d~tJNO8Jd->`UD4Uq7?y8vm3NEt}yg{@h^*pUbi($#%242WP=s z{)yV^>k;mF&Ya`BXWbr&0J8(->(xKq$riq-p>*E?=2f5-$e|i=@r|d|#OLedd^n*Q z%}74tJ=3$rlP?*cPk-zRDlLFH-p2TaL~KcViSx4)zQrxTqECTif)!)hd~*(94g;16 z6Kb2HEd_0*mbm0S=!KSzJIgOztgbuiQu5v(RyzD+jH`_UW;SquJlV;RuD&RGeeb+2 zPZC0aDeEmOuoSXoSDop2=F tVEj~5vR1$?@N1m4Fsx8#f%}i+7pr~nlEdHr9-9Ob^K|udS?83{1OQlK5ElRd literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/arrival_open_waveplay_raw3200.bin b/docs/测试说明/测试数据/wave_shot_20261106/arrival_open_waveplay_raw3200.bin new file mode 100644 index 0000000000000000000000000000000000000000..ddec55e7e394df0304e25b4976d18a3c5e3ff349 GIT binary patch literal 3200 zcmd6pziSg=7{}lDQroxC>ZKq!bU5Nk?ix^+LZgMeNF3TF2>t=Zt%HNq#VMCSrM-w8 z!NH-3I5oQzbaD{g%pcIjicoNBGu0occc)Lu`{oM|R1}YpC-3L^e!g$AMTkFsnvpBU zT&rfoZGNy=ZT-9UEGAkr`qC5A{jujZeBWeali!y7nD!ne1Y#-taAURtDN; z{<^FE4by$S8Zoho=U@&(>uE>!Cez5u-de zk&77DLwn>RMtN=`7qQ`cSW0<*cplyh?MPm*xtSIqNv;Mq@i;2Wmm|b2ezZ-Q|>JZg{j>&fIp! z9{+L!5tMRv&Hef*WxAB8ZReP|%ZXTvW|K31p}&>qZn+uzhmVxfiOl=tVYTX*NQh#k zSF>`W7>0H(bt^9|SISCn&T^#;!x46PCA@06qBz$pjIhd!*yJFil@;u1&Ihi|Od7`X%(l^hs1)pK~VPr1sldqTM01Z4-H z5Q~Pxr-#b2Zo4i_>e!XA+z}@DPSPeUPiKam9iIl1$N~nz1))L<7rY3V(Yo4C&-1Wg#1LV}zst$}y4D<#E z^3KPf%)V-PzS+O-+n3L<@DY3_xUcJt#N)^rQ>Q+@yg$7a=w_A<238N*M=1w)Gb}%R zcB^#B4C8Pk@t#o{q^d`lOzB87%nelg~kWhT6v>g&v&Y^JqZ^}lyn%oqbnwPcx6g0i4bZ2dPs1f^Qwe&Q#iQN8B zQ_hH){=9jr>HWPcCEwMwfN2Blq!0Fd%Apf3J3jRSn)OtcSqK!tKr2|mNtoUdLI?Xk aEUjbUn4A9NL8zq#$U09~KbLh*2~7ZXQ0i^~ literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/bad_segment_reject_wave06_raw3200.bin b/docs/测试说明/测试数据/wave_shot_20261106/bad_segment_reject_wave06_raw3200.bin new file mode 100644 index 0000000000000000000000000000000000000000..8e072389a03e0958746d430ea24d8a3f3ba5cd19 GIT binary patch literal 3200 zcmZQzpcvFQ2r#e+pc&I4Q2z)`%)a%Xg94fuL!*#`{ybE@{~rqYtEixgv2gzJR0%;9 zb8&U?RG)$>rq}4=uYx8f%BbOhE~e5d;Goihs`p5yM*R~sy*y0E95ff9svG5vhQMeD z47v~yXz&NRNudGRVH}Q~_P_s6{(vmT{F9TRfsp}49Yf>Ah6YCVAIRz~1sNC_e;RNg zi*Y}^&+N!4=zuK7;mOIW$SHCFMQoxcry!>giaKt^E3 ztkV=}(V3;o$Q97QA;8Er;W^vH)dH6mOe!d=WoP6PU{rEo+*Hru$v)*O!|Dm)eiM`( zfI=)94xb(>%et+)FsWlz!fr>H;5$j1Fg=|Y`{dX~zy@B>;|yrHBOLSVpH_z~<2g1_ zxHWqP`=sadsN7|+R$s)b0WuRLWh0)r>0+kLUFklc4KOk3`)^9if83B=@B=8wlCd2~ zerugR$HT6BopDP^UX@V`2hi;S4M0D=XSbA=TF3P7*+ZAmA4(z%7z7vG6kJzJlO7bt`~fM)FbvFrWi*{3cGpVJEw1qCBW!@T}{G4HP*PJFZuU2$?F zuOh<6kG+ba&5qxflz!c?aI^Hxu)a>HujwE1^oiqt3*~(dteoY)A}ADOp{J{#%Q~lo FCIFq_<{JP2 literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/empty_state_no_segments_raw3200.bin b/docs/测试说明/测试数据/wave_shot_20261106/empty_state_no_segments_raw3200.bin new file mode 100644 index 0000000000000000000000000000000000000000..f467cae32af1b52a4fff2ef522cba182321c85cf GIT binary patch literal 3200 zcmZQzpcvFQ2r#e+pc&I4Q2z)`%)a%Xg94fuL!*#`{ybE@{~rqYtEixgv2gzJR0%;9 zb8&U?RG)$>rq}4=uYx8f%BbOhE~e5d;Goihs`p5yM*R~sy*y0E95ff9svG5vhQMeD z48jm#|G~&;gX*sO100QP=w%7>kN79(VhkLD>TaldS@{16vY-kv{D0su|9B0mAQy{E zhzpu|Tud)ST+zgY7z2dbG*I;_DR~6)pp}VEI&PC%(9|_PIG~eq3{~$aZ!`o(Ltr!n NMnhmU1cqz~005*oENcJ& literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck.png b/docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcfacba1b4f69831f91698ac10564b3d64ae5b9 GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0y~yU}^wi4xj*o=CW!385o#rJY5_^DsH{Kb1<*jK*06l zpa1@s_p;72?`zy3 ztkV=}(V3;o$Q97QA;8Er;W^vH)dH6mOe!d=WoP6PU{rEo+*Hru$v)*O!|Dm)eiM`( zfI=)94xb(>%et+)FsWlz!fr>H;5$j1Fg=|Y`{dX~zy@B>;|yrHBOLSVpH_z~<2g1_ zxHWqP`=sadsN7|+R$s)b0WuRLWh0)r>0+kLUFklc4KOk3`)^9if83B=@B=8wlCd2~ zerugR$HT6BopDP^UX@V`2hi;S4M0D=XSbA=TF3P7*+ZAmA4(z%7z7vG6kJzJlO7bt`~fM)FbvFrWi*{3cGpVJEw1qCBW!@T}{G4HP*PJFZuU2$?F zuOh<6kG+ba&5qxflz!c?aI^Hxu)a>HujwE1^oiqt3*~(dteoY)A}ADOp{J{#%Q~lo FCIFq_<{JP2 literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck_raw3200.bin b/docs/测试说明/测试数据/wave_shot_20261106/empty_state_recheck_raw3200.bin new file mode 100644 index 0000000000000000000000000000000000000000..f467cae32af1b52a4fff2ef522cba182321c85cf GIT binary patch literal 3200 zcmZQzpcvFQ2r#e+pc&I4Q2z)`%)a%Xg94fuL!*#`{ybE@{~rqYtEixgv2gzJR0%;9 zb8&U?RG)$>rq}4=uYx8f%BbOhE~e5d;Goihs`p5yM*R~sy*y0E95ff9svG5vhQMeD z48jm#|G~&;gX*sO100QP=w%7>kN79(VhkLD>TaldS@{16vY-kv{D0su|9B0mAQy{E zhzpu|Tud)ST+zgY7z2dbG*I;_DR~6)pp}VEI&PC%(9|_PIG~eq3{~$aZ!`o(Ltr!n NMnhmU1cqz~005*oENcJ& literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/good_wave06_sec6_ua.png b/docs/测试说明/测试数据/wave_shot_20261106/good_wave06_sec6_ua.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd9f536dcc270f281ac7353ea726805db6c0e52 GIT binary patch literal 2509 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 au0r{FWYmK~aPgYSc1D! literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/manifest_sha256.json b/docs/测试说明/测试数据/wave_shot_20261106/manifest_sha256.json new file mode 100644 index 00000000..7d776c02 --- /dev/null +++ b/docs/测试说明/测试数据/wave_shot_20261106/manifest_sha256.json @@ -0,0 +1,20 @@ +{ + "README.md": "bbffa3ed7ea5c1fb25d7d63f1ea5b10c37e8fd8ff7bffefe71605e649c503ad8", + "after_restore_page_normal.png": "d0fd54629f7b597a24247ee4d5707d80528da87bf68d9016cbf0199ec6c43cb8", + "after_restore_page_normal_raw3200.bin": "4deecb9373f766e3263e4b890bd7882798b91374aec43b7fc6e96dba3f353704", + "arrival_open_waveplay.png": "d0fd54629f7b597a24247ee4d5707d80528da87bf68d9016cbf0199ec6c43cb8", + "arrival_open_waveplay_raw3200.bin": "4deecb9373f766e3263e4b890bd7882798b91374aec43b7fc6e96dba3f353704", + "bad_segment_reject_wave06.png": "a013fdf6dbab1068a7b72b8239ac573c70cea5e8de8df9214ddc5cf153586b83", + "bad_segment_reject_wave06_raw3200.bin": "17291a0068f2d4ab099f636888e809941ad9bba52cad942ff6341a8677b72889", + "empty_state_no_segments.png": "ecb6151668b0d5ef0578576dd449d9d9a7f41031fd7c9f035a98de7132853d1b", + "empty_state_no_segments_raw3200.bin": "a76c41cfd7f38cecf1092777371869a0a28a4c0ca09eb6963e17afc94d713f66", + "empty_state_recheck.png": "ecb6151668b0d5ef0578576dd449d9d9a7f41031fd7c9f035a98de7132853d1b", + "empty_state_recheck_raw3200.bin": "a76c41cfd7f38cecf1092777371869a0a28a4c0ca09eb6963e17afc94d713f66", + "good_wave06_sec6_ua.png": "db205b08fb77ac51350b802b3541dd310de1eb7ec9529d9867f64794c1aa7d6b", + "good_wave06_sec6_ua_raw3200.bin": "d6a3ac65e04d5e62007d1f13b84be38982f0b217a4e4730037a54c1864854261", + "pc_side_dump.txt": "44890852d5560073359f6e7adad03fb8c7e06e24605dfe5b1c18d4fbf8985ae6", + "serial_excerpt.txt": "f4cf0ba2eada42917abc6d2347b2e3bde041a1ff4034b48d751f5d4f6f5a66a3", + "samples/WAVE06_bitflip_reject.BIN": "a9e097bfaa0e3df8542c637c29f120d1dee347956cf0013478448861f13c40ae", + "samples/WAVE06_original.BIN": "9f88ee3490c40867299e624a2eb2323ec33bb9ca5957737d2018b9e60205a6cc", + "samples/WAVE09_seed_bitflip_reject.BIN": "b4016966c6feed92b8a7f42ce42c109dbb8a608b9531f9bad35595c22d3d6471" +} \ No newline at end of file diff --git a/docs/测试说明/测试数据/wave_shot_20261106/pc_side_dump.txt b/docs/测试说明/测试数据/wave_shot_20261106/pc_side_dump.txt new file mode 100644 index 00000000..1ab4fb1d --- /dev/null +++ b/docs/测试说明/测试数据/wave_shot_20261106/pc_side_dump.txt @@ -0,0 +1,44 @@ +### dump WAVE06_original.BIN(覆盖前原件,板上现行字节) → rc=0 + +``` +FILE : WAVE06_original.BIN (5250 bytes) +magic : 57 52 01 ('WR' + version byte 1) +ver : 1 +fs_hz : 1000 +pts_per_cycle : 20 +ch_count : 8 +pts_per_ch : 320 (320 ms at 1000 Hz) +pre_pts : 160 +trig_src : 1 (MANUAL) +trig_elm : 0 +t0_ms : 1246139 (ms since power-on) +wall : 1793609165 (epoch s) +eng : 0 (pin-domain) +flags_seq : 0x00 VALID bits: (none) +clip_mask : 0x00E6 [UB UC IB IC IN] +frame_seq : 1245891 +CRC16(hdr) : 0x0C3B OK covers [0,126), low byte first +CRC16(data) : 0xF991 OK covers 5120 bytes, low byte first +-- channel table (8 entries x 12 B) -- +IDX SEM NAME SRC BITS AVAIL K_Q16 B_CODES LSB_uV FLAG + 0 0 UA TPAFE5160 16 0x00 10000000 0 152.587891 . + 1 1 UB STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED + 2 2 UC STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED + 3 3 UN TPAFE5160 16 0x00 10000000 0 152.587891 . + 4 4 IA TPAFE5160 16 0x00 10000000 0 152.587891 . + 5 5 IB STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED + 6 6 IC STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED + 7 7 IN STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED +``` + +### dump WAVE06_bitflip_reject.BIN(byte[130]^=0x01 同号覆盖件) → rc=1 + +``` +REJECT: WAVE06_bitflip_reject.BIN: data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128 -- segment rejected, nothing drawn +``` + +### dump WAVE09_seed_bitflip_reject.BIN(第二幕首攻样本:20261104 真段种子翻位,未进枚举见 README 发现 F1) → rc=1 + +``` +REJECT: WAVE09_seed_bitflip_reject.BIN: data CRC16 mismatch: stored 0xF8AA calc 0xB02A over 5120 bytes at offset 128 -- segment rejected, nothing drawn +``` diff --git a/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_bitflip_reject.BIN b/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_bitflip_reject.BIN new file mode 100644 index 0000000000000000000000000000000000000000..568667b2ba1ce4891a0a7fb5d3663db636f10a8a GIT binary patch literal 5250 zcmZ9Q*^eE?6~^!QUcB@jX6-v0jmgX?Z~hPRl9z<+iU>Q#ZoO|n==kLtr&gM?8Y0l+x4Y`M&d`e?3S5s5FCU^AndFE?Y z&GV};g;n#*R$sjW8SaR-QwFGeM5EG9PW=^ieF1kJ6sa1>l*Do+c_Rg z_%A!Y+v6S4*HxEW!)Kxc@$n=~Q!iIq4AyiFDUY#W+&}6);`nxo@As>4|M5Qc7lXX& zd`^C+{T}(fTk(N=eCC$$sc3&ZmdvD|2)7XAgqu|!(|(`#+w`8~&UjDsE!Fup`Q0Cn zB=4nhzMQ|1U&>$7Sk5P!Eood-V?D1i(f6X-d5sJCSwCtnL7kHatM!~#M0!RY z4V5j+8!Ti=Bc8KDksZ3(O5MoFI&m(lR@81;vqTyqBNApGNVlRGX%{6q=PWPi%l@Im z)>d#VXmwFvxTx5QWS7)Ifiqs>o0pW_>kCbVI(5I$sO}d^g?fGK3(b=Hh0E3I)f&}{ zn%7F&AdIgOS(AFRBYedtk-s1RK!(zVi z3%brp3|prazVHtZ_9ZpEHM(_upa~&}Cm!q!hpjJJ!)LiPx;Z&CIV^g7nq89^ zs8zkbU>c<<7QDiSN-IiMRI61ZCNM?Ks7 z@E5|~TPK=E?N_TLtqupiL7n)iYP(}HeTy(?`0F8CY~fR7iyfs8^*cW4&Mkh&AJ#c@ zV|-V1ZMb)4clff-)xRfYoxknEd0kW8r#lDqd)n*$O6N?5+Zn!~bL(}TGj+w5(g*sz zAMcKI4!$bfBRXep*17PVaKHG#ofNLY;qZG#d?)-N?>Fg==JX+s1p>tt4IO&ghkEVN)AH}<) z>%x6AJ9KWn5KkrV>%45z`Bv=uv(BTT;C1016K;#nh3kde86I-DFkPo}|ANlTDd9$g zH~ewoIA?z1{BGCzdpMrZxwTIBjk0j~9S#2KPk2x0oY@xt)ZupM{5=?t3s)%Cm6j^F zvEWUA%6l@sH@PdmKe{nIEWgh?zJDn`^4QSzT6ei~I(XZE&D)#)JlQGSO~UO_9tU;4 zy_eSLzEO6#1&4dx+m}8d+`ZBFRln`wzUYw7)ft_?_+6(wW*zQCh3~%T2ddxpaBuW% zJea(je(HIp`Jf;i=lLZ*tHC?|o8F=Hm&x7n1IpKM&%`~+Khw!glbfbo zpV&lW&38)Q@rq=^A&{D$F~fkL6w>UfdXraes_Yrdlw&pTW?h||_3AY-W}KOqjKTcl zp^B=`s#cl4YBw!Tkj7}=s%6Gl)n-_#V?F!g<$rNhFN@hY%`fw+k7_I?Wt}zS%vh?@ zsZG-kgWlNqT6X9%uUML=%oa?B%`6Qux#`u<&>8QvxH9i1Galp_i+KaJ8kzaENU|E4 z^=hWcO#}JC{BV9ieKiF-P>lE?6MVu95Byoj6Sy9Y#y2c2af~<#w#fU0AbY$WQFh1jN7XD-A|)a$ zXyn`Le2~@ZT!{mAawihvpiYB|ojk4jRBu2H9e$BgPxi&u)D$f?eUjq`PsBx>><+we ztlnRC6)Uh=w!>OmuEUCgIH=j6kYoAdVjt7|xK`{Ae>EUR9fBQW?}^Ov!P}VAVv7a! zKt@H5JHI8J)ASDAPdW-$sI_P`DWflWi|gD3=TGhElal36(>u`~^>T5SI_Jdm&x^~x_Wn(MqLX70X&C_-Z|K#23 zqRVPY_1FPx%x&j3Dhe#P<+TaZrtx$72J(ict#GBrK;J7JZlfd{rGve#g1kx++Es;4 z$*2X^Ho~-^w+U~xWsS6Dy-AQ{eL*@_WxZ->yn~kAXfL30Wd#pf-eJ6t;KL3+q{w(5 zAwkY-2rkxOc^TS!i*Z>mC&Pg?zeI_B+3B)~cw3nttYERX6%5F&^X`I$Jjo=B!m?hJ z)bhj{B(Jk7pUv^lOB0OM0+xCAuH=O~r_O%@tWyEQVTH`Pd?_o==6*%j8a(xKt~imzE`W!2^Fi|vxIG`xbLZs?Ze9yj$haTC+;6&V;}t&faq~3 literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_original.BIN b/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE06_original.BIN new file mode 100644 index 0000000000000000000000000000000000000000..ae7561b47ab5599ac3bf667b73650671b757d5d2 GIT binary patch literal 5250 zcmZ9Q*^eE?6~^!QUcB@jX6-v0jmgX?Z~hPRl9z<+iU>e^VzdE@KX>+kjxDCSnyYpCZ#DCJ;Biyy|ZPC@?<1^dB=c9r6tz;!_EH;!r7H(L$p5PV# zDevy|rsTSKbM)o#4>Na$FGl_GKaz`8xKqL%^PlzZNpDHMTgKfXTyOlhx{6;eGa32S?U6b8sItPP6|2gmebW3tmye;~w;@cV?cDUKpD{c_qTIGADb6B`T z-UI2@GVbx2+r#Igm*bPkY`VUe|M{CZvE-E*B&!K8o0dpO;dY<0Ll33o7h zF`iCNrE7|7ODn4Lc=vqggmA~aU#Gjpw>|oX>asc9AH5X6mYjCDBv{uq+I_ZjJecrb zc6_(TJEE_vF1LoyLT zey9B&`Mq25fqQ)Bmhh=)e>|4Vq@M`45afiLRUXrRpZDAJp5)GWPxLL-`8N68ACDyO zrEz{Ke<8n|zoc;~pJ=wMaZ!!+yv9V|i)!aJF63u5yO5uAnt36Xg_zfRR%0y8dCfl- z4$VS-#j(ZG86WZ$A@H*(n^leG^P*-Kv|g2*88O9TAigDiX|tLwN;WT!Oo~16F`7Nd zB}p!oqgax^IoZuAwgoq0i*&KQjE-s|!oiD4(hr(Ip7v*Ky*;u~hNu;yFpL6ZJ z=4a&rZ|KNi*2O$qW+X-`LWNhPr+##DLOQ2T^b4+?b@O?B&$ur2+~SuTxkP7X~Diyoh5*CYmN zRj)6YMrn!#udt!qijo!8YSoAdOi?pxQ!KOz-6$zuThxh^sHh1{RJ=(R#6!*N)IEJ+ zXBS!|#~0FCr!P8fNpfqA@?yIJC$%FIWMs~0`;qOfRoLoI{n%IbgFPe87S+!xR4)(w zg|PS5iKbEe)hbD=!+~#5Cw{8h?wCy9A`BY-ddL=A_*B_qN9jZTj!(LCi{J5wb3}4W>^}5cPx?)S|1O48Q zcSkx0Ulr~VoijJ=+L;@#18 z;l7z2I=5bkr;_(|UN-4`D|Y=^=h0B`x^RyPw?*f|^}_884>??zuG6`HLFeU^aHGK+ z{Dx9j{p98c)nTBrNQl5qGP4gTs+cu(k@*%trQ;dbc!Js6J*S18t%mdm)Y z;7xzZdosN@xhuXux-mQ~zt20qeSNHvQxO5gxjM$4(fb+ zFRjsiW69wb9PV{*U;2P>_eS4W{kDhuqC+}YXLSDJcb)Q>b+{8{zWbsdsD9hSz0tGr zVDfJIsppmEgMx6J`)~Uvz5VHf$&UCw@$H}aarkWXOx!QrC*Imptn+uWJ1*n)rN2ma z$3GL_0o|{jj-HPDl6Qo=tTZRwl-uoMU$cRHpH|GQ4Qkb=HYg3VAzAjzitjP4d&SY` z*hU;TR>w5!l?-n~&JIkkTj6sgKU(g@F|O6HI?Pz~i5ZWhvar~Qxe`skLt;q|$OnWS zbABw6elZLvM*NToK4FFj{;cB(T#rWM8HHeyJPvIYL+RH5)l?O z^6hm#$f`P5;((ppiG(<))1YD}PpdxF8&E@sU!>HNeX%t)MTB&T85p~n5;3eCA& zm<;(9>TQLf#%#%%#TIh;dqD{4)ae8+$uK;kKA%X zPoC!A^21NN8s50QT;*b*9u}L`1P<~vHY&k=hx-ioCc8Cqvw_*_!Oe%NkdsAd<3`EJ zh+3GgwOms?Y!p|kI=3ipw{2=2F0xjA?dHXPaO*Wyjxv# zSuLp^J7A5u?c7F1fd#j`HeuQ{eoo&&-q5rauGARld!@r|lw_lHu(y?wS4l#lWW0}% zAm=p%7i+M*4DG$exT2Sn;lP?-qQrj5>9UA;TbUoMV6nFq49KnX?t+Cp$s~)yvR;(b z^28b>ud@oD&GFAm6O7dYmU;KC-_=$7T<|M%CtTjkJNvr4VzKawr~ upWtn6BQIKJiAHkdKNcUjH*TUC|A9bm2>e}ATP=TyjNLOn#?|~|AN?1U=y53k literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE09_seed_bitflip_reject.BIN b/docs/测试说明/测试数据/wave_shot_20261106/samples/WAVE09_seed_bitflip_reject.BIN new file mode 100644 index 0000000000000000000000000000000000000000..441f54142f367f38a55193e3a021730987bd15ed GIT binary patch literal 5250 zcmZu!`)?dq72fe3CzE87rrC7cvc>7f1X>Xu5)}ga1Eut#HuRAuRjW`CLLedj3M5*! zpq4)JupK+L*Xy?($97`ZNm_)U`~Za(lBRLI>vcBc$E-8!$J!o0H|6`z-Kkv(U){Nn z^PTUUduHYP%?r;NhO2g44;l3#BlP95($JxoZ~itE8V_9>Ee(Z2J43%aQHe1WG7P&U z)V@z~Ub11XHek#R^U@8NO&jK$H_W$pAIV%wy_dW%opp|Qeg2A}wx5s0$`X6~%O8oo z9NicG(0ZltM*fO>By%}+A^ElRg!7_zu86z0tYL3o`NP1K1NUm-?fjtoQs$G?Mc`cL zd9T;^4P$$Mn2;ZkT$5+xfoP%DcKVz)e-N4l&zsG?4M)->LcA+w#c7Ku4xD0S@e$H65 zyCPpIs{`Mou{VJG)H+(I&X2giEaFC-XT4V6GkoCg2Cl#Sap1lk9<+`ZYVy~C8${f_ z>9q5t*W|m#oZSvwE%+Xby$RektD;bw&$z$J3;`EQ4?73EMt|JM+Z~ZRf$J}SBKCIl zJK>~NS*Xi9zzwDbl6%ra&J$k3A2X)ywn(Jx6zcb6?5*en;bE()5YLagzs_6(E|yLL z*8tp%-6}Zpy%YUzc*LqMG!${?fg5rj^-lSYF=aPJ?kKAkzT?sFhp$_;g{FMg{Y@r` z{Pv^=oyWXdKV#(V=15rL9*7a=San5Q3crI``kM2ISM6UnZrY8&Rqq`r|4Hmv^uh3` z6)&`cuScCzXVhtRR&`51r+Q@URh^i1s}9wx`qaCsUwRj8Ts5OLsv1?LDpj4TRt>62 z)uVO5<6X2qbrF8uXq~EEwWwCaXh-kDtVbA6t2S8Af~6Wf)$pxWC()`fJEh{PRwX1# zE#}pTathA|^eVJCRtb3410P4znbe8B0hUwPuT&LiC(w!2zKl|Xd>Nww`(&;FvQbuz z$g>tZr?5VQ96RM?WQxNpffF*PT3~C?S%G?-rWyNfc(%%%XF82l54g^t3Y{2RfZ($c zEg@CyMa?^;4risF{aCdD&+2suPdBR7D-~z*yzq znp9aeAuQu+>~p>>IOo7RiP6RW6fm<`O<+EaaRzM?^Bh*pWK4O2oW?%+$i#L7`!kZE zi`^;Aau{>M#no65F^QddoWOW6RqG( zOIQ`;bR}|1o<1)q)@&73V10-*WLAoL>bfk$MwSKGe9V{7m*G8&eDoe;>BdMm`TyO*6I~M(F_@g3@e2HWP|EZt$+WjeG61aPC zvk#O%6+2P9v5!Il91^}e(^usNn>1Xz9yekFxTj+kz+J+PeLR2FJuJ8ga0hVHO&Sxx z-3`7A<(Qn=g_iu7@Fjrzr}G2vsQ;;P#eNI8TI6>)))0Mf|NHyj zE4GXKFBWIqK`~fRCeIt@D#Z zS4w9_j`eD37Fx7bGtei9tY^V$-LA9K$aSl>2hjuHz#inrIs~@hh7dyEGn*MQC`$@)PB@?)D2X4 zj7a?%hlLtaYdR`3jiUOiQpfSsij7*2EL4m&=uN`Gy$aDlweX`dq5ezYoPqw+dXpZ_ zpKCv=NsVs9NNvZ~hSnjvsTohIT`D-O*{FJ&fTjN9`OiundZ4FR+djn83Yi*>T8^47 z&}^)=)_Lu)kcV|4s;TJLg}KgSy|%g#$$AzVh)Q7*eHki*wk6E6qMU}+HMEQxhRzztcwKbWGPss-=P#hs zpV%xk#!bYU!joEK5i_bOAF3b?|6!=GBpUffR0@2t|%h|GuZOkq8O7(-BUUz9E?d=+37`Z`X$w%AktvZVwRHqX`DKT6Okv0+=z9- zJ_ZD%j3RFrc52DVV)LMDrr<{n$#YXxE;7w2W#|+0M%zwNX~q zbKoNby=O7!dIBwrHKTJjBUSa_J%&z&yePG$0-gkh8kxvhsk@0NKR=G)P46N_!`MB8QVHp5u&ka@_wgXx#wHj&X18c)V=q7bYGqU=CMVR)8GZp@?v$TeUTb~jWEi|6a#~WFZTA8SF9(Cn6+^T9{`X5|RJ%s=O literal 0 HcmV?d00001 diff --git a/docs/测试说明/测试数据/wave_shot_20261106/serial_excerpt.txt b/docs/测试说明/测试数据/wave_shot_20261106/serial_excerpt.txt new file mode 100644 index 00000000..5cc34dca --- /dev/null +++ b/docs/测试说明/测试数据/wave_shot_20261106/serial_excerpt.txt @@ -0,0 +1,180 @@ +串口实录摘录(serial-assistant 日志原样,剔除 seg=0 心跳行)——2026-11-06 第二幕尾步两窗: +窗一 17:52:3x–17:54:5x:WAVE09 新文件首攻(坏版 STOR + 关开页,见 README 发现 F1) +窗二 18:10:0x–18:16:0x:同号覆盖主链(18:11:38 坏版 STOR→18:12:01 原字节恢复)+ 全删空态(18:14:4x DELE×10 → 18:14:55 open fail fr=4 → 18:15:0x-14 STOR 恢复×9 RETR sha 验) + +[RX] 2026-11-06T17:52:35.660+08:00 [2026-11-06 17:52:34] [FTP] connection received from 192.168.31.161:60945... +[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD USER admin +[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD PASS admin +[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T17:52:35.680+08:00 [2026-11-06 17:52:34] [FTP] CMD TYPE A +[RX] 2026-11-06T17:52:35.691+08:00 [2026-11-06 17:52:34] [FTP] CMD PASV +[RX] 2026-11-06T17:52:35.742+08:00 [2026-11-06 17:52:34] [FTP] CMD NLST +[RX] 2026-11-06T17:52:35.918+08:00 [2026-11-06 17:52:34] [FTP] CMD TYPE I +[RX] 2026-11-06T17:52:35.918+08:00 [2026-11-06 17:52:34] [FTP] CMD PASV +[RX] 2026-11-06T17:52:35.969+08:00 [2026-11-06 17:52:34] [FTP] CMD STOR WAVE09.BIN +[RX] 2026-11-06T17:52:36.052+08:00 [2026-11-06 17:52:34] [FTP] UPLOAD '/WAVE/WAVE09.BIN' 5250 bytes OK +[RX] 2026-11-06T17:52:36.661+08:00 [2026-11-06 17:52:35] [FTP] CMD TYPE A +[RX] 2026-11-06T17:52:36.661+08:00 [2026-11-06 17:52:35] [FTP] CMD PASV +[RX] 2026-11-06T17:52:36.724+08:00 [2026-11-06 17:52:35] [FTP] CMD NLST +[RX] 2026-11-06T17:52:36.910+08:00 [2026-11-06 17:52:35] [FTP] CMD TYPE I +[RX] 2026-11-06T17:52:36.910+08:00 [2026-11-06 17:52:35] [FTP] CMD PASV +[RX] 2026-11-06T17:52:36.962+08:00 [2026-11-06 17:52:35] [FTP] CMD RETR WAVE09.BIN +[RX] 2026-11-06T17:52:37.128+08:00 [2026-11-06 17:52:36] [FTP] DOWNLOAD '/WAVE/WAVE09.BIN' OK +[RX] 2026-11-06T17:52:37.128+08:00 [2026-11-06 17:52:36] [FTP] CMD QUIT +[RX] 2026-11-06T17:52:37.149+08:00 [2026-11-06 17:52:36] [FTP] waiting for connection... +[RX] 2026-11-06T17:52:39.623+08:00 [2026-11-06 17:52:38][UI_CONTENT_PAGE] page close: id=wave_play +[RX] 2026-11-06T17:52:43.461+08:00 [2026-11-06 17:52:42][UI_CONTENT_PAGE] page open: id=wave_play rows=0 +[RX] 2026-11-06T18:10:04.225+08:00 [2026-11-06 18:10:03] [FTP] connection received from 192.168.31.161:54991... +[RX] 2026-11-06T18:10:04.225+08:00 [2026-11-06 18:10:03] [FTP] CMD USER admin +[RX] 2026-11-06T18:10:04.246+08:00 [2026-11-06 18:10:03] [FTP] CMD PASS admin +[RX] 2026-11-06T18:10:04.257+08:00 [2026-11-06 18:10:03] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T18:10:04.278+08:00 [2026-11-06 18:10:03] [FTP] CMD TYPE I +[RX] 2026-11-06T18:10:04.289+08:00 [2026-11-06 18:10:03] [FTP] CMD PASV +[RX] 2026-11-06T18:10:04.424+08:00 [2026-11-06 18:10:03] [FTP] CMD STOR WAVE06.BIN +[RX] 2026-11-06T18:10:04.487+08:00 [2026-11-06 18:10:03] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK +[RX] 2026-11-06T18:10:05.098+08:00 [2026-11-06 18:10:03] [FTP] CMD TYPE I +[RX] 2026-11-06T18:10:05.098+08:00 [2026-11-06 18:10:04] [FTP] CMD PASV +[RX] 2026-11-06T18:10:05.171+08:00 [2026-11-06 18:10:04] [FTP] CMD RETR WAVE06.BIN +[RX] 2026-11-06T18:10:05.346+08:00 [2026-11-06 18:10:04] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK +[RX] 2026-11-06T18:10:05.357+08:00 [2026-11-06 18:10:04] [FTP] CMD QUIT +[RX] 2026-11-06T18:10:05.367+08:00 [2026-11-06 18:10:04] [FTP] waiting for connection... +[RX] 2026-11-06T18:11:20.089+08:00 [2026-11-06 18:11:18][UI_CONTENT_PAGE] page open: id=wave_play rows=0 +[RX] 2026-11-06T18:11:38.915+08:00 [2026-11-06 18:11:37] [FTP] connection received from 192.168.31.161:54867... +[RX] 2026-11-06T18:11:38.936+08:00 [2026-11-06 18:11:37] [FTP] CMD USER admin +[RX] 2026-11-06T18:11:38.946+08:00 [2026-11-06 18:11:37] [FTP] CMD PASS admin +[RX] 2026-11-06T18:11:38.967+08:00 [2026-11-06 18:11:37] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T18:11:38.967+08:00 [2026-11-06 18:11:37] [FTP] CMD TYPE I +[RX] 2026-11-06T18:11:38.998+08:00 [2026-11-06 18:11:37] [FTP] CMD PASV +[RX] 2026-11-06T18:11:39.122+08:00 [2026-11-06 18:11:38] [FTP] CMD STOR WAVE06.BIN +[RX] 2026-11-06T18:11:39.216+08:00 [2026-11-06 18:11:38] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK +[RX] 2026-11-06T18:11:39.837+08:00 [2026-11-06 18:11:38] [FTP] CMD TYPE I +[RX] 2026-11-06T18:11:39.837+08:00 [2026-11-06 18:11:38] [FTP] CMD PASV +[RX] 2026-11-06T18:11:39.879+08:00 [2026-11-06 18:11:38] [FTP] CMD RETR WAVE06.BIN +[RX] 2026-11-06T18:11:40.013+08:00 [2026-11-06 18:11:38] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK +[RX] 2026-11-06T18:11:40.013+08:00 [2026-11-06 18:11:38] [FTP] CMD QUIT +[RX] 2026-11-06T18:11:40.023+08:00 [2026-11-06 18:11:38] [FTP] waiting for connection... +[RX] 2026-11-06T18:12:02.780+08:00 [2026-11-06 18:12:01] [FTP] connection received from 192.168.31.161:53103... +[RX] 2026-11-06T18:12:02.802+08:00 [2026-11-06 18:12:01] [FTP] CMD USER admin +[RX] 2026-11-06T18:12:02.812+08:00 [2026-11-06 18:12:01] [FTP] CMD PASS admin +[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD TYPE I +[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD PASV +[RX] 2026-11-06T18:12:02.957+08:00 [2026-11-06 18:12:01] [FTP] CMD STOR WAVE06.BIN +[RX] 2026-11-06T18:12:03.030+08:00 [2026-11-06 18:12:01] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK +[RX] 2026-11-06T18:12:03.633+08:00 [2026-11-06 18:12:02] [FTP] CMD TYPE I +[RX] 2026-11-06T18:12:03.643+08:00 [2026-11-06 18:12:02] [FTP] CMD PASV +[RX] 2026-11-06T18:12:03.705+08:00 [2026-11-06 18:12:02] [FTP] CMD RETR WAVE06.BIN +[RX] 2026-11-06T18:12:03.839+08:00 [2026-11-06 18:12:02] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK +[RX] 2026-11-06T18:12:03.839+08:00 [2026-11-06 18:12:02] [FTP] CMD QUIT +[RX] 2026-11-06T18:12:03.860+08:00 [2026-11-06 18:12:02] [FTP] waiting for connection... +[RX] 2026-11-06T18:14:44.047+08:00 [2026-11-06 18:14:42] [FTP] connection received from 192.168.31.161:58594... +[RX] 2026-11-06T18:14:44.057+08:00 [2026-11-06 18:14:42] [FTP] CMD USER admin +[RX] 2026-11-06T18:14:44.057+08:00 [2026-11-06 18:14:42] [FTP] CMD PASS admin +[RX] 2026-11-06T18:14:44.067+08:00 [2026-11-06 18:14:42] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T18:14:44.067+08:00 [2026-11-06 18:14:42] [FTP] CMD TYPE A +[RX] 2026-11-06T18:14:44.078+08:00 [2026-11-06 18:14:42] [FTP] CMD PASV +[RX] 2026-11-06T18:14:44.151+08:00 [2026-11-06 18:14:43] [FTP] CMD LIST +[RX] 2026-11-06T18:14:44.285+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE00.BIN +[RX] 2026-11-06T18:14:44.627+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE01.BIN +[RX] 2026-11-06T18:14:44.969+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE02.BIN +[RX] 2026-11-06T18:14:45.312+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE03.BIN +[RX] 2026-11-06T18:14:45.644+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE04.BIN +[RX] 2026-11-06T18:14:45.997+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE05.BIN +[RX] 2026-11-06T18:14:46.340+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE06.BIN +[RX] 2026-11-06T18:14:46.672+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE07.BIN +[RX] 2026-11-06T18:14:47.016+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE08.BIN +[RX] 2026-11-06T18:14:47.358+08:00 [2026-11-06 18:14:46] [FTP] CMD DELE WAVE09.BIN +[RX] 2026-11-06T18:14:48.292+08:00 [2026-11-06 18:14:47] [FTP] CMD TYPE A +[RX] 2026-11-06T18:14:48.292+08:00 [2026-11-06 18:14:47] [FTP] CMD PASV +[RX] 2026-11-06T18:14:48.364+08:00 [2026-11-06 18:14:47] [FTP] CMD LIST +[RX] 2026-11-06T18:14:48.560+08:00 [2026-11-06 18:14:47] [FTP] CMD QUIT +[RX] 2026-11-06T18:14:48.602+08:00 [2026-11-06 18:14:47] [FTP] waiting for connection... +[RX] 2026-11-06T18:14:52.299+08:00 [2026-11-06 18:14:51][UI_CONTENT_PAGE] page close: id=wave_play +[RX] 2026-11-06T18:14:56.144+08:00 [2026-11-06 18:14:55][UI_CONTENT_PAGE] page open: id=wave_play rows=0 +[RX] 2026-11-06T18:14:56.155+08:00 [2026-11-06 18:14:55][ERR][UI_TASK] ui wave head idx=8 open fail fr=4 +[RX] 2026-11-06T18:14:59.703+08:00 [2026-11-06 18:14:58][ERR][UI_TASK] ui wave head idx=8 open fail fr=4 +[RX] 2026-11-06T18:14:59.724+08:00 [2026-11-06 18:14:58][ERR][UI_TASK] ui wave head idx=8 open fail fr=4 +[RX] 2026-11-06T18:15:02.069+08:00 [2026-11-06 18:15:00][UI_CONTENT_PAGE] page close: id=wave_play +[RX] 2026-11-06T18:15:05.361+08:00 [2026-11-06 18:15:04] [FTP] connection received from 192.168.31.161:60925... +[RX] 2026-11-06T18:15:05.372+08:00 [2026-11-06 18:15:04] [FTP] CMD USER admin +[RX] 2026-11-06T18:15:05.372+08:00 [2026-11-06 18:15:04] [FTP] CMD PASS admin +[RX] 2026-11-06T18:15:05.382+08:00 [2026-11-06 18:15:04] [FTP] CMD CWD /WAVE +[RX] 2026-11-06T18:15:05.382+08:00 [2026-11-06 18:15:04] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:05.393+08:00 [2026-11-06 18:15:04] [FTP] CMD PASV +[RX] 2026-11-06T18:15:05.466+08:00 [2026-11-06 18:15:04] [FTP] CMD STOR WAVE00.BIN +[RX] 2026-11-06T18:15:05.529+08:00 [2026-11-06 18:15:04] [FTP] UPLOAD '/WAVE/WAVE00.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:06.130+08:00 [2026-11-06 18:15:05] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:06.140+08:00 [2026-11-06 18:15:05] [FTP] CMD PASV +[RX] 2026-11-06T18:15:06.203+08:00 [2026-11-06 18:15:05] [FTP] CMD RETR WAVE00.BIN +[RX] 2026-11-06T18:15:06.367+08:00 [2026-11-06 18:15:05] [FTP] DOWNLOAD '/WAVE/WAVE00.BIN' OK +[RX] 2026-11-06T18:15:06.367+08:00 [2026-11-06 18:15:05] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:06.377+08:00 [2026-11-06 18:15:05] [FTP] CMD PASV +[RX] 2026-11-06T18:15:06.449+08:00 [2026-11-06 18:15:05] [FTP] CMD STOR WAVE01.BIN +[RX] 2026-11-06T18:15:06.522+08:00 [2026-11-06 18:15:05] [FTP] UPLOAD '/WAVE/WAVE01.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:07.135+08:00 [2026-11-06 18:15:06] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:07.135+08:00 [2026-11-06 18:15:06] [FTP] CMD PASV +[RX] 2026-11-06T18:15:07.197+08:00 [2026-11-06 18:15:06] [FTP] CMD RETR WAVE01.BIN +[RX] 2026-11-06T18:15:07.363+08:00 [2026-11-06 18:15:06] [FTP] DOWNLOAD '/WAVE/WAVE01.BIN' OK +[RX] 2026-11-06T18:15:07.363+08:00 [2026-11-06 18:15:06] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:07.373+08:00 [2026-11-06 18:15:06] [FTP] CMD PASV +[RX] 2026-11-06T18:15:07.445+08:00 [2026-11-06 18:15:06] [FTP] CMD STOR WAVE02.BIN +[RX] 2026-11-06T18:15:07.519+08:00 [2026-11-06 18:15:06] [FTP] UPLOAD '/WAVE/WAVE02.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:08.141+08:00 [2026-11-06 18:15:07] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:08.152+08:00 [2026-11-06 18:15:07] [FTP] CMD PASV +[RX] 2026-11-06T18:15:08.193+08:00 [2026-11-06 18:15:07] [FTP] CMD RETR WAVE02.BIN +[RX] 2026-11-06T18:15:08.370+08:00 [2026-11-06 18:15:07] [FTP] DOWNLOAD '/WAVE/WAVE02.BIN' OK +[RX] 2026-11-06T18:15:08.381+08:00 [2026-11-06 18:15:07] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:08.381+08:00 [2026-11-06 18:15:07] [FTP] CMD PASV +[RX] 2026-11-06T18:15:08.454+08:00 [2026-11-06 18:15:07] [FTP] CMD STOR WAVE03.BIN +[RX] 2026-11-06T18:15:08.538+08:00 [2026-11-06 18:15:07] [FTP] UPLOAD '/WAVE/WAVE03.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:09.139+08:00 [2026-11-06 18:15:08] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:09.150+08:00 [2026-11-06 18:15:08] [FTP] CMD PASV +[RX] 2026-11-06T18:15:09.191+08:00 [2026-11-06 18:15:08] [FTP] CMD RETR WAVE03.BIN +[RX] 2026-11-06T18:15:09.366+08:00 [2026-11-06 18:15:08] [FTP] DOWNLOAD '/WAVE/WAVE03.BIN' OK +[RX] 2026-11-06T18:15:09.366+08:00 [2026-11-06 18:15:08] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:09.377+08:00 [2026-11-06 18:15:08] [FTP] CMD PASV +[RX] 2026-11-06T18:15:09.461+08:00 [2026-11-06 18:15:08] [FTP] CMD STOR WAVE04.BIN +[RX] 2026-11-06T18:15:09.512+08:00 [2026-11-06 18:15:08] [FTP] UPLOAD '/WAVE/WAVE04.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:10.117+08:00 [2026-11-06 18:15:09] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:10.127+08:00 [2026-11-06 18:15:09] [FTP] CMD PASV +[RX] 2026-11-06T18:15:10.191+08:00 [2026-11-06 18:15:09] [FTP] CMD RETR WAVE04.BIN +[RX] 2026-11-06T18:15:10.367+08:00 [2026-11-06 18:15:09] [FTP] DOWNLOAD '/WAVE/WAVE04.BIN' OK +[RX] 2026-11-06T18:15:10.367+08:00 [2026-11-06 18:15:09] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:10.378+08:00 [2026-11-06 18:15:09] [FTP] CMD PASV +[RX] 2026-11-06T18:15:10.450+08:00 [2026-11-06 18:15:09] [FTP] CMD STOR WAVE05.BIN +[RX] 2026-11-06T18:15:10.513+08:00 [2026-11-06 18:15:09] [FTP] UPLOAD '/WAVE/WAVE05.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:11.117+08:00 [2026-11-06 18:15:10] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:11.127+08:00 [2026-11-06 18:15:10] [FTP] CMD PASV +[RX] 2026-11-06T18:15:11.190+08:00 [2026-11-06 18:15:10] [FTP] CMD RETR WAVE05.BIN +[RX] 2026-11-06T18:15:11.366+08:00 [2026-11-06 18:15:10] [FTP] DOWNLOAD '/WAVE/WAVE05.BIN' OK +[RX] 2026-11-06T18:15:11.366+08:00 [2026-11-06 18:15:10] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:11.377+08:00 [2026-11-06 18:15:10] [FTP] CMD PASV +[RX] 2026-11-06T18:15:11.555+08:00 [2026-11-06 18:15:10] [FTP] CMD STOR WAVE06.BIN +[RX] 2026-11-06T18:15:11.576+08:00 [2026-11-06 18:15:10] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:12.180+08:00 [2026-11-06 18:15:11] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:12.191+08:00 [2026-11-06 18:15:11] [FTP] CMD PASV +[RX] 2026-11-06T18:15:12.253+08:00 [2026-11-06 18:15:11] [FTP] CMD RETR WAVE06.BIN +[RX] 2026-11-06T18:15:12.398+08:00 [2026-11-06 18:15:11] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK +[RX] 2026-11-06T18:15:12.398+08:00 [2026-11-06 18:15:11] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:12.408+08:00 [2026-11-06 18:15:11] [FTP] CMD PASV +[RX] 2026-11-06T18:15:12.470+08:00 [2026-11-06 18:15:11] [FTP] CMD STOR WAVE07.BIN +[RX] 2026-11-06T18:15:12.554+08:00 [2026-11-06 18:15:11] [FTP] UPLOAD '/WAVE/WAVE07.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:13.156+08:00 [2026-11-06 18:15:12] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:13.156+08:00 [2026-11-06 18:15:12] [FTP] CMD PASV +[RX] 2026-11-06T18:15:13.207+08:00 [2026-11-06 18:15:12] [FTP] CMD RETR WAVE07.BIN +[RX] 2026-11-06T18:15:13.363+08:00 [2026-11-06 18:15:12] [FTP] DOWNLOAD '/WAVE/WAVE07.BIN' OK +[RX] 2026-11-06T18:15:13.363+08:00 [2026-11-06 18:15:12] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:13.374+08:00 [2026-11-06 18:15:12] [FTP] CMD PASV +[RX] 2026-11-06T18:15:13.447+08:00 [2026-11-06 18:15:12] [FTP] CMD STOR WAVE08.BIN +[RX] 2026-11-06T18:15:13.519+08:00 [2026-11-06 18:15:12] [FTP] UPLOAD '/WAVE/WAVE08.BIN' 5250 bytes OK +[RX] 2026-11-06T18:15:14.145+08:00 [2026-11-06 18:15:13] [FTP] CMD TYPE I +[RX] 2026-11-06T18:15:14.145+08:00 [2026-11-06 18:15:13] [FTP] CMD PASV +[RX] 2026-11-06T18:15:14.186+08:00 [2026-11-06 18:15:13] [FTP] CMD RETR WAVE08.BIN +[RX] 2026-11-06T18:15:14.363+08:00 [2026-11-06 18:15:13] [FTP] DOWNLOAD '/WAVE/WAVE08.BIN' OK +[RX] 2026-11-06T18:15:14.363+08:00 [2026-11-06 18:15:13] [FTP] CMD TYPE A +[RX] 2026-11-06T18:15:14.374+08:00 [2026-11-06 18:15:13] [FTP] CMD PASV +[RX] 2026-11-06T18:15:14.436+08:00 [2026-11-06 18:15:13] [FTP] CMD LIST +[RX] 2026-11-06T18:15:14.561+08:00 [2026-11-06 18:15:13] [FTP] CMD QUIT +[RX] 2026-11-06T18:15:14.571+08:00 [2026-11-06 18:15:13] [FTP] waiting for connection... +[RX] 2026-11-06T18:15:18.286+08:00 [2026-11-06 18:15:17][UI_CONTENT_PAGE] page open: id=wave_play rows=0 +[RX] 2026-11-06T18:15:21.817+08:00 [2026-11-06 18:15:20][UI_CONTENT_PAGE] page close: id=wave_play -- 2.55.0.windows.2