mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-13 02:38:50 +01:00
60 lines
1.7 KiB
Python
Executable File
60 lines
1.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import time
|
|
import serial
|
|
import serial.tools.list_ports as lports
|
|
import argparse
|
|
|
|
|
|
def main(args):
|
|
|
|
# Find which serial port to use (assumes only the keyboard is connected)
|
|
if args.port == '':
|
|
port_list = lports.comports()
|
|
if len(port_list) != 1:
|
|
print('No serial ports detected, quitting...')
|
|
quit()
|
|
else:
|
|
port = port_list[0].device
|
|
else:
|
|
port = args.port
|
|
|
|
# Based on https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/tools/linux/src/upload-reset/upload-reset.c
|
|
# Send magic sequence of DTR and RTS followed by the magic word "1EAF"
|
|
with serial.Serial(port=port, baudrate=args.baudrate) as ser:
|
|
|
|
ser.rts = False
|
|
ser.dtr = False
|
|
ser.dtr = True
|
|
|
|
time.sleep(0.05)
|
|
|
|
ser.dtr = False
|
|
ser.rts = True
|
|
ser.dtr = True
|
|
|
|
time.sleep(0.05)
|
|
|
|
ser.dtr = False
|
|
|
|
time.sleep(0.05)
|
|
|
|
ser.write(b'1EAF')
|
|
|
|
# Wait for the DFU mode reboot
|
|
time.sleep(args.sleep * 1e-3)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser()
|
|
parser = argparse.ArgumentParser(description="Enter DFU mode of DevTerm's keyboard.")
|
|
parser.add_argument('-p', '--port', dest='port', type=str, default='',
|
|
help='Serial port (default: detect serial ports).')
|
|
parser.add_argument('-b', '--baudrate', dest='baudrate', type=int, default=9600,
|
|
help='Baudrate (default: 9600bps).')
|
|
parser.add_argument('-s', '--sleep', dest='sleep', type=int, default=1500,
|
|
help='Wait SLEEP milliseconds (ms) after enabling DFU mode (default: 1500ms).')
|
|
args = parser.parse_args()
|
|
|
|
main(args)
|