mbedHelper is a small tool that simplifies downloading of compiled files from mbed.
mbed_helper.py@0:01bb68972e7b, 2014-09-03 (annotated)
- Committer:
- screamer
- Date:
- Wed Sep 03 13:38:20 2014 +0000
- Revision:
- 0:01bb68972e7b
initial revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:01bb68972e7b | 1 | import serial.tools.list_ports as lp |
screamer | 0:01bb68972e7b | 2 | import win32api |
screamer | 0:01bb68972e7b | 3 | import sys |
screamer | 0:01bb68972e7b | 4 | import pprint |
screamer | 0:01bb68972e7b | 5 | import subprocess |
screamer | 0:01bb68972e7b | 6 | from os import remove, path |
screamer | 0:01bb68972e7b | 7 | from shutil import copy |
screamer | 0:01bb68972e7b | 8 | from serial import Serial |
screamer | 0:01bb68972e7b | 9 | from time import sleep |
screamer | 0:01bb68972e7b | 10 | |
screamer | 0:01bb68972e7b | 11 | |
screamer | 0:01bb68972e7b | 12 | putty_path = "C:/Program Files/putty/putty.exe" |
screamer | 0:01bb68972e7b | 13 | putty_start = True |
screamer | 0:01bb68972e7b | 14 | |
screamer | 0:01bb68972e7b | 15 | baud = 9600 |
screamer | 0:01bb68972e7b | 16 | reset_timeout = 5 |
screamer | 0:01bb68972e7b | 17 | tries = 50 |
screamer | 0:01bb68972e7b | 18 | |
screamer | 0:01bb68972e7b | 19 | def reset_port(comport): |
screamer | 0:01bb68972e7b | 20 | print('Sending break on %s' % comport) |
screamer | 0:01bb68972e7b | 21 | i=0 |
screamer | 0:01bb68972e7b | 22 | while 1: |
screamer | 0:01bb68972e7b | 23 | i+=1 |
screamer | 0:01bb68972e7b | 24 | try: |
screamer | 0:01bb68972e7b | 25 | portconn = Serial(comport, timeout=1) |
screamer | 0:01bb68972e7b | 26 | result = True |
screamer | 0:01bb68972e7b | 27 | except Exception as e: |
screamer | 0:01bb68972e7b | 28 | result = False |
screamer | 0:01bb68972e7b | 29 | if result or i>tries: |
screamer | 0:01bb68972e7b | 30 | break |
screamer | 0:01bb68972e7b | 31 | else: |
screamer | 0:01bb68972e7b | 32 | sleep(float(reset_timeout) / float(tries)) |
screamer | 0:01bb68972e7b | 33 | |
screamer | 0:01bb68972e7b | 34 | if result: |
screamer | 0:01bb68972e7b | 35 | portconn.setBaudrate(baud) |
screamer | 0:01bb68972e7b | 36 | try: |
screamer | 0:01bb68972e7b | 37 | portconn.sendBreak() |
screamer | 0:01bb68972e7b | 38 | except: |
screamer | 0:01bb68972e7b | 39 | try: |
screamer | 0:01bb68972e7b | 40 | portconn.setBreak(False) |
screamer | 0:01bb68972e7b | 41 | except: |
screamer | 0:01bb68972e7b | 42 | result = False |
screamer | 0:01bb68972e7b | 43 | |
screamer | 0:01bb68972e7b | 44 | portconn.close() |
screamer | 0:01bb68972e7b | 45 | else: |
screamer | 0:01bb68972e7b | 46 | print('Failed to reset') |
screamer | 0:01bb68972e7b | 47 | |
screamer | 0:01bb68972e7b | 48 | def copy_and_open(file, drives, coms, st_board = False): |
screamer | 0:01bb68972e7b | 49 | if not file: |
screamer | 0:01bb68972e7b | 50 | return |
screamer | 0:01bb68972e7b | 51 | |
screamer | 0:01bb68972e7b | 52 | for drive in drives: |
screamer | 0:01bb68972e7b | 53 | _, ext = path.splitext(file) |
screamer | 0:01bb68972e7b | 54 | ext = ext.lower() |
screamer | 0:01bb68972e7b | 55 | dfile = drive + "/firmware" + ext |
screamer | 0:01bb68972e7b | 56 | |
screamer | 0:01bb68972e7b | 57 | if path.isfile(dfile): |
screamer | 0:01bb68972e7b | 58 | print('Remove old binary %s' % dfile) |
screamer | 0:01bb68972e7b | 59 | remove(dfile) |
screamer | 0:01bb68972e7b | 60 | |
screamer | 0:01bb68972e7b | 61 | print('Copy binary to %s' % drive) |
screamer | 0:01bb68972e7b | 62 | if st_board: |
screamer | 0:01bb68972e7b | 63 | subprocess.call(["C:/Program Files/git/bin/cp.exe", file, dfile]) |
screamer | 0:01bb68972e7b | 64 | else: |
screamer | 0:01bb68972e7b | 65 | copy(file, dfile) |
screamer | 0:01bb68972e7b | 66 | comport = coms[drives.index(drive)] |
screamer | 0:01bb68972e7b | 67 | #reset_port(comport) |
screamer | 0:01bb68972e7b | 68 | |
screamer | 0:01bb68972e7b | 69 | sleep(1) |
screamer | 0:01bb68972e7b | 70 | |
screamer | 0:01bb68972e7b | 71 | if putty_start and putty_path: |
screamer | 0:01bb68972e7b | 72 | for comport in coms: |
screamer | 0:01bb68972e7b | 73 | reset_port(comport) |
screamer | 0:01bb68972e7b | 74 | print('Open putty on %s' % comport) |
screamer | 0:01bb68972e7b | 75 | subprocess.Popen([putty_path, "-serial", comport, "-sercfg", str(baud)]) |
screamer | 0:01bb68972e7b | 76 | |
screamer | 0:01bb68972e7b | 77 | file = sys.argv[1] |
screamer | 0:01bb68972e7b | 78 | |
screamer | 0:01bb68972e7b | 79 | mbed_com_ports = [] |
screamer | 0:01bb68972e7b | 80 | for p in lp.comports(): |
screamer | 0:01bb68972e7b | 81 | name, data, more = p |
screamer | 0:01bb68972e7b | 82 | if data.lower().find("mbed serial port") != -1: |
screamer | 0:01bb68972e7b | 83 | mbed_com_ports.append(name) |
screamer | 0:01bb68972e7b | 84 | |
screamer | 0:01bb68972e7b | 85 | mbed_drives = [] |
screamer | 0:01bb68972e7b | 86 | for d in xrange(ord('A'), ord('U')): |
screamer | 0:01bb68972e7b | 87 | try: |
screamer | 0:01bb68972e7b | 88 | info = win32api.GetVolumeInformation(chr(d) + ":\\") |
screamer | 0:01bb68972e7b | 89 | except: |
screamer | 0:01bb68972e7b | 90 | continue |
screamer | 0:01bb68972e7b | 91 | if info[0].lower().find("mbed") != -1: |
screamer | 0:01bb68972e7b | 92 | mbed_drives.append(chr(d) + ":") |
screamer | 0:01bb68972e7b | 93 | |
screamer | 0:01bb68972e7b | 94 | # ST... |
screamer | 0:01bb68972e7b | 95 | mbed_com_ports_st = [] |
screamer | 0:01bb68972e7b | 96 | for p in lp.comports(): |
screamer | 0:01bb68972e7b | 97 | name, data, more = p |
screamer | 0:01bb68972e7b | 98 | if data.lower().find("stlink") != -1: |
screamer | 0:01bb68972e7b | 99 | mbed_com_ports_st.append(name) |
screamer | 0:01bb68972e7b | 100 | |
screamer | 0:01bb68972e7b | 101 | mbed_drives_st = [] |
screamer | 0:01bb68972e7b | 102 | for d in xrange(ord('A'), ord('U')): |
screamer | 0:01bb68972e7b | 103 | try: |
screamer | 0:01bb68972e7b | 104 | info = win32api.GetVolumeInformation(chr(d) + ":\\") |
screamer | 0:01bb68972e7b | 105 | except: |
screamer | 0:01bb68972e7b | 106 | continue |
screamer | 0:01bb68972e7b | 107 | if info[0].lower().find("nucleo") != -1: |
screamer | 0:01bb68972e7b | 108 | mbed_drives_st.append(chr(d) + ":") |
screamer | 0:01bb68972e7b | 109 | |
screamer | 0:01bb68972e7b | 110 | # FRDM... |
screamer | 0:01bb68972e7b | 111 | mbed_com_ports_frdm = [] |
screamer | 0:01bb68972e7b | 112 | for p in lp.comports(): |
screamer | 0:01bb68972e7b | 113 | name, data, more = p |
screamer | 0:01bb68972e7b | 114 | if data.lower().find("opensda") != -1: |
screamer | 0:01bb68972e7b | 115 | mbed_com_ports_frdm.append(name) |
screamer | 0:01bb68972e7b | 116 | |
screamer | 0:01bb68972e7b | 117 | mbed_drives_frdm = [] |
screamer | 0:01bb68972e7b | 118 | for d in xrange(ord('A'), ord('U')): |
screamer | 0:01bb68972e7b | 119 | try: |
screamer | 0:01bb68972e7b | 120 | info = win32api.GetVolumeInformation(chr(d) + ":\\") |
screamer | 0:01bb68972e7b | 121 | except: |
screamer | 0:01bb68972e7b | 122 | continue |
screamer | 0:01bb68972e7b | 123 | if info[0].lower().find("frdm") != -1: |
screamer | 0:01bb68972e7b | 124 | mbed_drives_frdm.append(chr(d) + ":") |
screamer | 0:01bb68972e7b | 125 | |
screamer | 0:01bb68972e7b | 126 | |
screamer | 0:01bb68972e7b | 127 | if mbed_drives: |
screamer | 0:01bb68972e7b | 128 | print "Detected Drives:", ", ".join(mbed_drives) |
screamer | 0:01bb68972e7b | 129 | if mbed_com_ports: |
screamer | 0:01bb68972e7b | 130 | print "Detected Ports:", ", ".join(mbed_com_ports) |
screamer | 0:01bb68972e7b | 131 | copy_and_open(file, mbed_drives, mbed_com_ports) |
screamer | 0:01bb68972e7b | 132 | |
screamer | 0:01bb68972e7b | 133 | if mbed_drives_st: |
screamer | 0:01bb68972e7b | 134 | print "Detected ST Drives:", ", ".join(mbed_drives_st) |
screamer | 0:01bb68972e7b | 135 | if mbed_com_ports_st: |
screamer | 0:01bb68972e7b | 136 | print "Detected ST Ports:", ", ".join(mbed_com_ports_st) |
screamer | 0:01bb68972e7b | 137 | copy_and_open(file, mbed_drives_st, mbed_com_ports_st, 1) |
screamer | 0:01bb68972e7b | 138 | |
screamer | 0:01bb68972e7b | 139 | if mbed_drives_frdm: |
screamer | 0:01bb68972e7b | 140 | print "Detected FRDM Drives:", ", ".join(mbed_drives_frdm) |
screamer | 0:01bb68972e7b | 141 | if mbed_com_ports_frdm: |
screamer | 0:01bb68972e7b | 142 | print "Detected FRDM Ports:", ", ".join(mbed_com_ports_frdm) |
screamer | 0:01bb68972e7b | 143 | copy_and_open(file, mbed_drives_frdm, mbed_com_ports_frdm, 1) |
screamer | 0:01bb68972e7b | 144 |