84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
# MAG160C 会话状态与恢复点(2026-08-13)
|
||
|
||
> 本文件是"心跳"锚点:每个里程碑更新一次。若会话中断,新会话先读本文件 +
|
||
> `analysis/reverse_20260813_full.md`,然后运行 `tools/resume_rev.ps1` 继续。
|
||
|
||
## 当前阶段
|
||
|
||
**阶段 7/7:LiThermal 对接评估 + 抽象层完成(2026-08-19)**
|
||
|
||
## 已完成的里程碑
|
||
|
||
- [x] 工具链:Ghidra 12.1.2(headless)+ IDA Free 8.4 部署,5 个二进制全量导出
|
||
- [x] 官方管线完整反编译(DDT 加载 / 端点选择 / Q12 插值 / ref=4×type1 帧均值 /
|
||
NUC / 盲元 / 窗口 / LUT1024 / 2x 升采样 / FFC 状态机)
|
||
- [x] DDT 文件解析(%TEMP%\Core160043865 → build-artifacts/mag160c_official.ddt)
|
||
- [x] 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
|
||
- [x] 鬼影根因文档:analysis/reverse_20260813_full.md §7
|
||
- [x] demo3 v5 官方复刻实现并实机运行
|
||
- [x] 零像素根因定位与修复(load_ddt 表错位)
|
||
- [x] **颗粒感修复**:demo3 显示层改为官方同款 320×240(2x 平滑灰度 +
|
||
调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796
|
||
- [x] **FFC 频率对齐**:补官方"启动强制 FFC"逻辑(mode 0 帧 75 无条件
|
||
FFC(0),trace 实测启动阶段 FFC(0) 间隔 59~394 帧 ≈ 4~26s,
|
||
稳定后 1800 帧 ≈ 120s,demo3 已一致)
|
||
- [x] 官方附加环节全部移植(df6c6dd):0x230 帧差 / 0x41fe8 隔行平滑 /
|
||
0x30 gray 覆盖(auto/manual)/ Nx 升采样,编译开关 OFF_IMPL_*
|
||
- [x] **平台无关渲染模块 mag160c_render**(5c22bfe):官方管线封装为无
|
||
平台依赖 API(输入 USB 帧 → 输出 320×240 RGB24),FFC 命令走回调
|
||
- [x] **Linux 参考程序 mag160c_linux_demo**(5c22bfe):libusb + render API
|
||
+ 显示后端抽象(fbdev/DRM/LVGL),Windows 可编译验证,实测正常
|
||
- [x] **demo3 迁移到 render 库**(9db940a):删内联管线 ~700 行,附加环节
|
||
经 post_nuc/post_gray 钩子挂接;FFC 时序/画面与 v5 一致,无回归
|
||
- [x] 移植评估文档 docs/linux_port_plan.md:芯片推荐 T113-S3(QFP128 非
|
||
BGA ~20 元)、动画库 LVGL+rlottie(LiThermal 同款)、整机成本估算
|
||
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926…9db940a(7 个)
|
||
- [ ] push(等服务器上线,用户手动)
|
||
|
||
## 颗粒感问题(已解决,2026-08-14)
|
||
|
||
- 现象:官方画面比 demo3 清晰,demo3 颗粒感重。
|
||
- 根因:demo3 v5 的显示层渲染的是 160×120 原始灰度(最近邻放大到 640×480),
|
||
而官方输出是 2x 升采样后的 320×240(2-tap 平滑本身抑噪),官方 app 显示
|
||
的也是这个 2x 缓冲。
|
||
- 排查过程(已排除的嫌疑):FUN_1800175a0(0x230)是帧差偏移调整非平滑;
|
||
0x41fe8 后处理(FUN_1800184f0/660 隔行平滑)官方会话 =0 未启用;
|
||
temporal filter 0x41fe0=1 未启用;f20 mode=1 直通。
|
||
- 修复:render_bmp 改用 g_gray320(官方 2x 缓冲)上色,BMP/窗口改 320×240,
|
||
StretchBlt 加 HALFTONE。
|
||
- 验证:320×240 BMP 与官方同场景 pair_000.rgb 直方图相关性 0.9796,
|
||
颜色数 227 = 官方 227(之前 160×120 版只有 ~161 色)。
|
||
|
||
## 常用命令
|
||
|
||
```powershell
|
||
# 编译 demo3 v6(render 库版)
|
||
gcc -O2 -w -DMAG160C_STATIC -I"C:\Project\MAG160C\csdk\third_party\libusb\win64" -I"C:\Project\MAG160C\csdk\include" -I"C:\Project\MAG160C\csdk\src" -o "C:\Project\MAG160C\build-artifacts\mag160c_demo3.exe" "C:\Project\MAG160C\csdk\tools\mag160c_demo3.c" "C:\Project\MAG160C\csdk\src\mag160c_render.c" "C:\Project\MAG160C\csdk\src\mag160c_display.c" "C:\Project\MAG160C\csdk\src\mag160c_error.c" "C:\Project\MAG160C\csdk\third_party\libusb\win64\libusb-1.0.x64.a" -lgdi32 -luser32
|
||
|
||
# Linux 参考程序(Windows 可编译运行,出 BMP)
|
||
gcc -O2 -w -DMAG160C_STATIC -I"C:\Project\MAG160C\csdk\third_party\libusb\win64" -I"C:\Project\MAG160C\csdk\include" -I"C:\Project\MAG160C\csdk\src" -o "C:\Project\MAG160C\build-artifacts\mag160c_linux_demo.exe" "C:\Project\MAG160C\csdk\tools\mag160c_linux_demo.c" "C:\Project\MAG160C\csdk\src\mag160c_render.c" "C:\Project\MAG160C\csdk\src\mag160c_ir.c" "C:\Project\MAG160C\csdk\src\mag160c_frame.c" "C:\Project\MAG160C\csdk\src\mag160c_temp.c" "C:\Project\MAG160C\csdk\src\mag160c_tcm.c" "C:\Project\MAG160C\csdk\src\mag160c_error.c" "C:\Project\MAG160C\csdk\src\mag160c_display.c" "C:\Project\MAG160C\csdk\third_party\libusb\win64\libusb-1.0.x64.a"
|
||
|
||
# 运行/停止
|
||
Start-Process "C:\Project\MAG160C\build-artifacts\mag160c_demo3.exe" -WorkingDirectory "C:\Project\MAG160C\build-artifacts"
|
||
Stop-Process -Name mag160c_demo3 -Force -ErrorAction SilentlyContinue
|
||
|
||
# 官方采集(先停 demo3)
|
||
& "C:\Project\MAG160C\build-artifacts\tsdk_pair3.exe" "C:\Project\MAG160C\analysis\pairs_final_20260813" 8 6000
|
||
# 注意:tsdk_pair3 的 config.txt / pair_*.meta / pair_*.win 写在进程 CWD,
|
||
# 跑完要把 C:\Project\MAG160C 下的 config.txt 和 pair_0*.meta/win 移回目录。
|
||
|
||
# 对比/复算脚本(Python)
|
||
# C:\Users\ZXC\AppData\Local\Temp\opencode\compare_live.py demo3捕获 vs 官方同场景
|
||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_nuc.py 官方抓帧重建验证
|
||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_full.py 全链路验证
|
||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_c_pipeline.exe C实现离线复算
|
||
```
|
||
|
||
## 心跳约定
|
||
|
||
- 每完成一个里程碑,更新本文件"已完成的里程碑"勾选。
|
||
- 会话中断恢复流程:
|
||
1. 读本文件 + `analysis/reverse_20260813_full.md`
|
||
2. 运行 `tools/resume_rev.ps1`(自动检查设备/进程/编译/采集)
|
||
3. 按"零像素问题现场"继续
|