Commit Graph
63 Commits
Author SHA1 Message Date
ZXCLI 4ebdca109a android: 实时画面卡顿根因是软件画布(6.5→15.1fps),标注统一 + 7x7 细节增强
卡顿: 热像走 SurfaceView.lockCanvas 的软件画布, 每帧在 CPU 上做 320x240 ->
~810x1080 双线性放大 + 清整屏, 实测只有 6.5 帧/秒、单帧 134ms。dumpsys gfxinfo
看不到这条路径(只统计 Compose), 故给渲染线程加自测量日志才定位到。改用
lockHardwareCanvas(API29+, 旧系统回退) 后 15.1 帧/秒、单帧 6.4ms。
同时消除每帧垃圾: 复用翻转缓冲/标记列表, 色条改预渲染位图; 温度扫描从主线程
移到 Dispatchers.Default。

标注统一: 新增 AnnotSpec(唯一几何定义) + MarkerPainter(唯一绘制例程), 实时/
分析/照片/视频共用, 极端值标签改用 max/min; 照片按传感器朝向 3x 分辨率保存。
修 placeLabel 不判重叠(min 与 max 印成一团), 现支持让位。

分析对齐: 极端值漏了 sensorToPhoto 映射(落在左上角几十像素内), annotateJpeg
忽略照片镜像(另存时标记镜像到另一侧), 两处已修。

新增 BLOCK_EXTREMES(0x5BB5B562) 存拍摄时的极值位置/温度: 分析页重扫 NUC 不可能
逐位复现 live 结果, 真机出现过两个相距几像素的 min。

分析面板被导航栏遮挡: UiInsets.navPx 改可观察状态并加 padding。

7x7 局部细节增强(官方 FilterDetailEnhancement_Simple 逐行移植), 强度换算
level shl 3 经 MAG_SetDetailEnhancement(钳 0..32)核对一致; 设置页新增
"图像增强" 0-4 级, 默认关闭(无官方参考输出), 不影响逐位基线。

