"""Verify the exported legacy-board package against this SDK build.""" import hashlib import json import re from pathlib import Path import subprocess import zipfile output = Path(__file__).resolve().parent root = output.parent.parent package = output / "EG800AKCN_11LG-legacy-no-gnss.zip" objdump = root / "ql-cross-tool/win32/owtoolchain/gcc-arm-none-eabi/bin/arm-none-eabi-objdump.exe" report = {"package": package.name, "sha256": hashlib.sha256(package.read_bytes()).hexdigest()} app_symbols = subprocess.check_output( [str(objdump.with_name("arm-none-eabi-nm.exe")), str(root / "ql-application/threadx/build/app.elf")], text=True ) printf_address = int(re.search(r"^([0-9a-fA-F]+) T printf$", app_symbols, re.MULTILINE).group(1), 16) with zipfile.ZipFile(package) as archive: assert archive.testzip() is None, "ZIP CRC failure" for entry, source in { "cp.bin": "ql-kernel/threadx/build/release_kernel.bin", "customer_app.bin": "ql-application/threadx/build/app.bin", }.items(): data = archive.read(entry) assert data == (root / source).read_bytes(), f"Stale image: {entry}" report[entry] = {"bytes": len(data), "sha256": hashlib.sha256(data).hexdigest()} report["download_manifest"] = json.loads(archive.read("download.json")) for symbol, binary, required in [ ("quec_get_gnssid_task", "ql-kernel/threadx/build/kernel.axf", ""), ("app_gnss_init", "ql-application/threadx/build/app.elf", f"0x{printf_address | 1:08x}"), ("set_gnss_mode", "ql-application/threadx/build/app.elf", "bx\tlr"), ]: disassembly = subprocess.check_output( [str(objdump), "-d", f"--disassemble={symbol}", str(root / binary)], text=True ) assert f"<{symbol}>:" in disassembly, f"Missing function: {symbol}" assert required in disassembly, f"Unexpected function body: {symbol}" assert "task_create" not in disassembly, f"Task still created: {symbol}" (output / f"{symbol}.disasm.txt").write_text(disassembly, encoding="utf-8") report["verification"] = "PASS: ZIP CRC, kernel and APP byte identity, GNSS entry disassembly" report["hardware_test"] = "Not performed" (output / "verification.json").write_text(json.dumps(report, indent=2), encoding="utf-8") print(report["verification"]) print("SHA256:", report["sha256"])