def __init__(self, buildDir="", motecom=None, tkRoot=None, comm=None): #first, import all types, msgs, and enums from the nesc app self.app = nescDecls.nescApp(buildDir, "Oscope") #use the user's comm and tkroot, if they passed it in if tkRoot == None: self.tkRoot = Tk.Tk() else: self.tkRoot = tkRoot if comm == None: comm = Comm() comm.connect( motecom) #defaults to MOTECOM env variable if undefined self.comm = comm self.initializeGui() #create a queue for receiving oscope messages and register it for messages oscopeMsgQueue = MessageQueue(1) self.comm.register(deepcopy(self.app.msgs.OscopeMsg), oscopeMsgQueue) #start a thread to process the messages (make daemon so it dies when tk is killed) msgThread = threading.Thread(target=self.processMessages, args=(oscopeMsgQueue, )) msgThread.setDaemon(True) msgThread.start() # start the GUI thread if we own it if tkRoot == None: self.tkRoot.mainloop() print "Oscope.py exited normally"
def __init__(self, motecom=None, tkRoot=None, comm=None): #use the user's tk root, if they passed it in if tkRoot == None: self.tkRoot = Tk.Tk() else: self.tkRoot = tkRoot #use the user's comm, if they passed it in if comm != None: self.comm = comm #if no comm passed, create one else: # connect using motecom first, then MOTECOM environment var self.comm = Comm() if motecom != None: self.comm.connect(motecom) elif "MOTECOM" in os.environ: self.comm.connect(os.environ["MOTECOM"]) else: sys.stderr.write("No serial port specified\n") #register a listener for my message self.comm.register(tinyos.oscope.OscopeMsg(), self) # start/stop state self.started = False # create the frame where all the widgets will go self.frame = Tk.Frame(self.tkRoot) self.frame.pack() # create the matplotlib figure for displaying the oscope msg payload #self.fig = Figure() #self.axes = self.fig.add_subplot(111) self.fig = figure() self.axes = subplot(111) self.axes.plot([0], [0], 'b') #we create a line that holds sensor data #so that we can update it later self.line, = self.axes.lines self.line.set_data([], []) #remember the current axis limits self.xlim = self.axes.get_xlim() self.ylim = self.axes.get_ylim() # start/stop button self.startButton = Tk.Button(self.frame, text="start", command=self.toggleStart) self.startButton.pack(side=Tk.LEFT) # reset button self.resetButton = Tk.Button(self.frame, text="reset", command=self.reset) self.resetButton.pack(side=Tk.LEFT) #container object for the figure instance self.canvas = FigureCanvasTkAgg(self.fig, master=self.tkRoot) self.canvas.show() self.canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.tkRoot) self.toolbar.update() self.canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) # start the GUI if I created it if tkRoot == None: self.tkRoot.mainloop()