Exemplo n.º 1
0
class SerialControllerReader(ControllerReader):
    def __init__(self, portname, packet_parser):
        self.controllerstate = Event()
        self.controllerdisconnected = Event()
        self.onerror = Event()

        self.packet_parser = packet_parser

        self.serial = SerialMonitor(serial_port=portname)
        self.serial.packet_recv += self.serialmonitor_packetrecv
        self.serial.disconnected += self.serialmonitor_disconnected

    def serialmonitor_disconnected(self, data, *args, **kwargs):
        self.finish()
        self.controllerdisconnected(self)

    def serialmonitor_packetrecv(self, packet, *args, **kwargs):
        state = self.packet_parser(packet)
        if state is not None:
            self.controllerstate(self, state)

    def finish(self):
        self.serial.stop()

    def update(self, data=None):
        try:
            self.serial.serial_read()
        except SerialException as e:
            self.onerror(self, e)
        except TypeError as e:
            util.logger.error(str(e))
Exemplo n.º 2
0
    def __init__(self, portname, packet_parser):
        self.controllerstate = Event()
        self.controllerdisconnected = Event()
        self.onerror = Event()

        self.packet_parser = packet_parser

        self.serial = SerialMonitor(serial_port=portname)
        self.serial.packet_recv += self.serialmonitor_packetrecv
        self.serial.disconnected += self.serialmonitor_disconnected
Exemplo n.º 3
0
class App(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, background="white")

        self.monitor = SerialMonitor()

        self.parent = parent

        self.frame = Frame(parent, relief=RAISED, borderwidth=1)

        self.scrollbar = Scrollbar(parent)

        self.receive_box = Text(parent, width=10, height=10, takefocus=0)
        self.transmit_box = Text(parent, width=10, height=10, takefocus=0)

        self.send_button = Button(parent, text="Send", command=self.send_message)

        self.initUI()
        self.process_serial_input()
        #self.send_message()


    def initUI(self):
        self.parent.title("Serial Monitor")

        self.frame.pack(fill=BOTH, expand=True)

        self.pack(fill=BOTH, expand=1)

        self.scrollbar.pack(side=RIGHT, fill=Y)

        self.receive_box.pack(side=LEFT)
        self.receive_box.config(yscrollcommand=self.scrollbar.set, state=DISABLED)

        self.transmit_box.pack()

        self.scrollbar.config(command=self.receive_box.yview)

        self.send_button.pack(side=RIGHT, padx=5, pady=5)

    def process_serial_input(self):
        while self.monitor.available():
            try:
                self.receive_box.config(state=NORMAL)
                self.receive_box.insert('end', self.monitor.queue.get())
                self.receive_box.config(state=DISABLED)

            except Queue.Empty:
                pass
        self.after(100, self.process_serial_input)

    def send_message(self):
        message = self.transmit_box.get(1.0, 'end')
        self.monitor.write(message)
Exemplo n.º 4
0
    def __init__(self, parent):
        Frame.__init__(self, parent, background="white")

        self.monitor = SerialMonitor()

        self.parent = parent

        self.frame = Frame(parent, relief=RAISED, borderwidth=1)

        self.scrollbar = Scrollbar(parent)

        self.receive_box = Text(parent, width=10, height=10, takefocus=0)
        self.transmit_box = Text(parent, width=10, height=10, takefocus=0)

        self.send_button = Button(parent, text="Send", command=self.send_message)

        self.initUI()
        self.process_serial_input()
Exemplo n.º 5
0
	def onSerialChange(self, serialDeviceName, force = False):
		#if self.selectedSerial != serialDeviceName or force:
		print "Serial port set to " + serialDeviceName
		print "Starting to monitor device"

		self.selectedSerial = serialDeviceName

		if self.selectedSerial == FAKE_SERIAL_NAME:
			print "Running off the fake serial"

			self.serialMonitor = FakeSerialMonitor(str(self.selectedSerial))
		else:
			self.serialMonitor = SerialMonitor(str(self.selectedSerial), self.SERIAL_BAUD)

		self.connect(self.serialMonitor, QtCore.SIGNAL('DATA_RECEIVED'), self.serialDataCallback)
		self.connect(self.serialMonitor, QtCore.SIGNAL('ERROR_RAISED'), self.serialErrorCallback)

		self.currentData = []

		self.serialMonitor.start()
