mbedHelper is a small tool that simplifies downloading of compiled files from mbed.

Committer:
screamer
Date:
Wed Sep 03 13:38:20 2014 +0000
Revision:
0:01bb68972e7b
initial revision

Who changed what in which revision?

UserRevisionLine numberNew 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