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

5.9 KiB
Raw Blame History

全链路测试结果(第一轮 · 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 写头

环境备注

  • 设备睡眠:广播窗口 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 线稿)+ 上屏实拍(待用户目视确认)。