Example #1
0
    def __init__(self, parent=None):
        super(AvatarEEG, self).__init__()
        self.free_to_connect = Lock()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        version = "$Revision: 363 $".replace('$Revision: ', '')[:-2]
        self.setWindowTitle(tr('Avatar EEG Driver'))
        t = 'Avatar EEG Driver version 0.%s' % version
        log(t)
        self.ui.version_label.setText(t)
        self.ui.tableWidget.setColumnWidth(1, 120)
        self.ui.csvCheckBox.setChecked(write_to_csv_init)
        self.ui.bdfCheckBox.setChecked(write_to_bdf_init)
        self.ui.impedanceCheckButton.setVisible(False)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect(('localhost', 8336))
        except:
            log("Neuroserver not running")
        else:
            log("Neuroserver detected")
            s.close()

        self.stimer = QtCore.QTimer()
        self.device_list = {}
        log("Starting discovery thread")
        self.discover_thread = DiscoverWorker(self, self.ui.discoverCheckBox)
        self.connect(self.discover_thread,
                     QtCore.SIGNAL('discover_complete_event(PyQt_PyObject)'),
                     self.discover_complete_event)

        self.discover_thread.start()
    def __init__(self, parent=None):
        super(AvatarEEG, self).__init__()
        self.free_to_connect = Lock()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        version = "$Revision: 144 $".replace( '$Revision: ', '' )[:-2]
        self.setWindowTitle(tr('Avatar EEG Driver'))
        t = 'Avatar EEG Driver version 0.%s' % version
        log(t)
        self.ui.version_label.setText(t)
        self.ui.tableWidget.setColumnWidth(1,120)
        self.ui.csvCheckBox.setChecked(write_to_csv_init)
        self.ui.bdfCheckBox.setChecked(write_to_bdf_init)


        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect(('localhost', 8336))
        except:
            log("Neuroserver not running")
        else:
            log("Neuroserver detected")
            s.close()

        self.stimer = QtCore.QTimer()
        self.device_list = {}
        log("Starting discovery thread")
        self.discover_thread = DiscoverWorker(self, self.ui.discoverCheckBox)
        self.connect(self.discover_thread,
                     QtCore.SIGNAL('discover_complete_event(PyQt_PyObject)'),
                     self.discover_complete_event)

        self.discover_thread.start()
