diff --git a/snekde/snekde.py b/snekde/snekde.py index 3ef63eb..b62ec4e 100755 --- a/snekde/snekde.py +++ b/snekde/snekde.py @@ -49,6 +49,10 @@ snek_debug_file = False +baud_rates = [57600, 115200] + +baud_selection = 1 + def snek_debug(message): global snek_debug_file @@ -185,7 +189,7 @@ class SnekDevice: # that gets data that are read # - def __init__(self, port, interface): + def __init__(self, port, interface, rate=115200): self.interface = interface self.device = port.device @@ -195,7 +199,6 @@ def __init__(self, port, interface): self.synchronous_put = True self.synchronous_limit = 16 - rate = 115200 for port_mod in port_mods: if port_mod in port.description or port_mod in port.hwid: if "async" in port_mods[port_mod]: @@ -345,6 +348,12 @@ def write(self, data): def command(self, data, intr="\x03"): self.write("\x0e" + intr + data) + def set_baud(self, baud): + self.serial.baudrate = baud + if self.serial.is_open: + self.serial.close() + self.serial.open() + class EditWin: """Editable text object""" @@ -1112,6 +1121,7 @@ def screen_get_sizes(): ("F5", "Load"), ("F6", "Save"), ("F7", "Switch"), + ("F8", "Rate"), ) # Paint the function key help text and the separator line @@ -1128,6 +1138,7 @@ def screen_paint(): device_name = "" if snek_device: device_name = snek_device.device + device_name = "%s %d" % (device_name, baud_rates[baud_selection]) device_col = snek_cols - len(device_name) if device_col < 0: device_col = 0 @@ -1190,6 +1201,14 @@ def screen_fini(): curses.endwin() +def switch_baud(): + global snek_device, baud_selection, baud_rates + baud_selection = (baud_selection + 1) % len(baud_rates) + if snek_device: + snek_device.set_baud(baud_rates[baud_selection]) + screen_paint() + + def snekde_open_device(): global snek_device, snek_monitor dialog = GetPortWin() @@ -1197,7 +1216,7 @@ def snekde_open_device(): if not port: return try: - device = SnekDevice(port, snek_monitor) + device = SnekDevice(port, snek_monitor, rate=baud_rates[baud_selection]) device.start() if snek_device: snek_device.close() @@ -1333,6 +1352,8 @@ def run(): snek_current_window = snek_repl_win else: snek_current_window = snek_edit_win + elif ch == curses.KEY_F8 or ch == ord("8") | 0x80: + switch_baud() elif ch == ord("\n"): if snek_current_window is snek_edit_win: snek_current_window.dispatch(ch)