For agents operating an FM-1 Transporter on the user’s behalf. Not a development guide.
The Transporter is a board wired to an M-VAVE FM-1’s USB lines. You talk to it through tools/fm1t.py (needs pyserial). Details: README.md, docs/PROTOCOL.md.
wl82loader.bin (jl-uboot-tool). Pass it as --loader PATH or FM1T_LOADER. Never commit or publish it.fm1t.py status first. Fields: uboot (FM-1 in boot mode), v15 (stock V15 running), loader (loader uploaded).fm1t.py uboot (automatic for info/dump/write).fm1t.py rekey, then ask the user to power the FM-1 off and on. You cannot do this.fm1t.py runapp, or ask the user to power-cycle the FM-1.python3 tools/fm1t.py --loader L info # expect key=980F, id=856014; stop otherwise
python3 tools/fm1t.py --loader L dump backup.bin # full 1 MiB read; keep this file
python3 tools/fm1t.py --loader L write --package P.fwsc --ref backup.bin # dry run
python3 tools/fm1t.py --loader L write --package P.fwsc --ref backup.bin --write # writes
dump before any write, and keep the dump.--write only after the user says so for that package.0x4000–0x93000 only; the firmware refuses anything else. Do not try to work around it.write needs the fm-1-research-lab checkout (FM1_RESEARCH) for package checks. If missing, say so; do not skip the checks.info does not return key=980F and id=856014, it is not an FM-1. Stop.