From d8a5fcbc1cc335e81e293f938738b3125a6f8a00 Mon Sep 17 00:00:00 2001 From: Jakob Haufe <jakob@haufe.it> Date: Fri, 6 Sep 2019 13:10:00 +0200 Subject: [PATCH] Autodetect python crc16 implementation There are several common CRC implementations for python with the currently used one (crc16) not being available in e.g. Debian. crcmod and/or crcelk are readily available on several distributions. --- bootloader/crc_patch.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/bootloader/crc_patch.py b/bootloader/crc_patch.py index 59ec6bef..4ba61e8e 100755 --- a/bootloader/crc_patch.py +++ b/bootloader/crc_patch.py @@ -1,16 +1,29 @@ #!/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) + 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) -- GitLab