4.0 KiB
4.0 KiB
MAG160C Linux SDK Reverse Engineering Plan
Goal
Create an original, Linux-usable source implementation for the USB thermal camera in this workspace, using the bundled Windows/Android apps and SDK as interoperability references.
Constraints
- Prefer clean-room-style interoperability notes: derive public behavior, protocol, data formats, and API shapes; do not copy proprietary binary code.
- Do not install tools unless they are needed. If tools are installed, record what was installed and where.
- Current workspace is not a git repository, so progress is tracked in these markdown files instead of commits.
- Ask for approval before writing implementation code because the brainstorming skill requires an approved design first.
Phases
- [complete] Set up persistent planning files.
- [complete] Inventory SDK documents, headers, examples, APK/AAR/native libraries, and USB identifiers.
- [complete] Extract public API and data-flow evidence from Windows C# and Android Java/JNI/libuvc code.
- [complete] Inspect binaries only as needed for symbols/strings/imports, using installed or portable open-source tools where available.
- [complete] Present Linux implementation design with 2-3 approaches and get user approval.
- [pending] Implement Linux source after approval, preferably as a small libusb/libuvc-based C/C++ project plus CLI sample.
- [pending] Verify build/tests as far as possible without physical hardware, and document hardware test steps.
Open Questions
- Whether the physical camera is currently attached to this Windows machine/WSL environment for live USB descriptor capture.
- Whether the desired Linux API should be C, C++, Python bindings, or a CLI-first tool. Answered: C++ core library with stable C ABI, CLI sample, and Python-callable wrapper/tooling.
Errors Encountered
| Error | Attempt | Resolution |
|---|---|---|
| Not a git repository | Ran git status | Track with markdown files instead of commits. |
| Old using-superpowers path missing | Tried .system path | Read correct skill path under C:/Users/ZXC/.codex/skills/using-superpowers. |
| Get-PnpDevice access denied | Tried to enumerate attached USB devices from PowerShell | Need elevated device enumeration or user-provided lsusb/USB descriptor if live hardware testing is required. |
| ARM64 disassembly unsupported by MinGW objdump | Tried objdump on Android libcoresdk.so | Need LLVM objdump/capstone/ghidra/r2 or USB trace to recover low-level vendor protocol. |
| pip install capstone/pyelftools failed | Tried sandbox and escalated pip install into .tools/python-revlibs | Network/proxy unavailable; no new reverse-engineering package installed. |
| planning catchup script missing | Tried planning-with-files .claude catchup path from Codex session |
Logged error; continued because task planning files were read directly. |
| PowerShell heredoc/Python quoting failed | Tried Bash heredoc and then malformed python -c for PDF extraction |
Switched to PowerShell here-string piped into python -; PDF extraction succeeded. |
Handoff Summary
- Reverse-engineering evidence is complete enough for a Linux-first source implementation skeleton.
- User chose approach 1: C++ core library + stable C ABI + CLI sample + Python-callable wrapper.
- Implemented so far:
- public C ABI scaffolding
- TCM frame encode/decode
- TCM command builders
- USB device model and endpoint discovery
- IR API skeleton with explicit protocol-unknown errors and Linux endpoint/marker evidence in diagnostics
- CLI diagnostics and dry-run commands
- Verification status:
- CMake is not available in PATH in this environment.
- Direct MinGW g++ compile/run checks were used instead and passed for the completed tasks.
- Current stop point:
- Task 6 was implemented and locally verified in no-libusb mode after the user resumed work.
- Next implementation task is Task 7: Python ctypes wrapper.
- If a new chat resumes work, start from the existing implementation plan and continue with the remaining Linux runtime pieces, keeping the same file-based notes.