Files
lofi-12xt-firmware/tools/lofi_unpack.py
T
2026-09-30 22:48:06 +02:00

30 lines
1.1 KiB
Python
Executable File

#!/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()