#!/usr/bin/env python3 """Unpack Lofi-12 XT .bin -> directory with headers.json + sect payloads.""" import argparse, json, os, struct, sys sys.path.insert(0, os.path.dirname(__file__)) from lofi_image import parse_image, headers_to_json def main(): ap = argparse.ArgumentParser() ap.add_argument('image') ap.add_argument('outdir') a = ap.parse_args() d = open(a.image, 'rb').read() info = parse_image(d) os.makedirs(a.outdir, exist_ok=True) open(os.path.join(a.outdir, 'headers.json'), 'w').write( json.dumps(headers_to_json(info), indent=2)) for s in info['sects']: fn = f"sect{s['index']}_addr{s['addr']:08X}.bin" open(os.path.join(a.outdir, fn), 'wb').write(s['payload']) m = info['mmtd'] print(f"fw {tuple(m['fw'])} entry={m['entry']:08X} nsect={m['nsect']} " f"cksum={info['cmtd']['checksum']:08X} size={len(d)}") for s in info['sects']: print(f" sect{s['index']} off={s['off']:06X} addr={s['addr']:08X} " f"len={s['len']} end={s['end']:08X}") print(f"wrote {a.outdir}/") if __name__ == '__main__': main()