真机验证(小米 22041211AC/Android12/MIUI): 15.1fps、拍照含 2 探针+2 极值、
照片与分析页标记位置/风格一致且各只有一个 min/max、分析数值与照片吻合、
增强 2 级细节明显且不掉帧。测试 96 项全绿。
2026-09-12 04:20:16 +08:00
ZXCLI 47037f3a23 android: unify temperature annotations (one spec, sharp 3x photos), sensor-orientation photos, video annotations, palette cache + render loop, Android 8 API guards 2026-09-12 03:06:27 +08:00
ZXCLI 376b8389ea android: fix launchMode (singleTask) root cause of reconnect storm; drop SET_CONFIGURATION reset; fix analysis temp units, NUC block size, viewer back keys 2026-09-12 02:30:05 +08:00
ZXCLI 4cb6e69ea4 android: fix analysis temperatures (store calibrated NUC data), marker sizing, bottom data panel; split album (zoom/delete) from analysis tab 2026-09-12 00:05:49 +08:00
ZXCLI 15a7127287 android: fix recording crash+save, gallery viewer unreachable, back key, settings persistence; photo orientation+annotations, analyzable MDT probes, trace mode 2026-09-11 23:26:27 +08:00
ZXCLI 3704ee797b android: settings screen scrollable + wire dead rows (language/about) + instant orientation apply 2026-09-11 03:59:55 +08:00
ZXCLI f7bca894ba android: revert image to locked orientation (user decision); keep official-style manual rotate/flip settings 2026-09-11 03:50:56 +08:00
ZXCLI 464cfcb5e8 android: fix real-device defects (temp double-conversion, FFC temp jump, image orientation per grip, remote raw+metadata stream) 2026-09-11 03:01:13 +08:00
ZXCLI 0919f5e186 docs+analysis: independent verification guide for phases A-F (calibrated scanners, self-tested commands) 2026-09-11 01:10:18 +08:00
ZXCLI 8e1312a137 android: phase Z wrap-up (docs, release build, camera feature optional, APK) 2026-09-11 00:57:46 +08:00
ZXCLI 512508e629 android: LAN remote preview (UDP discovery + raw-frame TCP stream, client-side rendering) 2026-09-11 00:54:13 +08:00
ZXCLI f8b3200464 android: visible-light PIP overlay (camera2, draggable, 3 sizes) 2026-09-11 00:31:00 +08:00
ZXCLI c34940e6fd android: cloud module scaffold (retrofit, opt-in, disabled by default) 2026-09-11 00:22:25 +08:00
ZXCLI b7a928e23d android: vendor palette extraction tooling (+exact tables if found) 2026-09-11 00:15:39 +08:00
ZXCLI 656d419f81 android: MDT temperature decode + analyzer probe UI 2026-09-10 23:43:19 +08:00
ZXCLI 06c1f30b13 android: lifetime query + cali consistency check + real-device checklist 2026-09-10 23:34:10 +08:00
ZXCLI 087e15cb19 docs: execution plan for remaining backlog (written for no-vision executor model) 2026-09-10 23:18:49 +08:00
ZXCLI e69a97436b chore: reorganize analysis/ by SDK lineage (linux/win/android) with README index, move legacy notes to history/, refresh root README, ignore .zcode/ 2026-09-10 03:09:13 +08:00
ZXCLI 4ba98f62cd analysis: full official-app reverse artifacts (jadx sources, ghidra libcxsdk decomp, authoritative protocol conclusions) + docs 2026-09-10 02:51:37 +08:00
ZXCLI 623d62b641 android: CRITICAL fix - commands were byte-reversed (ByteBuffer big-endian); official app sends little-endian, palindrome 66b masked it for 16 rounds 2026-09-10 02:39:19 +08:00
ZXCLI b29d7fd377 android: port official MAG-Cx UsbCommunication handshake verbatim (66b/66c/66f 800ms, cali file fetch via 670+EP0x84, BasePara parse) 2026-09-10 02:28:46 +08:00
ZXCLI 8ecd50228a android: match official libcoresdk handshake - 66f cali-info, 670+EP0x84 cali fetch w/ cache, drop legacy 66b/pre-start FFC 2026-09-10 02:01:26 +08:00
ZXCLI 1a2fc7abb8 android: clear usbfs endpoint-halt after every timed-out transfer (stream killer); drop async reader, add START re-kick 2026-09-10 01:38:25 +08:00
ZXCLI 0f2aa11196 android: USB hardening from device logs - async stream reader, CLEAR_HALT recovery, session mutex, detach handling, fast init 2026-09-10 01:21:29 +08:00
ZXCLI dbb4f24608 android: fix startup crash (MediaStore rejects text/plain in DCIM); log sink fallback DCIM->Download->app-private, logging never throws 2026-09-10 00:48:56 +08:00
ZXCLI ee317c7b25 android: fix black screen (missing FFC(0)x2+START pre-stream sequence) + field debug log to DCIM/MAG160C 2026-09-10 00:01:25 +08:00
ZXCLI fe8595f747 android: remove demo synthetic thermal image (real-device display test); rebuild toolchain+APK on this machine 2026-09-09 19:23:19 +08:00
ZXCLI ca7e29a647 chore: commit working tree (tools/SDK/csdk/analysis churn) for user to review & prune 2026-09-09 17:51:46 +08:00
ZXCLI 456285c71b docs: refresh handoff for next model - final layout conventions + next-round prompt 2026-09-09 17:42:41 +08:00
ZXCLI add3d06713 android: include safe-drawing top inset in uiTopPx (image top clipped on punch-hole phones) + smaller shutter row 2026-09-07 20:16:39 +08:00
ZXCLI 7437ce5e85 android: camera-style controls - 4-item top bar (ffc/zoom/trace/palette), shutter row (gallery/photo/record) above nav 2026-09-07 19:22:49 +08:00
ZXCLI fabea4c664 android: fix inverted device-orientation mapping (real accelerometer reads world-up; emulator uses gravity convention) 2026-09-07 19:09:57 +08:00
ZXCLI b1a3c38a69 android: rotate bar icons/text + OSD labels by physical grip angle (accelerometer), image region stays glued 2026-09-07 13:37:34 +08:00
ZXCLI d0b133a895 android: lock portrait - UI composition glued to phone frame (top/bottom bars + image area absolutely fixed) 2026-09-07 13:17:19 +08:00
ZXCLI 2c38537303 android: 顶栏/底栏位置固定+图像区域永不旋转(只转文字)+挖孔屏安全区适配+完整交接文档 2026-09-07 12:59:26 +08:00
ZXCLI 798e180683 android: 顶栏控制项+图像世界固定旋转+状态栏沉浸+inset感知渲染+乱码二次修复 2026-09-07 12:43:35 +08:00
ZXCLI 96b92a8d26 android: 心跳更新(第二轮UI反馈修复) 2026-09-07 00:30:09 +08:00
ZXCLI 8d22969f6d android: 竖屏旋转热像图填满屏宽/横屏原生方向+控制栏横屏移至右侧+大号圆圈标记与色标+fullSensor方向跟随 2026-09-07 00:29:16 +08:00
ZXCLI 17fcb7b94c android: 心跳更新(用户反馈修复完成) 2026-09-06 23:15:57 +08:00
ZXCLI f8eab28857 android: 相册页接线+演示模式(真实管线渲染合成帧+demo温度显示映射) 2026-09-06 23:15:05 +08:00
ZXCLI 430bf373e4 android: 修复源码GBK编码导致的中文乱码+重绘图标+USB插入自动授权+媒体权限+多点测温/色标条/追踪开关 2026-09-06 21:56:34 +08:00
ZXCLI 6d0805af90 android: 恢复脚本+APK产物 2026-09-06 20:41:41 +08:00
ZXCLI 4fd2e5bf79 android: 图标+预测性返回+心跳更新 阶段7预验收 2026-09-06 20:41:16 +08:00
ZXCLI a07a49b437 android: 设置页+任务巡检解析器(sqlite/xml) 阶段6a 2026-09-06 20:34:21 +08:00
ZXCLI 3bca426c99 android: PDF巡检报告生成(PdfDocument) 阶段5b 2026-09-06 20:04:06 +08:00
ZXCLI 29a9b85cbe android: 媒体库+MDT离线分析查看器(缩放/调色板/备注) 阶段4-5a 2026-09-06 19:55:22 +08:00
ZXCLI ed0a0882d8 android: 拍照MDT容器保存(MediaStore DCIM/MAG160C)+MP4录像(Surface编码) 阶段3b 2026-09-06 19:40:56 +08:00
ZXCLI 6297a06b97 android: USB层+实时画面+UI骨架(阶段3a) 2026-09-06 19:16:35 +08:00
ZXCLI 5b41a6aa9b android: 统一APP工程骨架 + 官方渲染管线Kotlin移植(与C参考逐字节一致) 2026-09-06 18:44:02 +08:00
ZXCLI dd52469377 归档分析脚本到 analysis/reverse_tools(compare_live/verify_nuc/verify_full/parse_ddt/parse_pcap),更新 session_state 引用路径 2026-08-19 15:55:21 +08:00
ZXCLI 0d83c625d1 清理仓库:删除验证期中间产物(约 225MB)
- 删除 analysis/ 下 pairs_*(采集对比数据)、reverse-cache*、captures
  (pcap)、usbnoise、ourdump、legacy-cpp 等逆向验证中间产物
