mirror of
https://github.com/ratspeak/ratdeck.git
synced 2026-08-27 21:20:07 +00:00
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Package a merged ESP32-S3 image with a web-flasher manifest."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import zipfile
|
|
from pathlib import Path
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--image", required=True, type=Path)
|
|
parser.add_argument("--name", required=True)
|
|
parser.add_argument("--output", required=True, type=Path)
|
|
args = parser.parse_args()
|
|
|
|
if not args.image.is_file():
|
|
raise FileNotFoundError(args.image)
|
|
|
|
image_name = f"{args.name}.bin"
|
|
manifest = {
|
|
"chipFamily": "ESP32-S3",
|
|
"flashSize": "16MB",
|
|
"flashMode": "dio",
|
|
"flashFreq": "80m",
|
|
"parts": [
|
|
{"path": image_name, "offset": "0x0000"},
|
|
],
|
|
}
|
|
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
with zipfile.ZipFile(args.output, "w", compression=zipfile.ZIP_DEFLATED) as zf:
|
|
zf.write(args.image, image_name)
|
|
zf.writestr("manifest.json", json.dumps(manifest, indent=2) + "\n")
|
|
|
|
print(f"firmware package written to {args.output}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|