#!/usr/bin/env python3 import manager import serialmanager import plotter if __name__ == '__main__': dt1 = manager.DataType('test1', int) dt2 = manager.DataType('test2', float, units="foo") dt3 = manager.DataType('test3', str, False) dt4 = manager.DataType('test4', float) dt5 = manager.DataType('test5', str, False) dt6 = manager.DataType('test6', float) dt7 = manager.DataType('test7', float) dt8 = manager.DataType('test8', float) d = manager.Dispatcher(dt1, dt2, dt3, dt4, dt5, dt6, dt7, dt8) m = manager.DataManager(d) plot1 = plotter.DynamicUpdatePlot(m, dt6) plot2 = plotter.DynamicUpdatePlot(m, dt8) serial_in = serialmanager.SerialManager(d, serialmanager.serial_ports()[0]) m.start() while True: serial_in.handleInput() m.update_all_listeners()
def __init__(self, dispatcher, manager, plots, master=None, **flags): self.dispatcher = dispatcher self.manager = manager self.plots = plots self.master = master # Default values new_flags = {'send_with_newline_default': False, 'show_current_values': True, 'show_send_value': True, 'full_screen': False, 'backup_log': ".temp_log.json", 'serial_console_height': 15, 'default_baud': 9600} new_flags.update(flags) self.flags = new_flags # Command-line flags parser = argparse.ArgumentParser() parser.add_argument('filename', nargs='?', help="default file to open, if provided") parser.add_argument('-F','--full-screen', action='store_true', default=self.flags['full_screen'], help="open the gui in full screen mode if requested") parser.add_argument('-p','--port', help="default port to open") args = parser.parse_args() self.flags['full_screen'] = args.full_screen # Init gui Frame.__init__(self, master) self.pack() #master.iconbitmap('telemetry.png') master.attributes("-fullscreen", self.flags['full_screen']) master.bind('<Escape>', self.unmaximize) master.wm_title("Telemetry monitor") self.createWidgets() self.manager.add_listener("sys time", self.saveBackup) # Start reading from Serial self.serialManager = None self.checkSerial() self.baud.set(str(self.flags['default_baud'])) self.serialPort.trace('w', self.changeSerial) self.baud.trace('w', self.changeSerial) ports = serialmanager.serial_ports() if args.port: if args.port in ports: self.serialPort.set(args.port) else: parser.error("Invalid serial port " + args.port) elif ports: self.serialPort.set(ports[0]) self.startListeners() # Open a file if requested from command line if args.filename: extension = args.filename.split(".")[-1].lower() if extension not in ["json", "log", "csv"]: parser.error("Invalid file extension \"." + extension + "\"\n" + "Legal formats are json, log, csv") else: self.reset() try: if self.manager.load(extension, open(args.filename).read(), self, self.colorStreams['red']): self.controlButton.config(text="Reset", bg="grey", command=self.reset) else: parser.error("Invalid data file") except FileNotFoundError: parser.error("File " + args.filename + " not found")
def checkSerial(self): self.serialSelect['menu'].delete(0, 'end') for port in serialmanager.serial_ports(): self.serialSelect['menu'].add_command(label=port, command=lambda p=port: self.serialPort.set(p))