summary refs log tree commit diff
path: root/util/uf2conv.py
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2023-03-02 23:26:37 +0000
committerGitHub <noreply@github.com>2023-03-03 10:26:37 +1100
commitbe781927c15b5452546a9132d30c3baaf101cef5 (patch)
tree726849cae93f24d01f100bc0f7cecb329b634ba0 /util/uf2conv.py
parent0a7f15964c6f8e10f7c1125cc61d31fc485ec25c (diff)
Merge upstream changes to uf2conv (#19993)
Diffstat (limited to 'util/uf2conv.py')
-rwxr-xr-xutil/uf2conv.py44
1 files changed, 25 insertions, 19 deletions
diff --git a/util/uf2conv.py b/util/uf2conv.py
index 7f5645414a..52d3861cba 100755
--- a/util/uf2conv.py
+++ b/util/uf2conv.py
@@ -8,6 +8,7 @@ import os
 import os.path
 import argparse
 import json
+from time import sleep
 
 
 UF2_MAGIC_START0 = 0x0A324655 # "UF2\n"
@@ -276,23 +277,25 @@ def main():
     parser = argparse.ArgumentParser(description='Convert to UF2 or flash directly.')
     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,
+    parser.add_argument('-b', '--base', dest='base', type=str,
                         default="0x2000",
                         help='set base address of application for BIN format (default: 0x2000)')
-    parser.add_argument('-o' , '--output', metavar="FILE", dest='output', type=str,
+    parser.add_argument('-f', '--family', dest='family', type=str,
+                        default="0x0",
+                        help='specify familyID - number or name (default: 0x0)')
+    parser.add_argument('-o', '--output', metavar="FILE", dest='output', type=str,
                         help='write output to named file; defaults to "flash.uf2" or "flash.bin" where sensible')
-    parser.add_argument('-d' , '--device', dest="device_path",
+    parser.add_argument('-d', '--device', dest="device_path",
                         help='select a device path to flash')
-    parser.add_argument('-l' , '--list', action='store_true',
+    parser.add_argument('-l', '--list', action='store_true',
                         help='list connected devices')
-    parser.add_argument('-c' , '--convert', action='store_true',
+    parser.add_argument('-c', '--convert', action='store_true',
                         help='do not flash, just convert')
-    parser.add_argument('-D' , '--deploy', action='store_true',
+    parser.add_argument('-D', '--deploy', action='store_true',
                         help='just flash, do not convert')
-    parser.add_argument('-f' , '--family', dest='family', type=str,
-                        default="0x0",
-                        help='specify familyID - number or name (default: 0x0)')
-    parser.add_argument('-C' , '--carray', action='store_true',
+    parser.add_argument('-w', '--wait', action='store_true',
+                        help='wait for device to flash')
+    parser.add_argument('-C', '--carray', action='store_true',
                         help='convert binary file to a C array, not UF2')
     parser.add_argument('-i', '--info', action='store_true',
                         help='display header information from UF2, do not convert')
@@ -337,20 +340,23 @@ def main():
             print("Converted to %s, output size: %d, start address: 0x%x" %
                   (ext, len(outbuf), appstartaddr))
         if args.convert or ext != "uf2":
-            drives = []
             if args.output == None:
                 args.output = "flash." + ext
-        else:
-            drives = get_drives()
-
         if args.output:
             write_file(args.output, outbuf)
-        else:
+        if ext == "uf2" and not args.convert and not args.info:
+            drives = get_drives()
             if len(drives) == 0:
-                error("No drive to deploy.")
-        for d in drives:
-            print("Flashing %s (%s)" % (d, board_id(d)))
-            write_file(d + "/NEW.UF2", outbuf)
+                if args.wait:
+                    print("Waiting for drive to deploy...")
+                    while len(drives) == 0:
+                        sleep(0.1)
+                        drives = get_drives()
+                elif not args.output:
+                    error("No drive to deploy.")
+            for d in drives:
+                print("Flashing %s (%s)" % (d, board_id(d)))
+                write_file(d + "/NEW.UF2", outbuf)
 
 
 if __name__ == "__main__":