9db940a615bf5c0f103df76eaa59127942a12aa4
- mag160c_demo3.c 从内联管线重写为 render API 调用:删除 DDT 加载/NUC/ LUT/gray/2x/FFC 状态机实现(~700 行),保留 USB 取帧/GDI/探针/附加环节 - 附加环节(0x230 帧差/0x41fe8 隔行平滑/0x30 gray 覆盖)经 render 的 post_nuc/post_gray 钩子挂接,编译开关与运行时按键 0/8/9 不变 - mag160c_render 新增 mag160c_render_request_ffc / get_nuc 访问器 - 实测无回归:FFC 时序 init@20→FFC(1)@28→漂移触发,与 v5 一致; stats 正常,auto BMP 生成正常;全开关版本编译通过 - linux_demo 修帧组装(38400px+28B 尾),快门=31492 sel=2 正常
MAG160C 热像仪逆向工程
MAG160C 热像仪(160×120,USB VID 0x833C)的 USB 协议、官方 SDK 逆向、纯 C SDK 和官方渲染管线逐像素复刻(demo3 v5)的完整工程。
从这里开始
新接手者按顺序阅读:
analysis/reverse_20260813_full.md— 官方管线 Ghidra 全量逆向 + 鬼影根因(最新)analysis/session_state.md— 当前会话状态与恢复点(心跳锚点)交接_完整逆向工程说明_20260811.md— 项目总交接(目录/环境/历史/失败路线)analysis/protocol_spec.md— USB 协议/帧/命令/温度规格csdk/README.md— C SDK 完整使用文档(构建/API/工具/测试)csdk/tools/mag160c_demo3.c— 主程序(官方管线复刻)
当前状态(2026-08-13)
- demo3 v5 已完整复刻官方渲染管线:DDT 校准表加载 → 快门驱动端点选择与 Q12 插值 → ref=FFC 窗口 4×type1 帧均值 → NUC 查表 → 盲元补偿 → 窗口 → LUT1024 重建 → 灰度 → 2x 升采样 → 官方调色板
- 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
- 同静态场景 gray 直方图与官方相关性 0.92(跨会话)
- 原"鬼影"问题的根因已定位并复刻官方行为(见 reverse_20260813_full.md §7)
硬件
- 设备:MAG160C 热像仪,分辨率 160×120,15 fps
- USB VID:
0x833C,常见 PID:0x0001 - 帧:19200 个小端
uint16;端点:命令0x03/响应0x82/实时帧0x81
快速入口
# 编译 demo3(官方管线复刻)
gcc -O2 -w -DMAG160C_STATIC -I"csdk\third_party\libusb\win64" -I"csdk\include" -I"csdk\src" `
-o build-artifacts\mag160c_demo3.exe csdk\tools\mag160c_demo3.c `
csdk\src\mag160c_display.c csdk\src\mag160c_error.c `
csdk\third_party\libusb\win64\libusb-1.0.x64.a -lgdi32 -luser32
# 启动
Start-Process "build-artifacts\mag160c_demo3.exe" -WorkingDirectory "build-artifacts"
详细用法见 csdk/README.md。
仓库结构
| 路径 | 用途 |
|---|---|
csdk/ |
纯 C SDK + 工具(见 csdk/README.md) |
analysis/ |
逆向证据:反编译导出(ida/)、协议规格、交接文档、抓帧数据 |
IR_Camera_SDK-1.0.1/ |
原厂 Windows/Android/Linux SDK |
build-artifacts/ |
运行目录(demo3 exe、DDT 表、官方抓帧工具) |
docs/ vendor-docs/ app/ |
历史资料与模块文档 |
tools/resume_rev.ps1 |
会话恢复脚本(心跳配套) |
历史文档(早期 findings/progress/task_plan、根目录抓帧残留)已归档到
analysis/history/;早期探索工具源码在 csdk/tools/legacy/。
仓库说明
仓库包含官方 SDK、第三方依赖、二进制样本和抓帧数据。部分内容可能受原厂 许可限制,仅用于本项目的互操作性研究和设备调试。大型文件使用 Git LFS。
Languages
C
43%
Assembly
11.2%
Python
10%
Java
9.3%
C++
6.9%
Other
19.4%