- 保留:analysis/ida(.i64 逆向数据库+二进制)、disasm、history、
  reverse_tools、关键文档(reverse_20260813_full/session_state/protocol)
- 保留:IR_Camera_SDK-1.0.1(官方 SDK 参考)、app/(官方安装包)、
  vendor-docs/(官方手册)、.tools/(capstone/pyelftools)
2026-08-19 15:50:35 +08:00
ZXCLI 0dcb2830c6 修复调色板 BGR/RGB 顺序:render 输出标准 RGB24(官方 palette 为 BGR 存储)
- mag160c_render_frame 之前把 palette[gv][0]=B 直接写入 out_rgb[0],
  导致 R/B 互换,高温区域显示为蓝色
- 改为 out_rgb = {palette[2], palette[1], palette[0]} 标准 RGB24
- linux_demo 的 BMP 输出相应改为写回 BGR(BMP 原生顺序)
- 实测:最热像素 (255,255,150) 亮黄白,低温区域蓝黑,色温方向正确
2026-08-19 15:46:21 +08:00
ZXCLI 70bde0fa86 更新 session_state.md 心跳:阶段 7 完成(LiThermal 评估 + render 抽象层 + demo3 迁移) 2026-08-19 15:42:07 +08:00
ZXCLI 9db940a615 demo3 迁移到 mag160c_render 抽象库(v6);render 库加手动 FFC/NUC 访问器/钩子
- 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 正常
2026-08-19 15:41:34 +08:00
ZXCLI 5c22bfe78c 新增平台无关渲染模块 mag160c_render + Linux 参考程序 + 移植评估文档
- csdk/include/mag160c/mag160c_render.h + csdk/src/mag160c_render.c:
  官方渲染管线(快门提取/FFC 状态机/ref 采集/表重建/NUC/盲元/窗口/
  LUT(0x8c)/gray/2x/调色板)封装为无平台依赖 API,FFC 命令经回调发出
- csdk/tools/mag160c_linux_demo.c:Linux 风格参考程序(libusb + render
  API + 显示后端抽象 fbdev/DRM/LVGL),Windows 可编译验证(BMP 输出)
- 修复帧组装:第二段 bulk 读 38428B(像素+尾),尾部含快门字
  实测 shutter=31492 sel=2 stats 正常
- docs/linux_port_plan.md:芯片选型(推荐 T113-S3 QFP128 非 BGA ~20元)、
  动画库(LVGL+rlottie 参考 LiThermal)、显示方案、接口抽象设计
