diff options
Diffstat (limited to 'support/scripts/reset.py')
-rwxr-xr-x | support/scripts/reset.py | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/support/scripts/reset.py b/support/scripts/reset.py index cc944ee..9be5607 100755 --- a/support/scripts/reset.py +++ b/support/scripts/reset.py @@ -1,13 +1,69 @@ #!/usr/bin/python -# NOTE: On Mac OSX this script must be run as sudo? - import serial import os +import sys from struct import pack +def get_maple_device_path(file_prefix): + """Try to find the device file for the Maple on OS X; assuming + that it looks like /dev/<file_prefix>*. If there are multiple + possibilities, ask the user what to do. If the user chooses not + to say, returns None.""" + possible_paths = [os.path.join('/dev', x) for x in os.listdir('/dev') \ + if x.startswith(file_prefix)] + if len(possible_paths) == 0: + return None + elif len(possible_paths) == 1: + return possible_paths[0] + else: + print 'Found multiple candidates for the Maple device:' + for (i,p) in enumerate(possible_paths): + print '\t%d. %s' % (i+1, p) + + prompt = 'Enter a number to select one, or q to quit: ' + while True: + resp = raw_input(prompt).strip().lower() + if resp == 'q': return None + + try: + i = int(resp, 10) + except ValueError: + pass + else: + if 0 <= i-1 < len(possible_paths): + return possible_paths[i-1] + + prompt = 'Please enter a number from the list, or q to quit: ' + +os_sysname = os.uname()[0] +if os_sysname == 'Linux': + maple_path = get_maple_device_path('ttyACM') + # fall back on /dev/maple if that doesn't work + if maple_path is None: + maple_path = '/dev/maple' + print 'Could not find Maple serial port; defaulting to /dev/maple.' +elif os_sysname == 'Darwin': + maple_path = get_maple_device_path('tty.usbmodem') +else: + # TODO [mbolivar] what to do for windows, BSD, whatever? + maple_path = '/dev/maple' + +if maple_path is None: + print 'Could not find the Maple serial port for reset.', \ + 'Perhaps this is your first upload, or the board is already', \ + 'in bootloader mode.' + print + print "If your sketch doesn't upload, try putting your Maple", \ + 'into bootloader mode manually by pressing the RESET button', \ + 'then letting it go and quickly pressing button BUT', \ + '(hold for several seconds).' + sys.exit() + +print 'Using %s as Maple serial port' % maple_path + try: - ser = serial.Serial('/dev/maple', baudrate=115200, xonxoff=1) + ser = serial.Serial(maple_path, baudrate=115200, xonxoff=1) ser.open() # try to toggle DTR/RTS (old scheme) @@ -26,5 +82,6 @@ try: ser.close() except: - print "Failed to open the serial port for reset, perhaps this is your first upload or the board was already in bootloader mode" + print 'Failed to open serial port %s for reset.' % maple_path + sys.exit() |