diff --git a/tools/build_api.py b/tools/build_api.py index c769dea202..9531967992 100644 --- a/tools/build_api.py +++ b/tools/build_api.py @@ -20,6 +20,9 @@ import re import tempfile import datetime import uuid +import struct +import zlib +import hashlib from shutil import rmtree from os.path import join, exists, dirname, basename, abspath, normpath, splitext from os.path import relpath @@ -339,8 +342,65 @@ def prepare_toolchain(src_paths, build_dir, target, toolchain_name, return toolchain +def _printihex(ihex): + import pprint + pprint.PrettyPrinter().pprint(ihex.todict()) + +def _real_region_size(region): + try: + part = intelhex_offset(region.filename, offset=region.start) + return (part.maxaddr() - part.minaddr()) + 1 + except AttributeError: + return region.size + +def _fill_header(region_list, current_region): + """Fill an application header region + + This is done it three steps: + * Fill the whole region with zeros + * Fill const, timestamp and size entries with their data + * Fill the digests using this header as the header region + """ + region_dict = {r.name: r for r in region_list} + header = IntelHex() + header.puts(current_region.start, b'\x00' * current_region.size) + start = current_region.start + for member in current_region.filename: + _, type, subtype, data = member + member_size = Config.header_member_size(member) + if type == "const": + fmt = {"8": "