Exemplo n.º 6
0
class Sparkie(QtGui.QWidget):
	WINDOW_WIDTH = 1000
	WINDOW_HEIGHT = 600

	MAX_RPM = 15000

	DATA_TO_HOLD = 51

	SERIAL_BAUD = 115200

	selectedSerial = ''
	availableSerialPorts = []

	currentData = []

	lastMessage = ''

	def __init__(self):
		super(Sparkie, self).__init__()

		self.lastMessage = ""
		self.currentData = ""
		self.selectedSerial = ""
		self.serialMonitor = ""

		# Init UI

		serialLabel = QtGui.QLabel('Serial Port:', self)

		####################################

		self.serialCombo = QtGui.QComboBox()

		####################################

		self.plot = Qwt5.QwtPlot()

		self.plot.setCanvasBackground(QtCore.Qt.black)

		self.plot.setAxisTitle(Qwt5.QwtPlot.yLeft, 'RPM')
		self.plot.setAxisScale(Qwt5.QwtPlot.yLeft, 0, self.MAX_RPM, 1000)

		self.plot.setAxisTitle(Qwt5.QwtPlot.xBottom, 'Data Points')
		self.plot.setAxisScale(Qwt5.QwtPlot.xBottom, 0, self.DATA_TO_HOLD - 1, 5)

		self.plot.replot()

		self.curve = Qwt5.QwtPlotCurve()

		self.curve.setRenderHint(Qwt5.QwtPlotItem.RenderAntialiased)

		pen = QtGui.QPen(QtGui.QColor(0, 255, 0))

		pen.setWidth(3)

		self.curve.setPen(pen)

		self.curve.attach(self.plot)

		####################################

		grid = QtGui.QGridLayout()

		grid.setSpacing(10)

		grid.addWidget(serialLabel, 1, 0)
		grid.addWidget(self.serialCombo, 1, 1)
		grid.addWidget(self.plot, 2, 0, 1, 2)

		self.setLayout(grid)

		screen = QtGui.QDesktopWidget().screenGeometry()

		self.setGeometry((screen.width() - self.WINDOW_WIDTH) / 2, (screen.height() - self.WINDOW_HEIGHT) / 2, self.WINDOW_WIDTH, self.WINDOW_HEIGHT)

		self.setWindowTitle('Arduino CDI GUI')

		self.show()

		self.enumerateSerialPorts()

	def serialErrorCallback(self, error):
		newMessage = "Error!: " + error.message

		if newMessage != self.lastMessage:
			print newMessage

		self.lastMessage = newMessage

		self.serialMonitor.terminate()

	def plotCurrentData(self):
		xValues = []

		currColor = 255

		for position in range(len(self.currentData)):
			xValues.append(position)

		self.curve.setData(xValues, self.currentData)

		self.plot.replot()
		self.plot.show()


	def serialDataCallback(self, data):
		data = data.split(':')

		if data[0] == 'rpm':
			value = data[1].strip()

			value = int(value)

			#print value

			self.currentData.append(value)

			if len(self.currentData) > self.DATA_TO_HOLD:
				self.currentData.pop(0)

			self.plotCurrentData()

	def onSerialChange(self, serialDeviceName, force = False):
		#if self.selectedSerial != serialDeviceName or force:
		print "Serial port set to " + serialDeviceName
		print "Starting to monitor device"

		self.selectedSerial = serialDeviceName

		if self.selectedSerial == FAKE_SERIAL_NAME:
			print "Running off the fake serial"

			self.serialMonitor = FakeSerialMonitor(str(self.selectedSerial))
		else:
			self.serialMonitor = SerialMonitor(str(self.selectedSerial), self.SERIAL_BAUD)

		self.connect(self.serialMonitor, QtCore.SIGNAL('DATA_RECEIVED'), self.serialDataCallback)
		self.connect(self.serialMonitor, QtCore.SIGNAL('ERROR_RAISED'), self.serialErrorCallback)

		self.currentData = []

		self.serialMonitor.start()

	def enumerateSerialPorts(self):
		availablePorts = []

		if platform.system() == "Windows":
			for i in range(256):
				try:
					s = serial.Serial(i)

					availablePorts.append(i)

					s.close()
				except serial.SerialException:
					pass

		elif platform.system() == "Darwin":
			# Mac
			availablePorts = glob.glob('/dev/tty*') + glob.glob('/dev/cu*')

		else:
			# Assume Linux or something else
			availablePorts = glob.glob('/dev/ttyACM*') + glob.glob('/dev/ttyUSB*')

		if len(availablePorts) == 0:
			availablePorts = [FAKE_SERIAL_NAME]

		self.serialCombo.addItems(availablePorts)

		self.serialCombo.activated[str].connect(self.onSerialChange)

		self.onSerialChange(availablePorts[0])