Changeset 151


Ignore:
Timestamp:
08/09/10 15:08:26 (11 years ago)
Author:
sc
Message:

synapse/interface/puzzlebox_synapse_interface_design:

  • Removed default MAC address from bluetooth device combobox

synapse/puzzlebox_synapse_client_thinkgear.py:

  • initial checkin

synapse/puzzlebox_synapse_protocol_thinkgear.py:

  • temporary tweaks to per-packet processing added (but commented out)

synapse/puzzlebox_synapse_interface.py:

  • Bluetooth MindSet? device searching complete
  • updateDebugConsole added
  • writeDebugConsoleBuffer added
  • initial efforts to move GUI updates into a single thread

synapse/puzzlebox_synapse_server_thinkgear.py:

  • adjustments to timer controls
  • adjustments to parenting of threaded objects
Location:
synapse
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • synapse/interface/puzzlebox_synapse_interface_design.ui

    r148 r151  
    824824      </property> 
    825825     </item> 
    826      <item> 
    827       <property name="text"> 
    828        <string>00:13:EF:00:1B:FE</string> 
    829       </property> 
    830      </item> 
    831826    </widget> 
    832827    <widget class="QPushButton" name="pushButtonBluetoothSearch"> 
  • synapse/puzzlebox_synapse_interface.py

    r150 r151  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.08.05 
     11# Last Update: 2010.08.09 
    1212# 
    1313##################################################################### 
     
    3737#from PySide import QtCore, QtGui 
    3838 
     39from PyQt4 import QtNetwork 
     40 
    3941from puzzlebox_synapse_interface_design import Ui_Form 
    4042 
    4143import puzzlebox_synapse_configuration as configuration 
    4244import puzzlebox_synapse_server_thinkgear as synapse_server 
     45#import puzzlebox_synapse_client_thinkgear as thinkgear_client 
    4346#import puzzlebox_logger 
    4447 
     
    6770        configuration.THINKGEAR_EMULATION_MAX_EEG_POWER_VALUE 
    6871 
     72PATH_TO_HCITOOL = '/usr/bin/hcitool' 
     73 
     74DEBUG_CONSOLE_UPDATE_FREQUENCY = 100 # ms 
     75 
    6976##################################################################### 
    7077# Classes 
     
    8794                 
    8895                self.thinkGearConnectServer = None 
     96                self.thinkgearConnectClient = None 
    8997                 
    9098                self.maxEEGPower = THINKGEAR_EMULATION_MAX_EEG_POWER_VALUE 
    91  
     99                 
     100                self.debug_console_buffer = '' 
     101                 
     102                self.updateDebugConsoleTimer = QtCore.QTimer() 
     103                QtCore.QObject.connect(self.updateDebugConsoleTimer, \ 
     104                                            QtCore.SIGNAL("timeout()"), \ 
     105                                            self.writeDebugConsoleBuffer) 
     106                self.updateDebugConsoleTimer.start(DEBUG_CONSOLE_UPDATE_FREQUENCY) 
    92107         
    93108         
     
    280295                         
    281296                         
     297                        #self.thinkgearConnectClient = \ 
     298                                #thinkgear_client.puzzlebox_synapse_client_thinkgear( \ 
     299                                        #self.log, \ 
     300                                        #server_host=server_interface, \ 
     301                                        #server_port=server_port, \ 
     302                                        #DEBUG=0, \ 
     303                                        #parent=self) 
     304                         
     305                        #self.thinkgearConnectClient.start() 
     306                         
     307                         
    282308                        self.disconnect(self.pushButtonThinkGearConnect, \ 
    283309                                             QtCore.SIGNAL("clicked()"), \ 
     
    298324        def stopThinkGearConnectServer(self): 
    299325                 
     326                #self.thinkgearConnectClient.disconnectFromHost() 
     327                 
    300328                self.thinkGearConnectServer.exitThread() 
    301329                 
     
    319347        ################################################################## 
    320348         
     349        def updateDebugConsole(self, output): 
     350                 
     351                self.debug_console_buffer += output 
     352         
     353         
     354        ################################################################## 
     355         
     356        def writeDebugConsoleBuffer(self): 
     357                 
     358                '''We call this in a separate method in order to remain threadsafe''' 
     359                 
     360                output = self.debug_console_buffer 
     361                self.debug_console_buffer = '' 
     362                 
     363                #self.textEditDebugConsole.append(output) 
     364         
     365         
     366        ################################################################## 
     367         
    321368        def processPacketThinkGear(self, packet): 
    322369                 
     
    330377                        value = 200 - packet['poorSignalLevel'] 
    331378                        self.progressBarSignalContactQuality.setValue(value) 
    332                         self.textEditDebugConsole.append("") 
    333                         self.textEditDebugConsole.append("poorSignalLevel: %i" % \ 
    334                                                             packet['poorSignalLevel']) 
     379                        self.updateDebugConsole("") 
     380                        self.updateDebugConsole("poorSignalLevel: %i" % \ 
     381                                                     packet['poorSignalLevel']) 
    335382                 
    336383                 
     
    340387                                value = packet['eSense']['attention'] 
    341388                                self.progressBarAttention.setValue(value) 
    342                                 self.textEditDebugConsole.append("eSense attention: %i" % value) 
     389                                self.updateDebugConsole("eSense attention: %i" % value) 
    343390                         
    344391                        if ('meditation' in packet['eSense'].keys()): 
    345392                                value = packet['eSense']['meditation'] 
    346393                                self.progressBarMeditation.setValue(value) 
    347                                 self.textEditDebugConsole.append("eSense meditation: %i" % value) 
     394                                self.updateDebugConsole("eSense meditation: %i" % value) 
    348395                 
    349396                 
     
    360407                                self.progressBarEEGDelta.setMaximum(self.maxEEGPower) 
    361408                                self.progressBarEEGDelta.setValue(value) 
    362                                 self.textEditDebugConsole.append("delta: %i" % value) 
     409                                self.updateDebugConsole("delta: %i" % value) 
    363410                         
    364411                        if ('theta' in packet['eegPower'].keys()): 
     
    366413                                self.progressBarEEGTheta.setMaximum(self.maxEEGPower) 
    367414                                self.progressBarEEGTheta.setValue(value) 
    368                                 self.textEditDebugConsole.append("theta: %i" % value) 
     415                                self.updateDebugConsole("theta: %i" % value) 
    369416                         
    370417                        if ('lowAlpha' in packet['eegPower'].keys()): 
     
    372419                                self.progressBarEEGLowAlpha.setMaximum(self.maxEEGPower) 
    373420                                self.progressBarEEGLowAlpha.setValue(value) 
    374                                 self.textEditDebugConsole.append("lowAlpha: %i" % value) 
     421                                self.updateDebugConsole("lowAlpha: %i" % value) 
    375422                         
    376423                        if ('highAlpha' in packet['eegPower'].keys()): 
     
    378425                                self.progressBarEEGHighAlpha.setMaximum(self.maxEEGPower) 
    379426                                self.progressBarEEGHighAlpha.setValue(value) 
    380                                 self.textEditDebugConsole.append("highAlpha: %i" % value) 
     427                                self.updateDebugConsole("highAlpha: %i" % value) 
    381428                         
    382429                        if ('lowBeta' in packet['eegPower'].keys()): 
     
    384431                                self.progressBarEEGLowBeta.setMaximum(self.maxEEGPower) 
    385432                                self.progressBarEEGLowBeta.setValue(value) 
    386                                 self.textEditDebugConsole.append("lowBeta: %i" % value) 
     433                                self.updateDebugConsole("lowBeta: %i" % value) 
    387434                         
    388435                        if ('highBeta' in packet['eegPower'].keys()): 
     
    390437                                self.progressBarEEGHighBeta.setMaximum(self.maxEEGPower) 
    391438                                self.progressBarEEGHighBeta.setValue(value) 
    392                                 self.textEditDebugConsole.append("highBeta: %i" % value) 
     439                                self.updateDebugConsole("highBeta: %i" % value) 
    393440                         
    394441                        if ('lowGamma' in packet['eegPower'].keys()): 
     
    396443                                self.progressBarEEGLowGamma.setMaximum(self.maxEEGPower) 
    397444                                self.progressBarEEGLowGamma.setValue(value) 
    398                                 self.textEditDebugConsole.append("lowGamma: %i" % value) 
     445                                self.updateDebugConsole("lowGamma: %i" % value) 
    399446                         
    400447                        if ('highGamma' in packet['eegPower'].keys()): 
     
    402449                                self.progressBarEEGMidGamma.setMaximum(self.maxEEGPower) 
    403450                                self.progressBarEEGMidGamma.setValue(value) 
    404                                 self.textEditDebugConsole.append("highGamma: %i" % value) 
     451                                self.updateDebugConsole("highGamma: %i" % value) 
    405452         
    406453         
     
    415462                        # Bluetooth module doesn't compile properly under Windows 
    416463                         
    417                         bluetooth_devices = bluetooth.discover_devices( \ 
    418                                                     duration=5, \ 
    419                                                     flush_cache=True, \ 
    420                                                     lookup_names=True) 
     464                        bluetooth_devices = [] 
     465                         
     466                        #bluetooth_devices = bluetooth.discover_devices( \ 
     467                                                    #duration=5, \ 
     468                                                    #flush_cache=True, \ 
     469                                                    #lookup_names=True) 
     470                         
     471                        addresses = [] 
     472                         
     473                        command = '%s con' % PATH_TO_HCITOOL 
     474                         
     475                        output = os.popen(command, 'r') 
     476                         
     477                        for line in output.readlines(): 
     478                                try: 
     479                                        address = line.split(' ')[2] 
     480                                except: 
     481                                        pass 
     482                                else: 
     483                                        addresses.append(address) 
     484                         
     485                        for address in addresses: 
     486                                device_name = bluetooth.lookup_name(address) 
     487                                if device_name == 'MindSet': 
     488                                        bluetooth_devices.append(address) 
     489                         
    421490                         
    422491                        if self.DEBUG: 
    423492                                print "Bluetooth devices found:", 
    424493                                print bluetooth_devices 
     494                         
     495                         
     496                        self.comboBoxDeviceSelect.clear() 
     497                         
     498                        self.comboBoxDeviceSelect.addItem('MindSet Emulator') 
     499                         
     500                         
     501                        for mindset_device in bluetooth_devices: 
     502                                self.comboBoxDeviceSelect.addItem(mindset_device) 
    425503                 
    426504                 
  • synapse/puzzlebox_synapse_interface_design.py

    r148 r151  
    33# Form implementation generated from reading ui file 'puzzlebox_synapse_interface_design.ui' 
    44# 
    5 # Created: Fri Aug  6 02:10:45 2010 
     5# Created: Mon Aug  9 03:18:58 2010 
    66#      by: PyQt4 UI code generator 4.7.3 
    77# 
     
    221221                self.comboBoxDeviceSelect.setObjectName("comboBoxDeviceSelect") 
    222222                self.comboBoxDeviceSelect.addItem("") 
    223                 self.comboBoxDeviceSelect.addItem("") 
    224223                self.pushButtonBluetoothSearch = QtGui.QPushButton(self.tab) 
    225224                self.pushButtonBluetoothSearch.setGeometry(QtCore.QRect(8, 196, 66, 31)) 
     
    365364"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt; font-weight:600;\">Signal</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
    366365                self.comboBoxDeviceSelect.setItemText(0, QtGui.QApplication.translate("Form", "MindSet Emulator", None, QtGui.QApplication.UnicodeUTF8)) 
    367                 self.comboBoxDeviceSelect.setItemText(1, QtGui.QApplication.translate("Form", "00:13:EF:00:1B:FE", None, QtGui.QApplication.UnicodeUTF8)) 
    368366                self.pushButtonBluetoothSearch.setText(QtGui.QApplication.translate("Form", "Search", None, QtGui.QApplication.UnicodeUTF8)) 
    369367                self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QtGui.QApplication.translate("Form", "ThinkGear Connect Server", None, QtGui.QApplication.UnicodeUTF8)) 
  • synapse/puzzlebox_synapse_protocol_thinkgear.py

    r150 r151  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.08.05 
     11# Last Update: 2010.08.09 
    1212# 
    1313##################################################################### 
     
    671671                 
    672672                if 'eSense' in packet_update.keys(): 
     673                        #self.data_packet = {'eSense': {}} 
    673674                        for key in packet_update['eSense'].keys(): 
    674675                                self.data_packet['eSense'][key] = packet_update['eSense'][key] 
     
    676677                else: 
    677678                        self.data_packet.update(packet_update) 
     679                        #self.data_packet = packet_update 
    678680                 
    679681                if self.DEBUG > 3: 
    680682                        print self.data_packet 
     683                 
     684                 
     685                #if (self.parent != None): 
     686                        ##self.parent.processPacketThinkGear(self.data_packet) 
     687                        ##self.parent.updateStatus() 
     688                        #self.parent.timerEvent() 
    681689         
    682690         
  • synapse/puzzlebox_synapse_server_thinkgear.py

    r149 r151  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.08.05 
     11# Last Update: 2010.08.09 
    1212# 
    1313##################################################################### 
     
    165165                 
    166166                 
     167                #if ((self.parent == None) or \ 
     168                         #(self.emulate_headset_data)): 
    167169                self.updateTimer = QtCore.QTimer() 
    168170                QtCore.QObject.connect(self.updateTimer, \ 
    169                                        QtCore.SIGNAL("timeout()"), \ 
    170                                        self.timerEvent) 
     171                                                                                QtCore.SIGNAL("timeout()"), \ 
     172                                                                                self.timerEvent) 
    171173                self.updateTimer.start(MESSAGE_FREQUENCY_TIMER) 
    172174         
     
    183185                              device_address=self.device_address, \ 
    184186                              DEBUG=self.DEBUG, \ 
    185                               parent=self.parent) 
     187                              parent=self) 
    186188                         
    187189                        self.serial_device.start() 
     
    192194                              self.serial_device, \ 
    193195                              DEBUG=self.DEBUG, \ 
    194                               parent=self.parent) 
     196                              parent=self) 
    195197                         
    196198                        self.protocol.start() 
     
    201203        def timerEvent(self): 
    202204                 
    203                 if ((self.connections != []) or \ 
    204                          (self.parent != None)): 
    205                          
    206                         self.updateStatus() 
    207                         self.sendPacketQueue() 
     205                #if ((self.connections != []) or \ 
     206                         #(self.parent != None)): 
     207                         
     208                self.updateStatus() 
     209                self.sendPacketQueue() 
    208210         
    209211         
     
    367369        def sendPacketQueue(self): 
    368370                 
    369                 while (len(self.packet_queue) > 0): 
    370                          
    371                         packet = self.packet_queue[0] 
    372                         del self.packet_queue[0] 
    373                          
    374                         for connection in self.connections: 
    375                                  
    376                                 if connection.state() == QtNetwork.QAbstractSocket.ConnectedState: 
    377                                          
    378                                         self.sendResponse(connection, packet) 
     371                if self.connections != []: 
     372                         
     373                        while (len(self.packet_queue) > 0): 
     374                                 
     375                                packet = self.packet_queue[0] 
     376                                del self.packet_queue[0] 
     377                                 
     378                                for connection in self.connections: 
     379                                         
     380                                        if connection.state() == QtNetwork.QAbstractSocket.ConnectedState: 
     381                                                 
     382                                                self.sendResponse(connection, packet) 
    379383         
    380384         
     
    558562                else: 
    559563                         
    560                         if self.protocol.data_packet != {'eegPower': {}, 'eSense': {}}: 
     564                        #if self.protocol.data_packet != {'eegPower': {}, 'eSense': {}}: 
     565                        if self.protocol.data_packet != {}: 
    561566                                self.packet_queue.append(self.protocol.data_packet) 
     567                                 
     568                                if (self.parent != None): 
     569                                                self.parent.processPacketThinkGear(self.protocol.data_packet) 
    562570         
    563571         
     
    576584        def exitThread(self, callThreadQuit=True): 
    577585                 
    578                 self.updateTimer.stop() 
     586                try: 
     587                        self.updateTimer.stop() 
     588                except: 
     589                        pass 
    579590                 
    580591                if self.serial_device != None: 
Note: See TracChangeset for help on using the changeset viewer.