Initial Commit

This commit is contained in:
riseforever2026
2026-10-02 21:34:56 +08:00
parent 5a3867ff25
commit 79bf4cdbf2
915 changed files with 20552 additions and 2 deletions
+49
View File
@@ -0,0 +1,49 @@
"""在编好的 .face 里定位每一份负载,好让 Lua 运行时按偏移从 resource.bin 里读出来
(设备不会把 .face 里的 images/ 解包到文件系统,图片仍然躺在 resource.bin 里)。
"""
import os, sys, json
from paths import PROJ, WORK
FACE = os.path.join(WORK, 'build', 'S5Icons', 'bin', 'S5Icons.face')
PDIR = os.path.join(PROJ, 'payload')
RDIR = os.path.join(PROJ, 'payload_rollback')
OUT = os.path.join(WORK, 'face_payload_offsets.json')
face = open(FACE, 'rb').read()
print(f'face {os.path.basename(FACE)} {len(face)} bytes')
anchor = face.find(b'local lvgl = require("lvgl")')
print(f'lua source starts at 0x{anchor:x} ({anchor})')
out = {}
for tag, d in (('payload', PDIR), ('rollback', RDIR)):
recs = []
dup = 0
for name in sorted(os.listdir(d)):
if not name.endswith('.bin') or name.endswith('payload.lua'):
continue
data = open(os.path.join(d, name), 'rb').read()
if not data:
continue
hits, start = [], 0
while True:
i = face.find(data, start)
if i < 0:
break
hits.append(i)
start = i + 1
if len(hits) > 8:
break
recs.append((name, len(data), hits, data[:16].hex()))
if len(hits) != 1:
dup += 1
out[tag] = recs
print(f'\n{tag}: {len(recs)} files, {dup} with !=1 occurrence')
for name, ln, hits, sig in recs[:6]:
print(f' {name:<34} {ln:>7} hits={[hex(h) for h in hits]}')
if recs:
print(' ...')
json.dump({k: [(n, l, h, s) for n, l, h, s in v] for k, v in out.items()},
open(OUT, 'w', encoding='utf-8'), indent=1)
print('\nsaved', OUT)