Files
MAG160C/analysis/session_state.md
T

86 lines
5.7 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.
# MAG160C 会话状态与恢复点(2026-08-13
> 本文件是"心跳"锚点:每个里程碑更新一次。若会话中断,新会话先读本文件 +
> `analysis/reverse_20260813_full.md`,然后运行 `tools/resume_rev.ps1` 继续。
## 当前阶段
**阶段 7/7LiThermal 对接评估 + 抽象层完成(2026-08-19**
## 已完成的里程碑
- [x] 工具链:Ghidra 12.1.2headless+ 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 帧 ≈ 120sdemo3 已一致)
- [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-S3QFP128 非
BGA ~20 元)、动画库 LVGL+rlottieLiThermal 同款)、整机成本估算
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926…9db940a7 个)
- [ ] 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 v6render 库版)
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,已归档到 analysis/reverse_tools/
# analysis/reverse_tools/compare_live.py demo3捕获 vs 官方同场景
# analysis/reverse_tools/verify_nuc.py 官方抓帧重建验证
# analysis/reverse_tools/verify_full.py 全链路验证
# analysis/reverse_tools/parse_ddt.py DDT 文件解析
# analysis/reverse_tools/parse_pcap.py pcap 抓包解析
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_c_pipeline.exe C实现离线复算
```
## 心跳约定
- 每完成一个里程碑,更新本文件"已完成的里程碑"勾选。
- 会话中断恢复流程:
1. 读本文件 + `analysis/reverse_20260813_full.md`
2. 运行 `tools/resume_rev.ps1`(自动检查设备/进程/编译/采集)
3. 按"零像素问题现场"继续