def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.packet_format = PacketFormat() self.tm_cells = {} #Maps tm field names to cell coords # Connect function calls to GUI actions QtCore.QObject.connect(self.ui.update_format_btn, QtCore.SIGNAL("clicked()"), self.update_format) QtCore.QObject.connect(self.ui.udp_connect_btn, QtCore.SIGNAL("clicked()"), self.udp_connect_btn_clicked) QtCore.QObject.connect(self.ui.serial_connect_btn, QtCore.SIGNAL("clicked()"), self.serial_connect_btn_clicked) QtCore.QObject.connect(self.ui.udp_disconnect_btn, QtCore.SIGNAL("clicked()"), self.close_connection) QtCore.QObject.connect(self.ui.serial_disconnect_btn, QtCore.SIGNAL("clicked()"), self.close_connection)
class omnicomm_QT4(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.packet_format = PacketFormat() self.tm_cells = {} #Maps tm field names to cell coords # Connect function calls to GUI actions QtCore.QObject.connect(self.ui.update_format_btn, QtCore.SIGNAL("clicked()"), self.update_format) QtCore.QObject.connect(self.ui.udp_connect_btn, QtCore.SIGNAL("clicked()"), self.udp_connect_btn_clicked) QtCore.QObject.connect(self.ui.serial_connect_btn, QtCore.SIGNAL("clicked()"), self.serial_connect_btn_clicked) QtCore.QObject.connect(self.ui.udp_disconnect_btn, QtCore.SIGNAL("clicked()"), self.close_connection) QtCore.QObject.connect(self.ui.serial_disconnect_btn, QtCore.SIGNAL("clicked()"), self.close_connection) # Initialize global application variables #Initialize hermes session #self.conn = UDPConnection(port=1350, protocol='none', callback=self.msghandler) #self.conn = SerialConnection(port=8, baud=9600, protocol='none', callback=self.msghandler) #self.ser = None #self.session = None # Application functions #------------------------------------------------------------- def udp_connect_btn_clicked(self): try: port = int(str(self.ui.udp_port_edit.text())) bind_addr = str(self.ui.udp_bindaddr_edit.text()) timeout = int(str(self.ui.udp_timeout_edit.text())) buff_size = int(str(self.ui.udp_buffsize_edit.text())) self.conn = UDPConnection(port=port, bind_addr=bind_addr, timeout=timeout, buff_size=buff_size, protocol='none', callback=self.msghandler) except: print 'Error creating socket' print sys.exc_info()[0] raise self.open_connection() def serial_connect_btn_clicked(self): try: port = int(str(self.ui.serial_port_edit.text())) baud = str(self.ui.serial_baud_edit.text()) timeout = int(str(self.ui.udp_timeout_edit.text())) buff_size = int(str(self.ui.udp_buffsize_edit.text())) - 1 #Port numbers are 1-indexed self.conn = SerialConnection(port=port, baud=baud, timeout=timeout, buff_size=buff_size, protocol='none', callback=self.msghandler) except: print 'Error opening serial port' print sys.exc_info()[0] raise self.open_connection() def close_connection(self): self.conn_timer.stop() self.conn.disconnect() def open_connection(self): self.conn.connect() print 'Connected...' self.conn_timer = QtCore.QTimer() QObject.connect(self.conn_timer, SIGNAL("timeout()"), self.conn.checkForMessages) self.conn_timer.start(100) def start_serial(self): #Initialize hermes session self.ser = serial.Serial(12, 9600, timeout=1) self.session = hermes.HermesSession(msgHandler=self.msghandler) #Start timer for serial connection self.serial_timer = QtCore.QTimer() QObject.connect(self.serial_timer, SIGNAL("timeout()"), self.check_serial) self.serial_timer.start(100) def check_serial(self): msg = self.ser.read() if len(msg) > 0: for c in msg: self.session.processChar(ord(c[0])) def msghandler(self, s, nbytes): s = s[0:nbytes] #Post raw data to textbox self.ui.raw_data_textEdit.clear() if self.ui.data_view_encoding_combo.currentText() == 'ASCII': self.ui.raw_data_textEdit.appendPlainText(s) elif self.ui.data_view_encoding_combo.currentText() == 'Hex': self.ui.raw_data_textEdit.appendPlainText(s.encode('hex')) #if nbytes == 4: if self.packet_format.format_str is not '': field_tuple = struct.unpack(self.packet_format.format_str, s) print field_tuple for i in range(0, len(field_tuple)): self.packet_format.fields[i].value = field_tuple[i] else: print s self.update_field_display() def update_format(self): format_str = str(self.ui.format_lineEdit.text()) field_names = self.ui.labels_lineEdit.text().split(',') field_units = self.ui.units_lineEdit.text().split(',') field_format_strings = self.parse_format_string(format_str) print field_format_strings if len(field_names) == len(field_units) == len(field_format_strings): for i in range(0, len(field_names)): field = TMField() field.format_str = field_format_strings[i] field.name = field_names[i] field.units = field_units[i] self.packet_format.add_field(field) self.packet_format.format_str = format_str x = [] self.tm_cells = self.tm_cells.fromkeys(field_names, None) for key in self.tm_cells.keys(): self.tm_cells[key] = [] self.update_tm_table() print self.tm_cells else: print 'Err: number of field descriptors unmatched' def update_tm_table(self): self.ui.tm_table.clear() for i, field in enumerate(self.packet_format.fields): print field self.insert_field_row(self.ui.tm_table, field, i, 0) #self.tm_cells[(i,0+2)] = field self.tm_cells[field.name].append((i,0+2)) print field.name, i self.update_field_display() def update_field_display(self): for name in self.tm_cells.keys(): field = self.packet_format.field_dict[name] for (row, column) in self.tm_cells[name]: self.ui.tm_table.setItem(row, column, QTableWidgetItem(str(field.value))) @staticmethod def insert_field_row(table, field, row, column): while table.columnCount() < 5: table.insertColumn(table.columnCount()) while table.rowCount() < row + 1: table.insertRow(table.rowCount()) table.setItem(row, column+0, QTableWidgetItem(str(field.id))) table.setItem(row, column+1, QTableWidgetItem(field.name)) table.setItem(row, column+3, QTableWidgetItem(field.units)) table.setItem(row, column+4, QTableWidgetItem(field.format_str)) @staticmethod def parse_format_string(s): field_format_list = [] for c in s: if c != '>' and c != '<': field_format_list.append(c) return field_format_list