Files
qianbian/docs/field-test-plan.md
T

104 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 软硬件全链路测试计划(设备到场后执行)
> 目的:验证三线逆向结论在真机上的正确性,完成 G3/G4 的实机门禁。
> 前置:设备充电开机;本机蓝牙可用;`tools/check_env.py` 通过。
> 执行方式:`.venv/bin/python tools/field_test.py [--mac AA:BB:..]`(引导式,自动+目视确认)。
> 危险操作仅 `--ota` 分支,默认跳过。
## 阶段 0 · 预检(自动)
| # | 检查 | 通过标准 |
|---|------|----------|
| 0.1 | check_env.py | 全 OK |
| 0.2 | 蓝牙适配器 | `ppclock scan` 返回 ≥0 设备不报错 |
| 0.3 | 固件样本 | `ppclock ota app/firmware-PP_da14585_4.2_CH.img` 预检 ok(**不烧录**) |
## 阶段 1 · 发现与识别(自动)
| # | 检查 | 通过标准 |
|---|------|----------|
| 1.1 | `scan` | 发现 `NRF-XXXXXX` 设备,记录 MAC |
| 1.2 | `activate --show-id` | 收到 14 hex 设备 ID;本地反解 MAC 与 1.1 的 MAC 对比(字节序验证 → 回填 DECISIONS.md) |
| 1.3 | 断线重连 | CLI 连续两次命令均成功 |
## 阶段 2 · 激活(自动+目视)
| # | 检查 | 通过标准 |
|---|------|----------|
| 2.1 | `activate --auto` | ok=true,code 与 keygen 一致;屏上激活提示(若有)消失 |
| 2.2 | 错误码激活 | 发 6 字节全 0 码:无惩罚、后续命令仍可用(验证固件不门禁结论 §4.3) |
## 阶段 3 · 时钟/模式族(目视)
| # | 命令 | 屏显预期 |
|---|------|----------|
| 3.1 | `time` | 屏显时间与手机/电脑一致 |
| 3.2 | `mode clock1/2/3` | 三种时钟版式切换 |
| 3.3 | `mode calendar1/2/3` | 三种日历版式切换 |
| 3.4 | `toggle hour_format` | 12/24h 切换 |
| 3.5 | `toggle clock_color` | 时钟颜色变化 |
| 3.6 | `toggle invert` | 反色 |
| 3.7 | `toggle font` | 字体变化 |
| 3.8 | `toggle rotate180` | 旋转 180°(恢复再按一次) |
| 3.9 | `mode tricolor` / `mode mono` | 三色/黑白切换 |
| 3.10 | `clear` | 全屏刷新 |
## 阶段 4 · 图像(目视)
| # | 命令 | 屏显预期 |
|---|------|----------|
| 4.1 | `image <棋盘+红块测试图> --slot 0` → `mode image0` | 棋盘清晰、红块为红 |
| 4.2 | 六算法各传一张 | 抖动风格差异可见(Floyd/Atkinson/Bayer/Stucki/Jarvis/none) |
| 4.3 | `image --mono` | 无红色通道 |
| 4.4 | `image --size 400x180`(小图 cod=04 路径) | 小图正常 |
| 4.5 | 亮度/对比度/饱和度/旋转参数 | 效果可见 |
| 4.6 | `image --slot 1..3` + `mode image1..3` | 多槽位(注意:固件 EA0x 为 no-op 风险 → 记录实际行为) |
## 阶段 5 · 模板(目视)
6 模板(schedule/businesscard/memo/course/qrcode/custom)各传一次:版式正确、中文无方块、`【…】` 字段为红。
## 阶段 6 · 倒计时(目视)
| # | 命令 | 预期 |
|---|------|------|
| 6.1 | `countdown 2026-12-31 --prefix 目标` | 时钟界面显示前缀+天数 |
| 6.2 | `countdown --mode calendar 2026-12-31 --prefix 中考` | 日历界面 |
| 6.3 | `countdown --show-calendar --prefix test` | upload_rili 序列 |
| 6.4 | `countdown --off` | 倒计时关闭 |
## 阶段 7 · 其他命令(含固件 no-op 验证)
| # | 命令 | 预期 |
|---|------|------|
| 7.1 | `sleep --on --start 23 --end 7` | 时段内不刷新(次晨验证);`sleep --off` 恢复 |
| 7.2 | `parking 13800138000` | 停车牌显示 |
| 7.3 | `lut 0x05` / `lut 0x15` | 红/黑深度变化 |
| 7.4 | `rotation --count 4`、`rotation --interval 5` | **验证固件 no-op 结论**:预期无效果(firmware-analysis §3.3) |
| 7.5 | `wifi SSID PASS` | **验证 no-op**:预期无效果 |
| 7.6 | `raw e2` / `raw 01 --channel epd` | 提交/刷新 |
## 阶段 8 · 异常与契约(自动)
| # | 检查 | 通过标准 |
|---|------|----------|
| 8.1 | 错误参数 | `--json` 输出 `{"ok":false,...}`,退出码 1 |
| 8.2 | 设备关机中途执行 | 退出码 2,error 含连接失败 |
| 8.3 | `batch examples/field_test.jsonl` | 单连接全序执行,results 逐行 ok |
## 阶段 9 · 固件可控(高危,默认跳过,`--ota` 才执行)
| # | 步骤 | 预案 |
|---|------|------|
| 9.1 | field_test.py 自动制作仅改版本串镜像(`V:PP_da14585_4.2`→`V:PP_da14585_TST`,等长),fw_pack 重打包,CRC 验证 | 本地完成,不触机 |
| 9.2 | `ppclock --mac X ota /tmp/fw_tst.img --yes` | 观察块进度 302 块全 ok |
| 9.3 | 设备重启后 `scan` + `time` | 设备复活且可用 |
| 9.4 | 回滚 | `ota 原镜像 --yes` 刷回 |
| 9.5 | 若 9.2 失败/变砖 | 记录 SERV_STATUS 错误码;设备有备 bank(0x38000 产品头机制,firmware-analysis §5),断电重连试刷原镜像 |
## 结果回填
- 每步实际结果记于本文件"实测"列(执行时生成 field-test-result.md)
- 与协议不符处 → 改 docs/protocol.md + 测试向量 + DECISIONS.md
- 全过 → PROGRESS.md 将 G3/G4 从"协议级/工具级"升级为"实机验证",Plan Task 9 勾掉