Files
MAG160C/analysis/session_state.md
T
ZXCLI 0bfb926892 完成官方管线全量逆向与 demo3 v5 复刻,清理仓库
- 逆向:Ghidra/IDA 全量反编译 CoreSDKLib.dll/ThermalSDK.dll/libthermalSDK.so/
  libcoresdk.so(ARM64)/libmagcore.so,导出 analysis/ida/export/
- 解码官方渲染管线:DDT 校准表加载->快门端点选择->Q12 插值->ref(4x type1 帧
  均值)->NUC 查表->盲元补偿->窗口->LUT1024 重建->2x 升采样->调色板
- 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
- demo3 v5:完整复刻官方管线(含 DDT 解析、FFC 状态机、快门温度驱动),
  修复 load_ddt 表错位导致的零像素问题
- 鬼影根因分析写入 analysis/reverse_20260813_full.md
- 心跳/恢复机制:analysis/session_state.md + tools/resume_rev.ps1
- 新增 tsdk_pair3 增强采集工具;历史工具归档 csdk/tools/legacy/;
  根目录抓帧残留删除,历史文档归档 analysis/history/
- csdk/README.md 完整使用文档;.gitignore/.gitattributes 补 LFS 规则
2026-08-13 23:16:12 +08:00

65 lines
3.6 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` 继续。
## 当前阶段
**阶段 5/5:全部完成(2026-08-13 晚)**
## 已完成的里程碑
- [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 在端点块内多读 blind 记录导致
EP1+ 表错位 1280 字节 → 修好后全帧 0 个零像素,gain=4000 正常值
- [x] demo3 vs 官方同场景对比:gray 直方图相关性 0.9197(跨会话)
- [ ] 提交(用户未要求,等待指示)
## 零像素问题(已解决,记录在案)
- 现象:demo3 的 nuc 在 (65,25)/(66,25) 为 0,官方同坐标 9987/9989。
- 根因:**demo3 的 load_ddt 读取布局错误**——blind 记录区在文件所有端点块
之后,但代码在每个端点块内读了 blind,导致 EP1+ 的 thr/gain 表整体
错位 1280 字节。错位表在死像素列附近的 seg0 gain=35321(应为 ~4000),
d2 踩中后 NUC 输出 clamp 到 0。
- 修复:thr+gain 按端点块顺序读完后再统一读 blindcsdk/tools/mag160c_demo3.c
load_ddt)。
- 验证:修复后全帧 0 个零像素;(65,25) nuc=9814、盲元目标 9740/9732
gain0=4000 正常值;窗口/统计正常([8493,10554] m9409 s258)。
## 常用命令
```powershell
# 编译 demo3 v5(工作表捕获版)
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_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
# 运行/停止
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. 按"零像素问题现场"继续