ZXCLI 4a60011ed9 tools: 新增 MdtInspect —— 对比本 App 与官方照片的差异定位工具
用户反馈"这个 App 拍出来的照片和官方软件还是有区别",即将提供两张对照照片。
先把这个工具准备好,文件到手即可定位差异出在哪一层,而不是凭肉眼猜。

按三层从外到内报告:
1. 容器层:是否厂商 MDT(JPEG + DDT 块 + 尾)、有哪些块、各多大、RENDER 参数
   (翻转/旋转)——先排除结构性差异;校准文件(magic 5AA5000x)会被识别并说明
   它描述的是传感器而非场景。
2. 数据层:FRAME(原始测量帧)与 NUC 块的 min/mean/max/spread。**这一层若不同,
   差异来自采集(传感器状态/FFC/标定),不是我们的配色映射**。
3. 图像层:JPEG 亮度分位数、均值、Laplacian 锐度。两个文件尺寸一致时还给出
   逐项对比(亮度差、对比宽度差、锐度比)。

实测校验:对仓库内两张真机照片输出正常(960x720 rot=0 与 720x960 rot=90,
各块与极值/测点都能读出);对两个标定文件正确识别为"非照片"并跳过对比。
.class 加入 .gitignore(原来是 manual_images 专用的)。
2026-10-05 23:01:31 +08:00

MAG160C 热像仪统一工程

MAG160C 热像仪(160×120,15fps,USB VID 0x833C)的逆向工程与双端实现: C 参考实现(Linux/Windows,源自官方 PC SDK 逆向)与安卓统一 App (Kotlin + Compose,适配 Android 16,整合官方 4 个 App 的功能)。

从这里开始(新接手者阅读顺序)

  1. docs/android_app/HANDOFF_DEVELOPMENT.md — 安卓 App 总交接(必读)
  2. docs/android_app/session_state.md — 会话心跳与待办(最新进度)
  3. docs/android_app/app_manual.md — App 操作手册(界面/设置/方向/排障)
  4. analysis/README.md — 逆向工程总目录索引(Linux/Windows/Android 三条线)
  5. analysis/magcx_official_flow.md — 权威 USB 协议结论(官方源码逐行核对版)
  6. analysis/protocol_spec.md — 早期 PC 端协议逆向(硬件验证记录)
  7. 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 文档:app_manual.md 操作手册 / HANDOFF_DEVELOPMENT.md 交接 / session_state.md 进度心跳 / 逆向功能总表
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 0x833C PID 0x0001;端点 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)
  • 2026-09-11~12:真机多轮联调(无线 adb)。修复根因级的三个问题: launchMode 缺失导致 MIUI 重复广播 ATTACHED、建出多个 Activity 争抢相机 (重连风暴的真凶);SET_CONFIGURATION 复位设备导致相机反复重枚举; 实时画面卡顿——热像走 lockCanvas 软件画布,每帧在 CPU 上放大整屏, 实测只有 6.5 帧/秒、单帧 134ms,改用硬件画布后 15.1 帧/秒、单帧 6.4ms。 同期完成:官方 7×7 局部细节增强移植(含混叠系数修正与黄金值测试)、 测温点标注风格重做(准星+描边字,去白底)、拍照/录像方向跟随握持角度、 录像 3× 分辨率、分析页与照片标记完全对齐、设置持久化
  • 文档:docs/android_app/app_manual.md(操作手册)、 docs/android_app/session_state.md(第 18~24 轮修复记录与排查方法)

仓库说明

仓库包含官方 SDK、反编译产物、二进制样本和抓帧数据。部分内容可能受原厂许可 限制,仅用于本项目的互操作性研究和设备调试。

S
Description
No description provided
Readme
1.2 GiB
Languages
C 45.2%
Assembly 12.7%
Java 10.8%
C++ 7.9%
HTML 6.7%
Other 16.5%