From 4c47f21cac92e37309dac0d9d4f6b748f0a79925 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Thu, 25 Jan 2018 15:57:48 -0600 Subject: [PATCH] Fill header in application --- tools/build_api.py | 67 +++++++++++++++++++++++++++++++++++++++- tools/config/__init__.py | 34 +++++++++++--------- 2 files changed, 85 insertions(+), 16 deletions(-) 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": "