Exemple #1
0
    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)
Exemple #2
0
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