Changeset 304


Ignore:
Timestamp:
12/05/11 06:20:58 (10 years ago)
Author:
sc
Message:

Interface:

  • Fixed Bluetooth scanning for devices under recent distributions of Linux
  • added hcitoolScanForRemoteDevices
  • added hcitoolGetActiveConnections

Various:

  • Cleanup of calls to PyQt4 versus PySide? in all modules
  • Consistant passing of DEBUG value between modules
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Puzzlebox/Synapse/Client.py

    r300 r304  
    1111 
    1212__changelog__ = """\ 
    13 Last Update: 2011.10.10 
     13Last Update: 2011.12.04 
    1414""" 
    1515 
     
    2525                from PySide import QtCore, QtGui, QtNetwork 
    2626        except Exception, e: 
    27                 print "ERROR: Excetion importing PySide:", 
     27                print "ERROR: Exception importing PySide:", 
    2828                print e 
    2929                configuration.ENABLE_PYSIDE = False 
    3030        else: 
    31                 print "Using PySide module" 
     31                print "INFO: [Client] Using PySide module" 
    3232 
    3333if not configuration.ENABLE_PYSIDE: 
    34         print "Using PyQt4 module" 
     34        print "INFO: [Client] Using PyQt4 module" 
    3535        from PyQt4 import QtCore, QtGui, QtNetwork 
    3636 
     
    5454##################################################################### 
    5555 
    56 DEBUG = 2 
     56DEBUG = configuration.DEBUG 
    5757 
    5858SERVER_HOST = configuration.THINKGEAR_SERVER_HOST 
  • trunk/Puzzlebox/Synapse/Configuration.py

    r300 r304  
    88 
    99__changelog__ = """\ 
    10 Last Update: 2011.10.10 
     10Last Update: 2011.12.04 
    1111""" 
    1212 
     
    2727 
    2828ENABLE_PYSIDE = False 
     29ENABLE_HCITOOL = False 
    2930 
    3031INTERFACE_CHART_STYLES = { \ 
  • trunk/Puzzlebox/Synapse/Interface.py

    r303 r304  
    1010 
    1111__changelog__ = """\ 
    12 Last Update: 2011.11.07 
     12Last Update: 2011.12.04 
    1313""" 
    1414 
     
    2929                from PySide import QtCore, QtGui, QtNetwork 
    3030        except Exception, e: 
    31                 print "ERROR: Excetion importing PySide:", 
     31                print "ERROR: Exception importing PySide:", 
    3232                print e 
    3333                configuration.ENABLE_PYSIDE = False 
    3434        else: 
    35                 print "Using PySide module" 
     35                print "INFO: [Interface] Using PySide module" 
    3636 
    3737if not configuration.ENABLE_PYSIDE: 
    38         print "Using PyQt4 module" 
     38        print "INFO: [Interface] Using PyQt4 module" 
    3939        from PyQt4 import QtCore, QtGui, QtNetwork 
    4040 
     
    9191### GLOBALS ### 
    9292 
    93 DEBUG = 1 
     93DEBUG = configuration.DEBUG 
    9494 
    9595THINKGEAR_SERVER_HOST = configuration.THINKGEAR_SERVER_HOST 
     
    727727        ################################################################## 
    728728         
     729        def hcitoolScanForRemoteDevices(self, thinkgear_devices=[]): 
     730                 
     731                bluetooth_devices = [] 
     732                 
     733                #command = '%s scan 2> /dev/null' % PATH_TO_HCITOOL 
     734                command = '%s scan' % PATH_TO_HCITOOL 
     735                 
     736                if self.DEBUG > 1: 
     737                        print 'INFO: Calling "%s"' % command  
     738                 
     739                output = os.popen(command, 'r') 
     740                 
     741                for line in output.readlines(): 
     742                        line = line.strip() 
     743                        if line == '' or line == 'Scanning ...': 
     744                                continue 
     745                        elif self.DEBUG > 1: 
     746                                print line 
     747                        try: 
     748                                address = line.split('\t')[0] 
     749                        except: 
     750                                pass 
     751                        else: 
     752                                bluetooth_devices.append(address) 
     753                 
     754                 
     755                for address in bluetooth_devices: 
     756                         
     757                        command = '%s name %s' % (PATH_TO_HCITOOL, address) 
     758                         
     759                        if self.DEBUG: 
     760                                print 'INFO: Calling "%s"' % command 
     761                         
     762                        output = os.popen(command, 'r') 
     763                         
     764                        for line in output.readlines(): 
     765                                line = line.strip() 
     766                                if line == '': 
     767                                        continue 
     768                                elif self.DEBUG: 
     769                                        print '\t', 
     770                                        print line 
     771                                 
     772                                device_name = line.strip() 
     773                         
     774                                if ((device_name == 'MindSet' or device_name == 'MindWave Mobile') and \ 
     775                                        (address not in thinkgear_devices)): 
     776                                        thinkgear_devices.append(address) 
     777                 
     778                 
     779                return (thinkgear_devices) 
     780         
     781         
     782        ################################################################## 
     783         
     784        def hcitoolGetActiveConnections(self, thinkgear_devices=[]): 
     785                 
     786                bluetooth_devices = [] 
     787                 
     788                #command = '%s con 2> /dev/null' % PATH_TO_HCITOOL 
     789                command = '%s con' % PATH_TO_HCITOOL 
     790                 
     791                if self.DEBUG > 1: 
     792                        print 'INFO: Calling "%s"' % command  
     793                 
     794                output = os.popen(command, 'r') 
     795                 
     796                for line in output.readlines(): 
     797                        line = line.strip() 
     798                        if line == '' or line == 'Connections:': 
     799                                continue 
     800                        elif self.DEBUG > 1: 
     801                                print line 
     802                        try: 
     803                                address = line.split(' ')[2] 
     804                        except: 
     805                                pass 
     806                        else: 
     807                                bluetooth_devices.append(address) 
     808                 
     809                 
     810                for address in bluetooth_devices: 
     811                         
     812                        command = '%s name %s' % (PATH_TO_HCITOOL, address) 
     813                         
     814                        if self.DEBUG: 
     815                                print 'INFO: Calling "%s":' % command 
     816                         
     817                        output = os.popen(command, 'r') 
     818                         
     819                        for line in output.readlines(): 
     820                                line = line.strip() 
     821                                if line == '': 
     822                                        continue 
     823                                elif self.DEBUG: 
     824                                        print '\t', 
     825                                        print line 
     826                                 
     827                                device_name = line.strip() 
     828                         
     829                                if ((device_name == 'MindSet' or device_name == 'MindWave Mobile') and \ 
     830                                        (address not in thinkgear_devices)): 
     831                                        thinkgear_devices.append(address) 
     832                 
     833                 
     834                return (thinkgear_devices) 
     835         
     836         
     837        ################################################################## 
     838         
    729839        def searchForThinkGearDevices(self): 
    730840                 
     841                enable_hcitool = configuration.ENABLE_HCITOOL 
     842                 
    731843                thinkgear_devices = [] 
    732844                 
     
    739851                        bluetooth_devices = [] 
    740852                         
    741                         try: 
    742                                 bluetooth_devices = bluetooth.discover_devices( \ 
    743                                                        duration=5, \ 
    744                                                        flush_cache=True, \ 
    745                                                        lookup_names=False) 
    746                         except: 
    747                                 #command = '%s con' % PATH_TO_HCITOOL 
    748                                 command = '%s scan 2> /dev/null' % PATH_TO_HCITOOL 
     853                        if not enable_hcitool: 
    749854                                 
    750                                 if self.DEBUG > 1: 
    751                                         print 'Calling "%s":' % command  
    752                                  
    753                                 output = os.popen(command, 'r') 
    754                                  
    755                                 for line in output.readlines(): 
    756                                         print line 
    757                                         try: 
    758                                                 address = line.split(' ')[2] 
    759                                         except: 
    760                                                 pass 
    761                                         else: 
    762                                                 bluetooth_devices.append(address) 
     855                                try: 
     856                                         
     857                                        if self.DEBUG: 
     858                                                print "INFO: Searching for Bluetooth devices using PyBluez module" 
     859                                         
     860                                        bluetooth_devices = bluetooth.discover_devices( \ 
     861                                                               duration=5, \ 
     862                                                               flush_cache=True, \ 
     863                                                               lookup_names=False) 
     864                                         
     865                                        for address in bluetooth_devices: 
     866                                                device_name = bluetooth.lookup_name(address) 
     867                                                if ((device_name == 'MindSet' or device_name == 'MindWave Mobile') and \ 
     868                                                        (address not in thinkgear_devices)): 
     869                                                        thinkgear_devices.append(address) 
     870                                         
     871                                         
     872                                        # There is an issue under recent released of Linux 
     873                                        # in which already-connected Bluetooth ThinkGear devices 
     874                                        # are not appearing in a bluetooth device scan. However, 
     875                                        # using "hcitool" connected devices can be listed correctly. 
     876                                        # There does not appear to be an equivalent PyBluez feature. 
     877                                        # (http://pybluez.googlecode.com/svn/www/docs-0.7/index.html) 
     878                                         
     879                                        if thinkgear_devices == []: 
     880                                                if self.DEBUG: 
     881                                                        print "INFO: No devices found through PyBluez module. Falling back to hcitool." 
     882                                                thinkgear_devices = self.hcitoolGetActiveConnections(thinkgear_devices) 
    763883                                 
    764884                                 
    765                                 for address in bluetooth_devices: 
    766                                         device_name = bluetooth.lookup_name(address) 
    767                                         if ((device_name == 'MindSet') and \ 
    768                                                 (address not in thinkgear_devices)): 
    769                                                 thinkgear_devices.append(address) 
     885                                except Exception, e: 
     886                                        if self.DEBUG: 
     887                                                print "ERROR: Exception calling Python Bluetooth module. (Is PyBluez installed?):" 
     888                                                print e 
     889                                         
     890                                        enable_hcitool = True 
     891                         
     892                         
     893                        if enable_hcitool: 
    770894                                 
    771                                  
    772                                 if self.DEBUG > 2: 
    773                                         print "Bluetooth MindSet devices found:", 
    774                                         print thinkgear_devices 
     895                                thinkgear_devices = self.hcitoolScanForRemoteDevices(thinkgear_devices) 
     896                                thinkgear_devices = self.hcitoolGetActiveConnections(thinkgear_devices) 
     897                         
     898                         
     899                        if self.DEBUG > 2: 
     900                                print "Bluetooth ThinkGear devices found:", 
     901                                print thinkgear_devices 
    775902                 
    776903                 
  • trunk/Puzzlebox/Synapse/Interface_Design.py

    r300 r304  
    1515                from PySide import QtCore, QtGui, QtNetwork 
    1616        except Exception, e: 
    17                 print "ERROR: Excetion importing PySide:", 
     17                print "ERROR: Exception importing PySide:", 
    1818                print e 
    1919                configuration.ENABLE_PYSIDE = False 
    2020        else: 
    21                 print "Using PySide module" 
     21                print "INFO: [Interface_Design] Using PySide module" 
    2222 
    2323if not configuration.ENABLE_PYSIDE: 
    24         print "Using PyQt4 module" 
     24        print "INFO: [Interface_Design] Using PyQt4 module" 
    2525        from PyQt4 import QtCore, QtGui, QtNetwork 
    2626 
  • trunk/Puzzlebox/Synapse/Interface_Plot.py

    r300 r304  
    77 
    88__changelog__ = """\ 
    9 Last Update: 2011.10.10 
     9Last Update: 2011.12.04 
    1010""" 
    1111 
     
    2424                from PySide import QtCore, QtGui 
    2525        except: 
     26                print "ERROR: Exception importing PySide:", 
     27                print e 
    2628                configuration.ENABLE_PYSIDE = False 
    2729        else: 
    28                 print "Using PySide module" 
     30                print "INFO: [Interface_Plot] Using PySide module" 
    2931 
    3032if not configuration.ENABLE_PYSIDE: 
    31         print "Using PyQt4 module" 
     33        print "INFO: [Interface_Plot] Using PyQt4 module" 
    3234        from PyQt4 import QtCore, QtGui 
    3335 
     
    4648### GLOBALS ### 
    4749 
    48 DEBUG = 1 
     50DEBUG = configuration.DEBUG 
    4951INTERFACE_RAW_EEG_UPDATE_FREQUENCY = 512 
    5052 
  • trunk/Puzzlebox/Synapse/Protocol.py

    r300 r304  
    1111 
    1212__changelog__ = """\ 
    13 Last Update: 2011.10.10 
     13Last Update: 2011.12.04 
    1414""" 
    1515 
     
    9797                from PySide import QtCore 
    9898        except Exception, e: 
    99                 print "ERROR: Excetion importing PySide:", 
     99                print "ERROR: Exception importing PySide:", 
    100100                print e 
    101101                configuration.ENABLE_PYSIDE = False 
    102102        else: 
    103                 print "Using PySide module" 
     103                print "INFO: [Protocol] Using PySide module" 
    104104 
    105105if not configuration.ENABLE_PYSIDE: 
    106         print "Using PyQt4 module" 
     106        print "INFO: [Protocol] Using PyQt4 module" 
    107107        from PyQt4 import QtCore 
    108108 
     
    121121### GLOBALS ### 
    122122 
    123 DEBUG = 2 
     123DEBUG = configuration.DEBUG 
    124124 
    125125THINKGEAR_DEVICE_SERIAL_PORT = configuration.THINKGEAR_DEVICE_SERIAL_PORT 
  • trunk/Puzzlebox/Synapse/Server.py

    r300 r304  
    99 
    1010__changelog__ = """\ 
    11 Last Update: 2011.09.30 
     11Last Update: 2011.12.04 
    1212""" 
    1313 
     
    2727                from PySide import QtCore, QtGui, QtNetwork 
    2828        except Exception, e: 
    29                 print "ERROR: Excetion importing PySide:", 
     29                print "ERROR: Exception importing PySide:", 
    3030                print e 
    3131                configuration.ENABLE_PYSIDE = False 
    3232        else: 
    33                 print "Using PySide module" 
     33                print "INFO: [Server] Using PySide module" 
    3434 
    3535if not configuration.ENABLE_PYSIDE: 
    36         print "Using PyQt4 module" 
     36        print "INFO: [Server] Using PyQt4 module" 
    3737        from PyQt4 import QtCore, QtGui, QtNetwork 
    3838 
     
    5454### GLOBALS ### 
    5555 
    56 DEBUG = 1 
     56DEBUG = configuration.DEBUG 
    5757 
    5858COMMUNICATION_MODE = 'Emit Signal' 
     
    662662        def exitThread(self, callThreadQuit=True): 
    663663                 
    664                 try: 
    665                         self.emulationTimer.stop() 
    666                 except Exception, e: 
    667                         if self.DEBUG: 
    668                                 print "ERROR: Exception when stopping emulation timer:", 
    669                                 print e 
     664                if (self.emulate_headset_data): 
     665                        try: 
     666                                self.emulationTimer.stop() 
     667                        except Exception, e: 
     668                                if self.DEBUG: 
     669                                        print "ERROR: Exception when stopping emulation timer:", 
     670                                        print e 
    670671                 
    671672                if self.serial_device != None: 
  • trunk/synapse-gui.py

    r276 r304  
    77# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    88 
     9import Puzzlebox.Synapse.Configuration as configuration 
    910import Puzzlebox.Synapse.Interface as tgInterface 
    1011import sys 
    1112 
    12 try: 
    13         import PySide as PyQt4 
    14         from PySide import QtCore, QtGui 
    15 except: 
    16         print "Using PyQt4 module" 
     13if configuration.ENABLE_PYSIDE: 
     14        try: 
     15                import PySide as PyQt4 
     16                from PySide import QtCore, QtGui 
     17        except: 
     18                print "ERROR: Exception importing PySide:", 
     19                print e 
     20                configuration.ENABLE_PYSIDE = False 
     21        else: 
     22                print "INFO: [synapse-gui] Using PySide module" 
     23 
     24if not configuration.ENABLE_PYSIDE: 
     25        print "INFO: [synapse-gui] Using PyQt4 module" 
    1726        from PyQt4 import QtCore, QtGui 
    18 else: 
    19         print "Using PySide module" 
    2027 
    21 DEBUG = 1 
     28 
    2229log = None 
    2330app = QtGui.QApplication(sys.argv) 
    24 window = tgInterface.QtUI(log, DEBUG) 
     31window = tgInterface.QtUI(log, configuration.DEBUG) 
    2532window.show() 
    2633sys.exit(app.exec_()) 
Note: See TracChangeset for help on using the changeset viewer.