class AvatarEEG(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(AvatarEEG, self).__init__()
        self.free_to_connect = Lock()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        version = "$Revision: 144 $".replace( '$Revision: ', '' )[:-2]
        self.setWindowTitle(tr('Avatar EEG Driver'))
        t = 'Avatar EEG Driver version 0.%s' % version
        log(t)
        self.ui.version_label.setText(t)
        self.ui.tableWidget.setColumnWidth(1,120)
        self.ui.csvCheckBox.setChecked(write_to_csv_init)
        self.ui.bdfCheckBox.setChecked(write_to_bdf_init)


        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect(('localhost', 8336))
        except:
            log("Neuroserver not running")
        else:
            log("Neuroserver detected")
            s.close()

        self.stimer = QtCore.QTimer()
        self.device_list = {}
        log("Starting discovery thread")
        self.discover_thread = DiscoverWorker(self, self.ui.discoverCheckBox)
        self.connect(self.discover_thread,
                     QtCore.SIGNAL('discover_complete_event(PyQt_PyObject)'),
                     self.discover_complete_event)

        self.discover_thread.start()

    def closeEvent(self, event):
        log('Avatar EEG Driver Exiting')
        del self.discover_thread
        for v in self.device_list.values():
            if v[1]:
                v[1].stop()

    def discover_complete_event(self, devices):
        # check for new devices
        for bt_addr in devices:
            if bt_addr[:len(avatar_address_prefix)] == avatar_address_prefix:
                # this is an Avatar EEG Laird BTM device
                if bt_addr not in self.device_list.keys():
                    self.device_found(True, bt_addr)
                elif self.get_status(bt_addr) == 'Not Present'\
                        or self.get_status(bt_addr) == 'Disconnected':
                    self.device_found(True, bt_addr) # refound
        # check for devices that are no longer present
        for bt_addr in self.device_list.keys():
            if bt_addr not in devices:
                if self.get_status(bt_addr) != 'Not Present':
                    self.device_found(False, bt_addr)

    def device_found(self, add, bt_addr):
        if add:
            if bt_addr not in self.device_list.keys():
                row = self.ui.tableWidget.rowCount()
                self.device_list[bt_addr] = [row, None]
                self.ui.tableWidget.insertRow(row)
                self.ui.tableWidget.setItem(row, 0, TableItem(serial_numbers[bt_addr]))
                self.ui.tableWidget.setItem(row, 2, TableItem('0'))
            self.update_status('Discovered', bt_addr)
            r = ReceiveDataWorker(self, bt_addr,
                                  self.ui.csvCheckBox.isChecked(),
                                  self.ui.bdfCheckBox.isChecked())
            self.connect(r,
                         QtCore.SIGNAL('device_connection_event(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)'),
                         self.device_connection_event)
            self.connect(r,
                         QtCore.SIGNAL('device_rx_event(PyQt_PyObject,PyQt_PyObject)'),
                         self.device_rx_event)
            self.connect(r,
                         QtCore.SIGNAL('frame_lost_event(PyQt_PyObject,PyQt_PyObject)'),
                         self.frame_lost_event)
            QtCore.QObject.connect(self.ui.setTimeButton,QtCore.SIGNAL("clicked()"), r.send_set_time)
            QtCore.QObject.connect(self.ui.setInputShortButton,QtCore.SIGNAL("clicked()"), r.send_input_short)
            QtCore.QObject.connect(self.ui.setInputSquareWaveButton,QtCore.SIGNAL("clicked()"), r.send_input_square_wave)
            QtCore.QObject.connect(self.ui.setInputElectrodesButton,QtCore.SIGNAL("clicked()"), r.send_input_electrodes)
            r.start()
            self.device_list[bt_addr][1] = r
        else:
            # if status is Connected let receive thread detect disconnection
            # this handles the case where an erroneous discover may miss the device
            if self.get_status(bt_addr) != 'Connected':
                self.update_status('Not Present', bt_addr)

    def device_connection_event(self, connected, bt_addr, filename):
        if connected:
            self.update_status('Connected', bt_addr)
            row = self.device_list[bt_addr][0]
            self.ui.tableWidget.setItem(row, 4, TableItem(filename))
        else:
            # can only transition to Not Present from disconnected
            assert self.get_status(bt_addr) != 'Not Present', self.get_status(bt_addr)
            r = self.device_list[bt_addr][1]
            r.stop()
            self.device_list[bt_addr][1] = None
            self.update_status('Disconnected', bt_addr)

    def device_rx_event(self, samples, bt_addr):
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 2, TableItem(str(samples)))

    def frame_lost_event(self, frames_lost, bt_addr):
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 3, TableItem(str(frames_lost)))

    def update_status(self, status, bt_addr):
        log(status, bt_addr)
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 1, TableItem(status))

    def get_status(self, bt_addr):
        row = self.device_list[bt_addr][0]
        return self.ui.tableWidget.item(row, 1).text()