- csdk/README 增加 Linux 移植章节
2026-08-14 17:08:38 +08:00
ZXCLI df6c6dd444 移植官方附加环节全部路径:帧差/隔行平滑/gray覆盖/Nx升采样(编译开关+按键测试)
- OFF_IMPL_230: 帧差调整 0x175a0 逐行移植(0x278 官方 NULL 时 no-op)
- OFF_IMPL_41FE8: 隔行平滑 0x184f0(2x)/0x18660(4x) 逐行翻译(4相位加权插值)
- OFF_IMPL_30: gray 覆盖路径——0x17c40 manual 逐行翻译(8x8窗口4x4采样
  对比度增强累积→gray);0x17770 auto 双边滤波结构移植(官方空间权重表
  在 .data 被裁剪无法提取,用标准高斯核近似,文档注明)
- OFF_IMPL_UPSCALE: Nx 升采样 4x/8x(2x 已验证模式推广,线性插值+边缘外推)
- 运行时按键切换:0=41fe8 模式、8=0x230、9=0x30 模式
- 验证:默认版无回归;全开版运行正常,41fe8=1 平滑生效(nuc std 250→95)
- 文档:csdk/README 开关说明、csdk/README 验证状态更新
2026-08-14 16:52:52 +08:00
ZXCLI 51c8ba9174 完整审计:0x18000ca30 调用链实现对照表 + 全链路复验
- 审计 0xca30 全链:核心渲染(统计/窗口/LUT/gray/2x/FFC/ref/表重建)全部等价实现
- 补帧首标志清零(0x4203c/40/44/04)
- 对照表写入 reverse_20260813_full.md §8.1
- 复验(pairs_ctrl/pairs_final2 新数据):
  - NUC+blind 0/19200、窗口一致、gray+2x 0/76800(离线)
  - LUT 形态同构([500]=41 vs 40, [900]=242 vs 242)
  - 实机同场景 gray 直方图相关性 0.966
  - 零像素两边均为 0
- 未移植主体(官方当前全关,等价):0x230 帧差、0x41fe8 隔行平滑、
  0x30 gray 覆盖路径、多比例升采样
2026-08-14 16:41:50 +08:00
ZXCLI fe91a82762 原汁原味补全官方管线细节:0x8c CDF 中心、temporal 移植、uniform 分支、状态标志
- 抓取官方会话控制字段确认实际启用路径:0x109c0→0x11ee0→0x19740;
  temporal(0x41fe0=1)/帧差(0x230=0)/隔行平滑(0x41fe8=0)/0x30=0 全关
- 实现 0x8c=1 分支:CDF 中心=max(均值bin, 累计75%bin),lres 545→631
  (官方 633,跨帧差 2 bin);用官方 cdf 离线验证 LUT 差异降至 123/1024
  (集中在灰度过渡区,跨帧异步所致)
- 移植 temporal filter(0x18001e920,0x41fe0>1 启用,默认关=官方)
- 补 uniform 帧分支(0x109c0:fmin==fmax 时 LUT/gray 置中灰)
- 补官方标志维护(0x4203c/0x42038/0x42004)
- 实机确认:ref=15502(type1)、d=-2390、win/stats 正常
2026-08-14 16:33:13 +08:00
ZXCLI 004f28910f demo3 补官方启动强制 FFC(帧 75),FFC 频率与官方完全对齐
- 官方 0x180009ee0 状态机:mode 0/3/5/6 在帧 75 无条件 FFC(0);
  mode 1/2/4 在帧 117 强制(最多 5 次)。demo3 此前只实现周期 1800 +
  快门漂移 250 两个条件
- trace 实测:官方启动升温阶段 FFC(0) 间隔 59~394 帧(4~26s 咔哒声密集),
  热稳定后 1800 帧(120s);demo3 已一致
- 验证:idx=75 强制 FFC 触发(demo3_ffc.txt forced75)
2026-08-14 16:23:37 +08:00
ZXCLI 03ed936a5f 修复 demo3 颗粒感:显示层改用官方同款 320x240 2x 平滑输出
- 根因:demo3 之前渲染 160x120 原始灰度并最近邻放大,官方输出是
  2x 升采样后的 320x240(2-tap 平滑本身抑噪)
- 已排除:0x230(FUN_1800175a0 帧差调整)、0x41fe8 隔行平滑(=0)、
  temporal filter 0x41fe0(=1) 均未启用,f20 mode=1 直通
- 修复:render_bmp 改用 g_gray320 上色,BMP/窗口改 320x240,
  StretchBlt 加 HALFTONE,BMP 头支持 >255 尺寸
- 验证:同场景与官方 pair_000.rgb 直方图相关性 0.9796,颜色数 227=官方
2026-08-14 16:16:10 +08:00
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
ZXCLI 9739a1972c 备份逆向文件 2026-08-12 15:25:34 +08:00
ZXCLI 8409b27ba3 建立 MAG160C 逆向工程交接仓库 2026-08-11 19:08:44 +08:00