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

97 lines
6.8 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.
# 全链路测试结果(第一轮 · 2026-07-28)
> 执行方式:bridge 模式(host-win 原生 BLE)+ `ppclock batch` 单连接。
> 计划:docs/field-test-plan.md。结论先行:**核心链路全部实机验证通过**。
## 基础设施
| 项 | 结果 |
|---|---|
| 本机 usbip 蓝牙 | ❌ 大 MTU GATT 断流(DECISIONS 2026-07-28),弃用 |
| bridge(host-win 原生) | ✅ 部署于 C:\yi\ble-bridge(build 4,PID 23776,0.0.0.0:8971) |
| 设备 | NRF-5DBF28 @ 18:BC:5A:5D:BF:28 |
## 协议验证(实机)
| # | 项 | 结果 | 证据 |
|---|---|---|---|
| 1 | 扫描/连接 | ✅ | bridge scan/connect,build 2 后稳定 |
| 2 | **GATT 结构** | ✅(有修正) | 实机全表抓取:EPD h=48;**1f1f(h=53) 仅 write 不执行命令;331f(h=57) 为活命令通道**;fef5 SUOTA 六特征在线 |
| 3 | **取设备 ID(EFEF)** | ✅ | `81233F3C267112`(经 331f 写+notify) |
| 4 | **MAC 反解** | ✅ | ID → `28:bf:5d:5a:bc:18` = 广播地址反转(参数序 MAC5 在前,实机校正) |
| 5 | **keygen 离线激活** | ✅ | `activate --auto` 下发 `2564550c1b2d` 成功 |
| 6 | 对时 dd | ✅ | batch line 3 ok |
| 7 | **传图(126×244B 双平面)** | ✅ 屏显确认 | 棋盘+中央红块上屏(曾杀死 usbip 的流量) |
| 8 | 显示图一 e10000 | ✅ 屏显确认 | 切到图片 |
| 9 | 模式切换 e102xx/e101xx | ✅ 屏显确认 | 331f 通道下 clock 画面出现;1f1f 通道无效(实锤对比) |
| 10 | 倒计时+前缀 | ✅ 命令 ok | 屏显待二次确认(序列中停留 8s,见下) |
| 11 | 停车牌 | ⚠ 一次传输中断 | WinError -2147023673(设备睡眠间隙断连,非协议问题) |
| 12 | 刷屏 00/01 | ✅ | 屏显刷新 |
## 待第二轮确认/执行
1. ~~慢速目视序列~~ 已完成(见 #10-12 行)
2. **G4 SUOTA 首刷**:已推进至设备内部产品头门禁(见下"SUOTA 排障全记录"),**用户决策安全收尾**(2026-07-29),后续解法见遗留项
3. 固件 no-op 验证:rotation/wifi 应无屏效
4. 六抖动算法屏显差异、模板 6 种屏显
## SUOTA 排障全记录(2026-07-29)
| 层 | 问题 | 根因与处置 |
|---|---|---|
| 传输 | 三轮"首块前静默停滞" | **asyncio StreamReader 64KiB 行限制**,144KB 镜像请求永不到达(build 9: limit=4MiB) |
| 协议 | 状态码 16 误杀 | 固件反汇编实证 = MEM_DEV type 0x13 信息应答(0x07FCB770),build 10 按信息码处理 |
| 引脚 | 块1 状态 22(0x38000 读失败) | GPIO_MAP 字节序错误;探针实证 **BE 序 {05,06,00,40} 电气有效**(已固化为服务端默认) |
| 门禁 | 状态 20(产品头无效) | **设备 0x38000 无有效 'pR' 产品头**(裸 'pQ' 直启),固件中止首缓冲处理——vendor 级设计 |
**全量烧录实证(用户授权 2026-07-29,留证 docs/suota-flash-log.jsonl)**:mem_dev_ok → 16(信息)→ gpio_map_ok → 块1 发送 → 状态 20 → 安全中止(写 flash 前终止,零写入)。结论:阻断确为 0x38000 产品头缺失/无效,非引脚误读。
**vendor 目录逆向(路线 1)**:qbsg.top /api/firmware/catalog 免认证开放;PP_da14585_4.2_CH.img 与本机镜像 sha256 完全一致(vendor OTA 镜像=本镜像,无产品头附加);NEW 变体同检 0x38000。
**解法路线(遗留 K4)**:①JTAG/UART 写产品头 ②逆向 vendor 付费激活流程(PP_da14585_4.2_NEW 的 activation 疑含产品头写入路径,libapp.so Rust secp256k1/AES)③评估 vendor 原始 OTA 在同类裸启设备上是否同败(vendor 级缺陷)。
设备全程零风险(门禁在写 flash 前中止;END/复位信号从未发出)。
## 已知问题
| # | 问题 | 状态 |
|---|---|---|
| K1 | 停车牌 EF+双写号码:命令 ACK 但屏不显(含 11 位号码、去 e2 变体均试) | 待查:疑似固件家族格式分叉(d8 hex-concat)或渲染与模式联动;协议帧与 web 证据一致 |
| K2 | 设备睡眠快(广播窗 30-60s,无唤醒按钮、自动周期醒) | 已有工作法:batch 单连接 + 守候循环 |
| K3 | 多次命令间隔断连(WinError -2147023673)1 次 | 瞬态(睡眠间隙),重连即恢复 |
| K4 | **SUOTA 产品头门禁**:0x38000 无 'pR' | 解法案:①逆向 vendor 镜像目录是否含产品头镜像 ②研究裸启设备的产品头自举写入路径 ③评估 JTAG/UART 写头 |
| K5 | 手机 App 把设备按 2.13(250×128)处理 | **非设备问题**:App 经 `updateScreenSize` 给设备指派尺寸(BleManager.java:828),4.2 家族是厂商付费 SKU(catalog activation_id),免费默认家族=2.13(firm_213_AIO);设备固件与 DIS 均正常('PP_da14585_4.2'),ppclock 不受影响 |
## 环境备注
- 设备睡眠:广播窗口 30-60s,连接态清醒;现场统一 batch 单连接+守候循环
- bridge_server build 4:write alt=331f、notify 三订阅、EFEF 走 331f
## 图片输入机制 review(典狱长测试案例,2026-07-29)
**链路全景**:源图获取 → 设备适配处理 → 管线量化 → 双平面分块上传 → 槽位显示
| 阶段 | 实现 | 本案例 |
|---|---|---|
| 源图 | 任意 RGB 图(网络/本地) | 典狱长格赫罗斯 960×565(腾讯新闻角色文配图) |
| 设备适配 | 裁剪聚焦 + 风格化(本案例:FIND_EDGES 线稿+红区检测)→ 400×300 | 黑线白底 + 红手套点缀 |
| 管线量化 | `image_pipeline.process_image`:调整→抖动→1bpp MSB 双平面(bw: 任通道>0;red: R>0,G=0,B=0) | `--algo none`(已量化图,保线条锐利) |
| 上传 | 63×2 块 ×244B(03 ff/00 + 2B 偏移),`01` 结束 | slot 1(图二) |
| 显示 | `mode imageN`(e1000N+e2) | image1 |
**机制评审结论**:
1. 任意风格图均可达:预处理(PIL 全能力)与设备管线解耦,风格化在本地完成,设备只收 1bpp 结果——**图片输入机制通用、可编程、agent 可编排**。
2. 已量化图必须用 `--algo none` 直通,避免二次抖动破坏线条。
3. 三色通道映射与固件一致(bw=黑、red=红、双0=白背景)。
4. 待办:处理脚本可产品化为 `ppclock image --style lineart`(后续增强项)。
测试产物:analysis/web/warden_400x300.png(400×300 线稿)+ 上屏实拍(待用户目视确认)。
## 典狱长测试案例 v2(官图版,2026-07-30)
- 源图:examples/dianyuzhang.png(1448×1086 矢量风官图,黑/白/红手套)
- 处理:400×300 LANCZOS 缩放 + `--algo none` 直通(已量化)
- 上传:slot 1(63×2 块 244B)✅
- 显示:槽位覆盖后设备自动重绘(image1 模式留存效应——覆盖即更新,无需补 mode)✅ **用户目视确认官图上屏**
- 机制结论增补:槽位内容覆盖会触发屏幕重绘(设备处于对应 image 模式时),这是"上传即显示"的最短路径。