4c940fe773409599e2c1e88f9bd42b48227f8578
照片方向(推翻上一轮的"传感器朝向"决定,用户明确否掉): 把显示旋转(锁定 90° + 手动旋转)与手动翻转一起烘进 JPEG,竖屏持机拍出来就是 竖屏 720x960,顺序与实时渲染器一致(先镜像再旋转)。温度数据不跟着转——probes/ NUC/extremes 仍在原始传感器空间,旋转只存在于呈现层;BLOCK_RENDER 升到 version 2 多存 rotDeg,旧文件(8B v1 块)解析为 rot=0,符合它们确实是传感器朝向的事实。 分析页映射改为直接复用 PhotoSaver.sensorToPhoto(...,1,1),杜绝两处各算一套。 标注风格(参考 FLIR/Testo 的仪表做法): - 图标改为细线方形准星 + 四短臂(原为圆环+圆点):方框限定测量区域、四臂指明确切 像素、中心镂空不遮挡被测点。 - 文字白字+深色描边(先描边后填充),去掉白色底板——白底挡住被测画面且像消费级 App; 描边让文字在黑冷端和白色热端都读得清。 - 极值改用 MAX/MIN 大写 + 引线把读数连到自己的准星;颜色仍取白色(彩色标点在铁虹 橙黄区会糊掉,区分靠文字)。 标注尺寸统一:AnnotSpec 的 320 单位是图像长边,实时界面原用 viewport.width()(竖屏 时是短边)去除 320,使实时标点只有照片的 3/4 大——这正是用户早先"照片标点太大"的 由来。现四处统一 max(w,h)/320。 录像清晰度:编码尺寸改为传感器 x3(竖屏 720x960),码率随像素数放大;帧的翻转+旋转 用一个 Matrix 一次 drawBitmap 完成,标点经 sensorToPhoto 落在同一变换下(矩阵复合 结果与 sensorToPhoto 按坐标推导核对一致)。实测 tkhd 720x960 / avc1 / 96帧 0丢失。 分析页"每个标记出现两次":不是坐标错,而是标签避让与绘制顺序有关——拍摄按 probes→MAX→MIN、分析按 MAX→MIN→probes,避让把标签推到不同位置。改为同序后叠加 完全重合(真机裁剪对比确认)。 排查方法:验证"文件里标记位置是否正确"不靠肉眼看截图叠加,直接解析 MDT 算期望像素 再统计该处中性白色像素数——据此一次证伪"旋转没生效":rot=90 处 markerPixels= 204/219/296/719,rot=0 处全为 0。 103 项测试全绿(新增 mirror x rotation 往返、旋转角点、v1→v2 渲染块兼容)。
MAG160C 热像仪统一工程
MAG160C 热像仪(160×120,15fps,USB VID 0x833C)的逆向工程与双端实现:
C 参考实现(Linux/Windows,源自官方 PC SDK 逆向)与安卓统一 App
(Kotlin + Compose,适配 Android 16,整合官方 4 个 App 的功能)。
从这里开始(新接手者阅读顺序)
docs/android_app/HANDOFF_DEVELOPMENT.md— 安卓 App 总交接(必读)docs/android_app/session_state.md— 会话心跳与待办(最新进度)analysis/README.md— 逆向工程总目录索引(Linux/Windows/Android 三条线)analysis/magcx_official_flow.md— 权威 USB 协议结论(官方源码逐行核对版)analysis/protocol_spec.md— 早期 PC 端协议逆向(硬件验证记录)csdk/README.md— C SDK 文档(构建/API/工具/测试)
仓库结构
| 路径 | 用途 |
|---|---|
android/ |
安卓统一 App(Kotlin + Compose,Gradle 工程,package com.mag160c.thermal):实时预览、拍照 MDT、录像、媒体库、离线分析、PDF 报告、任务巡检、设置 |
csdk/ |
纯 C SDK(官方管线 C 复刻:渲染/温度/IR 会话/FFC 调度,见 csdk/README.md) |
analysis/ |
逆向工程总目录(Linux/Windows/Android 三条 SDK 线的解包产物与结论,见 analysis/README.md) |
IR_Camera_SDK-1.0.1/ |
原厂 Windows/Android/Linux SDK 原始包 |
app/ |
官方安卓 APK 存档(普通版/专业版/ThermoScope/demo) |
build-artifacts/ |
构建产物(安卓 APK、PC demo3、DDT 标定数据) |
docs/android_app/ |
安卓 App 交接文档(HANDOFF / session_state / 逆向功能总表) |
vendor-docs/ |
厂商资料 |
tools/ |
会话恢复脚本 |
快速入口
安卓 App(构建/测试)
cd C:\Project\MAG160C\android
$env:JAVA_HOME = "C:\Tools\jdk-21"
.\gradlew.bat :app:assembleDebug test --no-daemon
# 产物:build-artifacts\mag160c-app-debug.apk
C 管线复刻 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"
硬件
- 设备:MAG160C 热像仪机芯,160×120 @15fps
- USB:VID
0x833CPID0x0001;端点 0x03 命令 / 0x82 响应 / 0x81 图像流 / 0x84 标定文件 / 0x05 标定上传 - 协议细节:
analysis/magcx_official_flow.md(权威)
里程碑
- 2026-08:官方 PC SDK(libmagcore/CoreSDKLib)逆向 + C 管线逐像素复刻(demo3)
- 2026-09-06~09:安卓 App(纯 Kotlin,无 NDK):渲染管线移植(逐字节验证)、 USB 层(官方协议 Java 源码逐行复刻)、相机式 UI、拍照/录像/媒体库/分析/PDF
- 2026-09-10:真机联调打通(根因:USB 命令字节序反转,已修复并用单测锁死); 官方 App 全量解包入库(jadx + Ghidra)
仓库说明
仓库包含官方 SDK、反编译产物、二进制样本和抓帧数据。部分内容可能受原厂许可 限制,仅用于本项目的互操作性研究和设备调试。
Languages
C
43%
Assembly
11.2%
Python
10%
Java
9.3%
C++
6.9%
Other
19.4%