diff --git a/bootloader/crc_patch.py b/bootloader/crc_patch.py index 59ec6befb14a5dc625139e8042363ce2ac86f3ed..7d93353d507531c097a3e69d2186c15c1b8ebded 100755 --- a/bootloader/crc_patch.py +++ b/bootloader/crc_patch.py @@ -1,19 +1,37 @@ #!/usr/bin/env python3 import sys -import crc16 + +try: + import crc16 + + crcfun = crc16.crc16xmodem +except ImportError: + try: + import crcmod + + crcfun = crcmod.predefined.mkCrcFun("xmodem") + except ImportError: + try: + import crcelk + + crcfun = crcelk.CRC_XMODEM.calc_bytes + except ImportError: + raise Exception( + "Could not find a CRC implementation. Tried: crc16, crcmod, crcelk." + ) def main(): - data = open(sys.argv[1], 'rb').read() - crc = crc16.crc16xmodem(data) + data = open(sys.argv[1], "rb").read() + crc = crcfun(data) # print(crc) padded = data + bytes([crc >> 8, crc & 0xFF]) - crc = crc16.crc16xmodem(padded) + crc = crcfun(padded) # print(crc) - open(sys.argv[1], 'wb').write(padded) + open(sys.argv[1], "wb").write(padded) if __name__ == "__main__":