예제 #1
0
파일: Oscope.py 프로젝트: sopier/WSNTools
    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"
예제 #2
0
    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()