diff --git a/README.md b/README.md index 7926da4..8b29e4b 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,11 @@ MAG160C 热像仪(160×120,15fps,USB VID `0x833C`)的逆向工程与双 1. `docs/android_app/HANDOFF_DEVELOPMENT.md` — 安卓 App 总交接(必读) 2. `docs/android_app/session_state.md` — 会话心跳与待办(最新进度) -3. `analysis/README.md` — 逆向工程总目录索引(Linux/Windows/Android 三条线) -4. `analysis/magcx_official_flow.md` — **权威 USB 协议结论**(官方源码逐行核对版) -5. `analysis/protocol_spec.md` — 早期 PC 端协议逆向(硬件验证记录) -6. `csdk/README.md` — C SDK 文档(构建/API/工具/测试) +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/工具/测试) ## 仓库结构 @@ -23,7 +24,7 @@ MAG160C 热像仪(160×120,15fps,USB VID `0x833C`)的逆向工程与双 | `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 / 逆向功能总表)| +| `docs/android_app/` | 安卓 App 文档:`app_manual.md` 操作手册 / `HANDOFF_DEVELOPMENT.md` 交接 / `session_state.md` 进度心跳 / 逆向功能总表 | | `vendor-docs/` | 厂商资料 | | `tools/` | 会话恢复脚本 | @@ -60,6 +61,16 @@ Start-Process "build-artifacts\mag160c_demo3.exe" -WorkingDirectory "build-artif 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 轮修复记录与排查方法) ## 仓库说明 diff --git a/docs/android_app/app_manual.md b/docs/android_app/app_manual.md new file mode 100644 index 0000000..b93e2f6 --- /dev/null +++ b/docs/android_app/app_manual.md @@ -0,0 +1,223 @@ +# MAG160C 安卓 App 操作手册 + +适用版本:MAG160C 统一热像版 1.0.0(`com.mag160c.thermal`) +硬件:MAG160C 热像仪机芯(160×120 @15fps),USB VID `0x833C` PID `0x0001` + +--- + +## 1. 安装与首次连接 + +1. 安装 APK(`build-artifacts/mag160c-app-debug.apk`): + ``` + adb install -r -d mag160c-app-debug.apk + ``` + 也可以直接把 APK 拷进手机点击安装(需允许"安装未知应用")。 +2. 把热像仪插到手机的 USB 口。系统会弹出 **"允许 App 访问该 USB 设备"** → + 勾选"始终允许"并确定。**这个授权在手机重启后会失效,需要重新确认一次**。 +3. App 会自动连接并出图,通常 1~2 秒。画面出现即表示握手完成(内部流程: + 查设备 → 请求权限 → 握手 → 读标定文件 → 开始出流)。 + +> 如果顶栏下面显示"未检测到热像仪",见第 11 节。 + +--- + +## 2. 界面总览 + +``` +┌─────────────────────────────────────────┐ +│ FFC 1× 追高·低 铁虹 画中画 │ ← 控制顶栏 +├─────────────────────────────────────────┤ +│ │ +│ 热成像画面(锁屏构图) │ +│ │ +├─────────────────────────────────────────┤ +│ 相册 拍照(快门) 录像 │ ← 拍摄栏 +├─────────────────────────────────────────┤ +│ 实时 相册 分析 设置 │ ← 底部导航 +└─────────────────────────────────────────┘ +``` + +App 固定竖屏显示。转动手机时**界面和画面构图都不跟着转**(见第 8 节)。 + +--- + +## 3. 实时界面 + +| 控件 | 作用 | +|---|---| +| **FFC** | 手动做一次快门校正。画面会短暂冻结一下,属正常;校正后温度读数会刷新 | +| **1×** | 数码变倍,点一次在 1× → 2× → 3× → 4× 之间循环(从画面中心裁剪放大) | +| **追高·低** | 全画面最高温/最低温标记的开关与目标(最高、最低、两者、关闭) | +| **铁虹** | 切换调色板(12 种,点开选择) | +| **画中画** | 可见光画面叠加(首次使用需授予摄像头权限),三档尺寸,可拖动摆放 | +| **相册 / 拍照 / 录像** | 见下 | + +**测温点**:直接在画面上**点一下**就加一个测点;**点已有的测点**则删除它。 +测点会显示序号 + 温度,并随画面一起保存进照片。 + +**拍照**:立刻把当前画面存成照片(含温度数据、测点、最高/最低温标记)。 + +**录像**:点一次开始,再点一次停止并保存。录制中按钮显示"停止"。 + +--- + +## 4. 画面上的标记怎么读 + +从本轮起标记改成仪表风格,含义如下: + +``` + ┌─┐ + ───┤ ├─── ← 方形准星 + 四根短臂:指住被测量的那一个像素, + └─┘ 中心镂空,不遮挡被测区域 + │ + Pt1 25.0℃ ← 描边白字:冷端(黑)和热端(白)上都读得清 + 没有白色底板,不会挡住画面 +``` + +- **`MAX` / `MIN`**:全画面的最高温与最低温,显示哪一个由"追踪"设置决定 +- **`Pt1` `Pt2` …**:你手动点的测点 +- **引线**:从读数连到自己那个准星,测点多时不会看错 + +温度单位统一为 ℃,显示一位小数。 + +--- + +## 5. 相册 + +- 列出 `DCIM/MAG160C` 里的照片,按时间倒序(最新的在最前) +- **点开**:全屏查看;**双指缩放**、**拖动平移**、**双击复位** +- **删除**:右上角"删除" → 确认后从手机中移除(不可恢复) +- 返回键回到列表,不会退出 App + +--- + +## 6. 分析(离线测温) + +进入"分析"页会列出**带温度数据的照片**(早期没有温度数据的旧照片会被过滤掉)。 + +打开一张照片后: + +| 操作 | 说明 | +|---|---| +| **点击画面** | 在空白处加一个测点;点在已有测点上则删除该测点 | +| **底部面板** | 显示 最高 / 最低 / 中心 温度,以及测点列表 | +| **顶部 · 调色板名** | 切换显示用的调色板 | +| **顶部 · 备注** | 给这张照片写一段文字备注(写入文件本身) | +| **顶部 · 保存** | 把当前测点烧录进图像,**另存为一张新照片**(温度数据一并保留) | + +分析页显示的标记与照片里已经烧录的标记位置完全一致,不会出现"两个测点"。 + +**注意**:分析读的是照片里存的原始温度数据,所以同一张照片任何时候打开, +读数都一样(不会因为环境变化而漂移)。 + +--- + +## 7. 设置 + +| 设置项 | 说明 | 是否影响画面 | +|---|---|---| +| **默认调色板** | 启动时使用的调色板 | ✔ | +| **默认发射率** | 目标发射率(0.01~1.00) | ✖ 目前仅保存,尚未参与温度修正 | +| **报警温度** | 报警阈值 | ✖ 目前仅保存,尚未接入报警 | +| **追踪** | 最高温 / 最低温 / 最高+最低 / 关闭 | ✔ | +| **语言** | 中文 / 跟随系统 | ✖ 目前仅保存(界面为中文) | +| **旋转USB画面** | 0° / 90° / 180° / 270°,画面方向整体旋转 | ✔ | +| **图像增强** | 关闭 / 1~8 级,官方同款 7×7 局部细节增强 | ✔ | +| **水平翻转** | 画面左右镜像 | ✔ | +| **竖直翻转** | 画面上下镜像 | ✔ | +| **云同步** | 占位项,需账号与接口才能对接 | ✖ | +| **远程预览服务端** | 让本机作为主机,向局域网提供画面 | ✔ | +| **远程预览客户端** | 搜索局域网内的主机并连接观看 | ✔ | +| **关于** | 版本信息 | — | + +**画面方向不对怎么调**:热像仪是插在手机上的,安装姿态决定了画面朝向。 +若画面上下颠倒,用"旋转USB画面"(每次 90°);若左右镜像反了,用"水平翻转"或 +"竖直翻转"。这三项是**永久生效的设置**,实时、拍照、录像都会跟着变。 + +**图像增强怎么选**:档位越高,纳入增强的对比度门槛越高、强边缘增强幅度越大, +即"更锐但更挑"——弱对比区域(噪声所在处)会被排除,所以调高**不会**把噪声放大。 +日常建议 2~4 级;需要看清弱纹理时再上 6~8 级。默认关闭。 + +--- + +## 8. 拍照 / 录像的方向(重要) + +- **文件方向跟随你拿手机的方向**(和普通相机一样): + - 竖着拿 → 照片 720×960(竖幅),录像也是竖幅 + - 横着拿 → 照片 960×720(横幅),录像也是横幅 + - 无论怎么拿,**场景都是正的**,不需要事后旋转 +- **预览画面本身是锁定的**:横着拿手机时,屏幕里的画面看起来是侧的 + (因为屏幕构图固定在竖屏框架上),但保存下来的文件是正的。 + 这是刻意设计:热像仪固定在手机上,锁定预览才能保证转动手机时不晃方向。 +- **录像方向在按下"录像"的瞬间确定**。录制过程中转动手机不会改变文件方向 + (编码尺寸固定,所有相机都是这个行为)。 + +--- + +## 9. 文件与格式 + +| 类型 | 位置与命名 | +|---|---| +| 照片 | `DCIM/MAG160C/MAG160C_yyyyMMdd_HHmmss.jpg` | +| 分析另存 | `DCIM/MAG160C/MAG160C_yyyyMMdd_HHmmss_edit.jpg` | +| 录像 | `DCIM/MAG160C/MAG160C_V_yyyyMMdd_HHmmss.mp4` | +| 调试日志 | `Download/MAG160C/debug_*.log`(部分机型写进 `DCIM/MAG160C/`,排查问题时取这个文件) | + +照片文件是 **MDT 容器**:文件开头就是标准 JPEG(任何看图软件都能打开), +后面追加了温度数据、测点坐标、备注、渲染参数等信息。 +所以照片既能当普通图看,也能回到 App 里继续测温。 + +--- + +## 10. 远程预览(两台设备) + +把手机画面投到另一台设备上看(同一局域网): + +1. **主机**(插着热像仪的那台):设置 → **远程预览服务端** → 打开 +2. **客户端**:设置 → **远程预览客户端** → 点"重新扫描"自动发现主机 → + 点主机连接;也可以手动输入 `IP:端口` +3. 客户端是**本地渲染**:主机把原始温度数据发过去,客户端自己画图, + 所以能正确显示主机端的追踪标记和 FFC 状态 + +退出远程查看用返回键,会回到设置页。 + +--- + +## 11. 常见问题 + +**显示"未检测到热像仪"** +- 确认热像仪插紧;换一个 USB 口试试 +- 手机重启后 USB 授权会失效 → 重新插拔一次,在弹窗里点"允许" +- 仍不行:退出 App 重进(App 会自动重试,不用反复插拔) + +**画面卡住或黑屏** +- FFC 校正时画面会短暂冻结,属正常 +- 持续黑屏:退出 App 重进;确认没有别的 App 占用了热像仪 + +**温度看起来不准** +- 先做一次 FFC(环境温度变化后尤其需要) +- 分析页的读数来自照片里存的原始数据,不会随时间变化;实时页读数会随环境漂移 + +**录像停止时日志里有 "drain error"** +- 文件仍然完整可播放(尾部可能略短)。这是编码器在停止瞬间偶发的状态问题, + 已做保护不会闪退,文件也已保存 + +**手机息屏后回来** +- 息屏时渲染停止(省电)、USB 读取继续,已保存的文件不受影响 + +**电脑上想取文件** +``` +adb pull /sdcard/DCIM/MAG160C/ +adb pull /sdcard/Download/MAG160C/ # 调试日志(部分机型在 DCIM/MAG160C) +``` + +--- + +## 12. 已知限制 + +- **云同步**为占位项,需要账号与接口文档才能对接 +- **发射率 / 报警温度 / 语言**三项目前只做保存,尚未接入实际功能 +- **红热调色板**是近似实现(官方该调色板的原始数据未取到) +- **相册不列录像**:录像请用系统相册/文件管理器查看 +- **预览锁定**是设计如此,不是缺陷(见第 8 节) +- PDF 报告与任务巡检的代码已实现,但**尚未接入界面**,当前版本无法从 App 中使用 diff --git a/docs/android_app/session_state.md b/docs/android_app/session_state.md index 3ef57c9..b53a2af 100644 --- a/docs/android_app/session_state.md +++ b/docs/android_app/session_state.md @@ -530,6 +530,10 @@ 混为一谈就会在某个握持姿态下出错。固件级/相机类功能的"方向正确"必须用 **同一场景在不同姿态下的可复现拍摄**来验证,不能只靠推导。 +**本轮新增文档**:`docs/android_app/app_manual.md`(App 操作手册:界面、标注含义、 +设置逐项说明与"是否真正生效"、方向规则、文件位置与格式、远程预览、常见问题、 +已知限制),`README.md` 里程碑与阅读顺序已同步更新。 + ## 用户反馈修复 第二十三轮(2026-09-12,照片竖屏 / 标注风格重做 / 录像清晰度) 用户第五轮反馈(三点):竖屏拍照出来的照片不是竖屏;录像里的温度标点糊;