Example #4
0
class AvatarEEG(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(AvatarEEG, self).__init__()
        self.free_to_connect = Lock()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        version = "$Revision: 363 $".replace('$Revision: ', '')[:-2]
        self.setWindowTitle(tr('Avatar EEG Driver'))
        t = 'Avatar EEG Driver version 0.%s' % version
        log(t)
        self.ui.version_label.setText(t)
        self.ui.tableWidget.setColumnWidth(1, 120)
        self.ui.csvCheckBox.setChecked(write_to_csv_init)
        self.ui.bdfCheckBox.setChecked(write_to_bdf_init)
        self.ui.impedanceCheckButton.setVisible(False)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect(('localhost', 8336))
        except:
            log("Neuroserver not running")
        else:
            log("Neuroserver detected")
            s.close()

        self.stimer = QtCore.QTimer()
        self.device_list = {}
        log("Starting discovery thread")
        self.discover_thread = DiscoverWorker(self, self.ui.discoverCheckBox)
        self.connect(self.discover_thread,
                     QtCore.SIGNAL('discover_complete_event(PyQt_PyObject)'),
                     self.discover_complete_event)

        self.discover_thread.start()

    def closeEvent(self, event):
        log('Avatar EEG Driver Exiting')
        del self.discover_thread
        for v in self.device_list.values():
            if v[1]:
                v[1].stop()

    def discover_complete_event(self, devices):
        bt_addr_list = []
        # check for new devices
        for bt_addr, name in devices:
            bt_addr_list.append(bt_addr)
            if name[:11] == 'Avatar EEG ' or name[:11] == 'Laird BTM 0':
                # this is an Avatar EEG device
                if bt_addr not in self.device_list.keys():
                    self.device_found(True, name[11:], bt_addr)
                elif self.get_status(bt_addr) == 'Not Present'\
                        or self.get_status(bt_addr) == 'Disconnected':
                    self.device_found(True, name[11:], bt_addr)  # refound
        # check for devices that are no longer present
        for bt_addr in self.device_list.keys():
            if bt_addr not in bt_addr_list:
                # print bt_addr, devices
                if self.get_status(bt_addr) != 'Not Present':
                    self.device_found(False, None, bt_addr)

    def device_found(self, add, serial_num, bt_addr):
        if add:
            if bt_addr not in self.device_list.keys():
                row = self.ui.tableWidget.rowCount()
                self.device_list[bt_addr] = [row, None]
                self.ui.tableWidget.insertRow(row)
                self.ui.tableWidget.setItem(row, 0, TableItem(serial_num))
                self.ui.tableWidget.setItem(row, 2, TableItem('0'))
            self.update_status('Discovered', serial_num, bt_addr)
            r = ReceiveDataWorker(self, serial_num, bt_addr,
                                  self.ui.csvCheckBox.isChecked(),
                                  self.ui.bdfCheckBox.isChecked())
            self.connect(
                r,
                QtCore.SIGNAL(
                    'device_connection_event(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)'
                ), self.device_connection_event)
            self.connect(
                r,
                QtCore.SIGNAL('device_rx_event(PyQt_PyObject,PyQt_PyObject)'),
                self.device_rx_event)
            self.connect(
                r,
                QtCore.SIGNAL('frame_lost_event(PyQt_PyObject,PyQt_PyObject)'),
                self.frame_lost_event)
            QtCore.QObject.connect(self.ui.impedanceCheckButton,
                                   QtCore.SIGNAL("clicked()"),
                                   r.send_impedance_check)
            QtCore.QObject.connect(self.ui.setTimeButton,
                                   QtCore.SIGNAL("clicked()"), r.send_set_time)
            QtCore.QObject.connect(self.ui.setInputShortButton,
                                   QtCore.SIGNAL("clicked()"),
                                   r.send_input_short)
            QtCore.QObject.connect(self.ui.setInputSquareWaveButton,
                                   QtCore.SIGNAL("clicked()"),
                                   r.send_input_square_wave)
            QtCore.QObject.connect(self.ui.setInputElectrodesButton,
                                   QtCore.SIGNAL("clicked()"),
                                   r.send_input_electrodes)
            r.start()
            self.device_list[bt_addr][1] = r
        else:
            # if status is Connected let receive thread detect disconnection
            # this handles the case where an erroneous discover may miss the device
            if self.get_status(bt_addr) != 'Connected':
                self.update_status('Not Present', serial_num, bt_addr)

    def device_connection_event(self, connected, serial_num, bt_addr,
                                filename):
        if connected:
            self.update_status('Connected', serial_num, bt_addr)
            row = self.device_list[bt_addr][0]
            self.ui.tableWidget.setItem(row, 4, TableItem(filename))
        else:
            # can only transition to Not Present from disconnected
            assert self.get_status(bt_addr) != 'Not Present', self.get_status(
                bt_addr)
            r = self.device_list[bt_addr][1]
            r.stop()
            self.device_list[bt_addr][1] = None
            self.update_status('Disconnected', serial_num, bt_addr)

    def device_rx_event(self, samples, bt_addr):
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 2, TableItem(str(samples)))

    def frame_lost_event(self, frames_lost, bt_addr):
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 3, TableItem(str(frames_lost)))

    def update_status(self, status, serial_num, bt_addr):
        log(status, serial_num)
        row = self.device_list[bt_addr][0]
        self.ui.tableWidget.setItem(row, 1, TableItem(status))

    def get_status(self, bt_addr):
        row = self.device_list[bt_addr][0]
        return self.ui.tableWidget.item(row, 1).text()