From 68090735cd5057dea2677dc12deca0e51711a2e1 Mon Sep 17 00:00:00 2001 From: "Nicholas H.Tollervey" Date: Thu, 11 May 2017 14:21:32 +0100 Subject: [PATCH] Convert to Python3. Use PEP8 naming conventions and formatting. --- utils/uf2conv.py | 129 +++++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 60 deletions(-) diff --git a/utils/uf2conv.py b/utils/uf2conv.py index 2418d8e..bfaa996 100755 --- a/utils/uf2conv.py +++ b/utils/uf2conv.py @@ -1,5 +1,4 @@ -#!/usr/bin/python - +#!/usr/bin/env python3 import sys import struct import subprocess @@ -8,6 +7,7 @@ import os import os.path import argparse + UF2_MAGIC_START0 = 0x0A324655 # "UF2\n" UF2_MAGIC_START1 = 0x9E5D5157 # Randomly selected UF2_MAGIC_END = 0x0AB16F30 # Ditto @@ -26,27 +26,28 @@ INFO_FILE = "/INFO_UF2.TXT" appstartaddr = 0x2000 familyid = 0x0 -def isUF2(buf): + +def is_uf2(buf): w = struct.unpack(" 0: padding -= 4 - outp += "\x00\x00\x00\x00" + outp += b"\x00\x00\x00\x00" outp += block[32 : 32 + datalen] curraddr = newaddr + datalen return outp -def convertToUF2(fileContent): + +def convert_to_uf2(file_content): global familyid - datapadding = "" + datapadding = b"" while len(datapadding) < 512 - 256 - 32 - 4: - datapadding += "\x00\x00\x00\x00" - numblocks = (len(fileContent) + 255) / 256 - outp = "" - for blockno in range(0, numblocks): + datapadding += b"\x00\x00\x00\x00" + numblocks = (len(file_content) + 255) // 256 + outp = b"" + for blockno in range(numblocks): ptr = 256 * blockno - chunk = fileContent[ptr:ptr + 256] + chunk = file_content[ptr:ptr + 256] flags = 0x0 if familyid: flags |= 0x2000 - hd = struct.pack("= 3 and words[1] == "2" and words[2] == "FAT": @@ -176,36 +179,41 @@ def getdrives(): rootpath = tmp for d in os.listdir(rootpath): drives.append(os.path.join(rootpath, d)) - - def hasInfo(d): + + + def has_info(d): try: return os.path.isfile(d + INFO_FILE) except: return False - - return filter(hasInfo, drives) -def boardID(path): + return list(filter(has_info, drives)) + + +def board_id(path): with open(path + INFO_FILE, mode='r') as file: - fileContent = file.read() - return re.search("Board-ID: ([^\r\n]*)", fileContent).group(1) - -def listdrives(): - for d in getdrives(): - print d, boardID(d) + file_content = file.read() + return re.search("Board-ID: ([^\r\n]*)", file_content).group(1) -def writeFile(name, buf): + +def list_drives(): + for d in get_drives(): + print(d, board_id(d)) + + +def write_file(name, buf): with open(name, "wb") as f: f.write(buf) - print "Wrote %d bytes to %s." % (len(buf), name) + print("Wrote %d bytes to %s." % (len(buf), name)) + def main(): global appstartaddr, familyid def error(msg): - print msg + print(msg) sys.exit(1) parser = argparse.ArgumentParser(description='Convert to UF2 or flash directly.') - parser.add_argument('input', metavar='INPUT', type=str, nargs='?', + parser.add_argument('input', metavar='INPUT', type=str, nargs='?', help='input file (HEX, BIN or UF2)') parser.add_argument('-b' , '--base', dest='base', type=str, default="0x2000", @@ -233,38 +241,39 @@ def main(): error("Family ID needs to be a number or one of: " + ", ".join(families.keys())) if args.list: - listdrives() + list_drives() else: if not args.input: error("Need input file") - with open(args.input, mode='rb') as file: - inpbuf = file.read() - fromUF2 = isUF2(inpbuf) + with open(args.input, mode='rb') as f: + inpbuf = f.read() + from_uf2 = is_uf2(inpbuf) ext = "uf2" - if fromUF2: - outbuf = convertFromUF2(inpbuf) + if from_uf2: + outbuf = convert_from_uf2(inpbuf) ext = "bin" - elif isHEX(inpbuf): - outbuf = convertFromHexToUF2(inpbuf) + elif is_hex(inpbuf): + outbuf = convert_from_hex_to_uf2(inpbuf) else: - outbuf = convertToUF2(inpbuf) - print "Converting to %s, output size: %d, start address: 0x%x" % (ext, len(outbuf), appstartaddr) - + outbuf = convert_to_uf2(inpbuf) + print("Converting to %s, output size: %d, start address: 0x%x" % + (ext, len(outbuf), appstartaddr)) if args.convert: drives = [] if args.output == None: args.output = "flash." + ext else: - drives = getdrives() - + drives = get_drives() + if args.output: - writeFile(args.output, outbuf) + write_file(args.output, outbuf) else: if len(drives) == 0: error("No drive to deploy.") for d in drives: - print "Flashing %s (%s)" % (d, boardID(d)) - writeFile(outbuf, d + "/NEW.UF2") + print("Flashing %s (%s)" % (d, board_id(d))) + write_file(outbuf, d + "/NEW.UF2") + if __name__ == "__main__": main()