From 6b632e25e7a08c19ccb6f36d1a8529e35bfee4e8 Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Sun, 13 Sep 2020 12:36:40 +0200 Subject: [PATCH] build: Generate gps-watch-bootloader-intermediate.frm. This file can be installed on a GPS watch running the vendor firmware. --- SConscript.target | 9 +++++++++ SConstruct | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/SConscript.target b/SConscript.target index 2da14a4..a927dd7 100644 --- a/SConscript.target +++ b/SConscript.target @@ -59,6 +59,8 @@ bootloader_source_files = [ 'src/bootloader/flash.rs', ] +bootloader_bins = [] + for s in ['intermediate', 'final']: bootloader_env = env.Clone() @@ -82,6 +84,13 @@ for s in ['intermediate', 'final']: Default(bootloader_bin) + bootloader_bins.append(bootloader_bin) + +bootloader_intermediate_frm = \ + bootloader_env.Frm(bootloader_bins[0]) + +Default(bootloader_intermediate_frm) + application_source_files = [ 'src/application/main.rs', # Must be listed first (see below). 'src/application/button.rs', diff --git a/SConstruct b/SConstruct index 4b5a1bc..6823b76 100644 --- a/SConstruct +++ b/SConstruct @@ -11,6 +11,7 @@ if ARGUMENTS.get('V', '0') != '1': root_env['ARCOMSTR'] = ' AR $TARGET' root_env['RANLIBCOMSTR'] = ' RANLIB $TARGET' root_env['OBJCOPYCOMSTR'] = ' OBJCOPY $TARGET' + root_env['FRMCOMSTR'] = ' FRM $TARGET' # Make colored output of e.g. gcc work. root_env['ENV']['TERM'] = os.environ.get('TERM') @@ -32,6 +33,26 @@ root_env.Append(BUILDERS = { 'Objcopy': Builder( suffix='.bin', src_suffix='.elf')}) +def xor8(buf): + import functools + + return functools.reduce(lambda x, y: (x & 0xff) ^ (y & 0xff), buf) + +def build_frm(target, source, env): + with open(str(source[0]), 'rb') as f_in: + buf = f_in.read() + + with open(str(target[0]), 'wb') as f_out: + f_out.write(buf) + f_out.write(bytearray([xor8(buf)])) + + return 0 + +root_env.Append(BUILDERS = { 'Frm': Builder( + action=Action(build_frm, '$FRMCOMSTR'), + suffix='.frm', + src_suffix='.bin')}) + env = root_env.Clone() env['variant_dir'] = 'build-target' env['LIBPATH'] = env['variant_dir'] -- 2.30.2