211 lines
9.9 KiB
Python
211 lines
9.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
import os
|
|
from PyQt4 import QtCore, QtGui
|
|
from serial import Serial, FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS, PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK,\
|
|
PARITY_SPACE, STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO, SerialException
|
|
from serial.tools import list_ports
|
|
|
|
from colourterm import fromUtf8, translate
|
|
|
|
|
|
DATA_BITS = {
|
|
'5': FIVEBITS,
|
|
'6': SIXBITS,
|
|
'7': SEVENBITS,
|
|
'8': EIGHTBITS
|
|
}
|
|
PARITY_BITS = {
|
|
'None': PARITY_NONE,
|
|
'Even': PARITY_EVEN,
|
|
'Odd': PARITY_ODD,
|
|
'Mark': PARITY_MARK,
|
|
'Space': PARITY_SPACE
|
|
}
|
|
STOP_BITS = {
|
|
'1': STOPBITS_ONE,
|
|
'1.5': STOPBITS_ONE_POINT_FIVE,
|
|
'2': STOPBITS_TWO
|
|
}
|
|
|
|
|
|
class Ui_ConnectDialog(object):
|
|
def setupUi(self, connectDialog):
|
|
self.deviceLayout = QtGui.QGridLayout(connectDialog)
|
|
self.deviceLayout.setSpacing(8)
|
|
self.deviceLayout.setContentsMargins(8, 8, 8, 0)
|
|
self.deviceLayout.setObjectName(fromUtf8('deviceLayout'))
|
|
self.portLabel = QtGui.QLabel(connectDialog)
|
|
self.portLabel.setObjectName(fromUtf8('portLabel'))
|
|
self.deviceLayout.addWidget(self.portLabel, 0, 0, 1, 1)
|
|
self.portEdit = QtGui.QComboBox(connectDialog)
|
|
self.portEdit.setObjectName(fromUtf8('portEdit'))
|
|
self.portEdit.setEditable(True)
|
|
self.deviceLayout.addWidget(self.portEdit, 0, 1, 1, 1)
|
|
self.baudLabel = QtGui.QLabel(connectDialog)
|
|
self.baudLabel.setObjectName(fromUtf8('baudLabel'))
|
|
self.deviceLayout.addWidget(self.baudLabel, 1, 0, 1, 1)
|
|
self.baudComboBox = QtGui.QComboBox(connectDialog)
|
|
self.baudComboBox.setObjectName(fromUtf8('baudComboBox'))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.baudComboBox.addItem(fromUtf8(''))
|
|
self.deviceLayout.addWidget(self.baudComboBox, 1, 1, 1, 1)
|
|
self.dataBitsLabel = QtGui.QLabel(connectDialog)
|
|
self.dataBitsLabel.setObjectName(fromUtf8('dataBitsLabel'))
|
|
self.deviceLayout.addWidget(self.dataBitsLabel, 2, 0, 1, 1)
|
|
self.dataBitsComboBox = QtGui.QComboBox(connectDialog)
|
|
self.dataBitsComboBox.setObjectName(fromUtf8('dataBitsComboBox'))
|
|
self.dataBitsComboBox.addItem(fromUtf8(''))
|
|
self.dataBitsComboBox.addItem(fromUtf8(''))
|
|
self.dataBitsComboBox.addItem(fromUtf8(''))
|
|
self.dataBitsComboBox.addItem(fromUtf8(''))
|
|
self.deviceLayout.addWidget(self.dataBitsComboBox, 2, 1, 1, 1)
|
|
self.stopBitsLabel = QtGui.QLabel(connectDialog)
|
|
self.stopBitsLabel.setObjectName(fromUtf8('stopBitsLabel'))
|
|
self.deviceLayout.addWidget(self.stopBitsLabel, 3, 0, 1, 1)
|
|
self.stopBitsComboBox = QtGui.QComboBox(connectDialog)
|
|
self.stopBitsComboBox.setObjectName(fromUtf8('stopBitsComboBox'))
|
|
self.stopBitsComboBox.addItem(fromUtf8(''))
|
|
self.stopBitsComboBox.addItem(fromUtf8(''))
|
|
self.stopBitsComboBox.addItem(fromUtf8(''))
|
|
self.deviceLayout.addWidget(self.stopBitsComboBox, 3, 1, 1, 1)
|
|
self.parityLabel = QtGui.QLabel(connectDialog)
|
|
self.parityLabel.setObjectName(fromUtf8('parityLabel'))
|
|
self.deviceLayout.addWidget(self.parityLabel, 4, 0, 1, 1)
|
|
self.parityComboBox = QtGui.QComboBox(connectDialog)
|
|
self.parityComboBox.setObjectName(fromUtf8('parityComboBox'))
|
|
self.parityComboBox.addItem(fromUtf8(''))
|
|
self.parityComboBox.addItem(fromUtf8(''))
|
|
self.parityComboBox.addItem(fromUtf8(''))
|
|
self.parityComboBox.addItem(fromUtf8(''))
|
|
self.parityComboBox.addItem(fromUtf8(''))
|
|
self.deviceLayout.addWidget(self.parityComboBox, 4, 1, 1, 1)
|
|
self.handshakeLabel = QtGui.QLabel(connectDialog)
|
|
self.handshakeLabel.setObjectName(fromUtf8('handshakeLabel'))
|
|
self.deviceLayout.addWidget(self.handshakeLabel, 0, 2, 1, 1)
|
|
self.softwareCheckBox = QtGui.QCheckBox(connectDialog)
|
|
self.softwareCheckBox.setObjectName(fromUtf8('softwareCheckBox'))
|
|
self.deviceLayout.addWidget(self.softwareCheckBox, 0, 3, 1, 1)
|
|
self.hardwareCheckBox = QtGui.QCheckBox(connectDialog)
|
|
self.hardwareCheckBox.setObjectName(fromUtf8('hardwareCheckBox'))
|
|
self.deviceLayout.addWidget(self.hardwareCheckBox, 1, 3, 1, 1)
|
|
self.openModeLabel = QtGui.QLabel(connectDialog)
|
|
self.openModeLabel.setObjectName(fromUtf8('openModeLabel'))
|
|
self.deviceLayout.addWidget(self.openModeLabel, 2, 2, 1, 1)
|
|
self.readingCheckBox = QtGui.QCheckBox(connectDialog)
|
|
self.readingCheckBox.setChecked(True)
|
|
self.readingCheckBox.setObjectName(fromUtf8('readingCheckBox'))
|
|
self.deviceLayout.addWidget(self.readingCheckBox, 2, 3, 1, 1)
|
|
self.writingCheckBox = QtGui.QCheckBox(connectDialog)
|
|
self.writingCheckBox.setChecked(True)
|
|
self.writingCheckBox.setObjectName(fromUtf8('writingCheckBox'))
|
|
self.deviceLayout.addWidget(self.writingCheckBox, 3, 3, 1, 1)
|
|
self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
|
|
self.deviceLayout.addWidget(self.buttonBox, 5, 0, 1, 4)
|
|
|
|
self.retranslateUi(connectDialog)
|
|
self.baudComboBox.setCurrentIndex(4)
|
|
QtCore.QMetaObject.connectSlotsByName(connectDialog)
|
|
self.buttonBox.accepted.connect(connectDialog.accept)
|
|
self.buttonBox.rejected.connect(connectDialog.reject)
|
|
|
|
def retranslateUi(self, connectDialog):
|
|
connectDialog.setWindowTitle(translate('ConnectDialog', 'Open Port'))
|
|
self.portLabel.setText(translate('ConnectDialog', 'Port:'))
|
|
self.baudLabel.setText(translate('ConnectDialog', 'Baude rate:'))
|
|
self.baudComboBox.setItemText(0, translate('ConnectDialog', '921600'))
|
|
self.baudComboBox.setItemText(1, translate('ConnectDialog', '576000'))
|
|
self.baudComboBox.setItemText(2, translate('ConnectDialog', '460800'))
|
|
self.baudComboBox.setItemText(3, translate('ConnectDialog', '230400'))
|
|
self.baudComboBox.setItemText(4, translate('ConnectDialog', '115200'))
|
|
self.baudComboBox.setItemText(5, translate('ConnectDialog', '57600'))
|
|
self.baudComboBox.setItemText(6, translate('ConnectDialog', '38400'))
|
|
self.baudComboBox.setItemText(7, translate('ConnectDialog', '19200'))
|
|
self.baudComboBox.setItemText(8, translate('ConnectDialog', '9600'))
|
|
self.baudComboBox.setItemText(9, translate('ConnectDialog', '4800'))
|
|
self.dataBitsLabel.setText(translate('ConnectDialog', 'Data bits:'))
|
|
self.dataBitsComboBox.setItemText(0, translate('ConnectDialog', '8'))
|
|
self.dataBitsComboBox.setItemText(1, translate('ConnectDialog', '7'))
|
|
self.dataBitsComboBox.setItemText(2, translate('ConnectDialog', '6'))
|
|
self.dataBitsComboBox.setItemText(3, translate('ConnectDialog', '5'))
|
|
self.stopBitsLabel.setText(translate('ConnectDialog', 'Stop bits:'))
|
|
self.stopBitsComboBox.setItemText(0, translate('ConnectDialog', '1'))
|
|
self.stopBitsComboBox.setItemText(1, translate('ConnectDialog', '1.5'))
|
|
self.stopBitsComboBox.setItemText(2, translate('ConnectDialog', '2'))
|
|
self.parityLabel.setText(translate('ConnectDialog', 'Parity:'))
|
|
self.parityComboBox.setItemText(0, translate('ConnectDialog', 'None'))
|
|
self.parityComboBox.setItemText(1, translate('ConnectDialog', 'Odd'))
|
|
self.parityComboBox.setItemText(2, translate('ConnectDialog', 'Even'))
|
|
self.parityComboBox.setItemText(3, translate('ConnectDialog', 'Mark'))
|
|
self.parityComboBox.setItemText(4, translate('ConnectDialog', 'Space'))
|
|
self.handshakeLabel.setText(translate('ConnectDialog', 'Handshake:'))
|
|
self.softwareCheckBox.setText(translate('ConnectDialog', 'Software'))
|
|
self.hardwareCheckBox.setText(translate('ConnectDialog', 'Hardware'))
|
|
self.openModeLabel.setText(translate('ConnectDialog', 'Open mode:'))
|
|
self.readingCheckBox.setText(translate('ConnectDialog', 'Reading'))
|
|
self.writingCheckBox.setText(translate('ConnectDialog', 'Writing'))
|
|
|
|
class ConnectDialog(QtGui.QDialog, Ui_ConnectDialog):
|
|
|
|
def __init__(self):
|
|
QtGui.QDialog.__init__(self)
|
|
self.setupUi(self)
|
|
|
|
def getPort(self):
|
|
return unicode(self.portEdit.currentText())
|
|
|
|
def getBaud(self):
|
|
return int(unicode(self.baudComboBox.currentText()))
|
|
|
|
def getDataBits(self):
|
|
return DATA_BITS[unicode(self.dataBitsComboBox.currentText())]
|
|
|
|
def getStopBits(self):
|
|
return STOP_BITS[unicode(self.stopBitsComboBox.currentText())]
|
|
|
|
def getParity(self):
|
|
return PARITY_BITS[unicode(self.parityComboBox.currentText())]
|
|
|
|
def getSoftwareHandshake(self):
|
|
return self.softwareCheckBox.isChecked()
|
|
|
|
def getHardwareHandshake(self):
|
|
return self.hardwareCheckBox.isChecked()
|
|
|
|
def updatePortCombobox(self):
|
|
self.portEdit.clear()
|
|
ports = []
|
|
for port in self._getSerialPorts():
|
|
ports.append(port)
|
|
ports.sort()
|
|
self.portEdit.addItems(ports)
|
|
|
|
def _getSerialPorts(self):
|
|
"""
|
|
Returns a generator for all available serial ports
|
|
"""
|
|
if os.name == 'nt':
|
|
# windows
|
|
for i in range(256):
|
|
try:
|
|
s = Serial(i)
|
|
s.close()
|
|
yield 'COM' + str(i + 1)
|
|
except SerialException:
|
|
pass
|
|
else:
|
|
# unix
|
|
try:
|
|
for port in list_ports.comports():
|
|
yield port[0]
|
|
except NameError:
|
|
# pyserial 2.6 cannot handle serial usb ports very well, in that case just do not provide a list
|
|
pass
|