# mk_update.py # # Convert a raw firmware binary into an update file for our bootloader: # N bytes: # 2 bytes: 'GW' # 2 bytes: major, minor # 2 bytes: 0, 0 # 2 bytes: CRC16-CCITT, seed 0xFFFF, stored big endian # # Written & released by Keir Fraser # # This is free and unencumbered software released into the public domain. # See the file COPYING for more details, or visit . import crcmod.predefined import struct, sys from greaseweazle import version def main(argv): in_f = open(argv[1], "rb") out_f = open(argv[2], "wb") in_dat = in_f.read() in_len = len(in_dat) assert (in_len & 3) == 0, "input is not longword padded" crc16 = crcmod.predefined.Crc('crc-ccitt-false') out_f.write(in_dat) crc16.update(in_dat) in_dat = struct.pack("2s4B", b'GW', version.major, version.minor, 0, 0) out_f.write(in_dat) crc16.update(in_dat) in_dat = struct.pack(">H", crc16.crcValue) out_f.write(in_dat) if __name__ == "__main__": main(sys.argv)