[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, debian, updated. upstream/0.9.5.5-717-g0f98819

Felix Huber felix.huber at schyf.de
Sat Aug 6 08:20:06 UTC 2011


The following commit has been merged in the debian branch:
commit 0dfe1a02c28f5c601b147762ff10d25c86e5c1cf
Author: Felix Huber <felix.huber at schyf.de>
Date:   Sun Sep 12 11:45:44 2010 +0200

    ophoned: optimise bluetooth headset funtions

diff --git a/framework/subsystems/ophoned/headset.py b/framework/subsystems/ophoned/headset.py
index 80f5517..c59173e 100644
--- a/framework/subsystems/ophoned/headset.py
+++ b/framework/subsystems/ophoned/headset.py
@@ -30,6 +30,7 @@ class HeadsetManager( object ):
         self._onAnswerRequested = onAnswerRequested
         self._matchAnswerRequested = None
         self._onConnectionStatus = onConnectionStatus
+        self._matchDisconnected = None
         self.address = None
         self.pcm_device = "hw:0,1"
         self.pcm_play = None
@@ -37,7 +38,6 @@ class HeadsetManager( object ):
         self.connected = False
         self.playing = False
         self._kickPCM()
-        self.monitor = gobject.timeout_add_seconds( 10, self._handleMonitorTimeout )
         usage = self.bus.get_object( 'org.freesmartphone.ousaged', '/org/freesmartphone/Usage', follow_name_owner_changes=True )
         self.usageiface = dbus.Interface( usage, 'org.freesmartphone.Usage' )
         logger.info( "usage ok: %s" % self.usageiface )
@@ -102,15 +102,21 @@ class HeadsetManager( object ):
         )
         try:
             self.bluez_device_headset.Connect()
-            if self._onAnswerRequested:
-                self._matchAnswerRequested = self.bluez_device_headset.connect_to_signal(
-                    'AnswerRequested', self._onAnswerRequested
-                )
         except dbus.exceptions.DBusException, e:
             if e.get_dbus_name() == "org.bluez.Error.AlreadyConnected":
                 pass
             else:
                 raise
+        if self._onAnswerRequested:
+            self._matchAnswerRequested = self.bluez_device_headset.connect_to_signal(
+                'AnswerRequested', self._onAnswerRequested
+            )
+        self._matchDisconnected = self.bluez_device_headset.connect_to_signal(
+                'Disconnected', self._onDisconnected
+        ) 
+        self.connected = True                                                                                               
+        if self._onConnectionStatus:                                                                                        
+            self._onConnectionStatus( self.connected )
 
     def _startBT( self ):
         try:
@@ -128,47 +134,55 @@ class HeadsetManager( object ):
         if self._matchAnswerRequested:
             self._matchAnswerRequested.remove()
             self._matchAnswerRequested = None
+        if self._matchDisconnected:                                                                                             
+            self._matchDisconnected.remove()                                                                                     
+            self._matchDisconnected = None 
         # if disconnect fails for any reason, we
         # still cancel all BT, such that the audio
         # will get routed back to the headset
         try:
-           self.bluez_device_headset.Disconnect()
+            self.bluez_device_headset.Disconnect()
         except:
-           pass
+            pass
         self.bluez_device_headset = None
         self.bluez_adapter = None
         self.bluez_manager = None
+        self.connected = False
+        if self._onConnectionStatus:                                           
+            self._onConnectionStatus( self.connected )
+
+    def _onDisconnected( self ):
+        self._disconnectBT()
+        logger.info( "got disconnected" )
+        if self.address:
+           self.monitor = gobject.timeout_add_seconds( 10, self._handleMonitorTimeout )
 
     def _updateConnected( self ):
         if self.address and not self.connected:
             self._connectBT()
-            self.connected = True
-            if self._onConnectionStatus:
-                self._onConnectionStatus( self.connected )
 
     def _handleMonitorTimeout( self ):
         try:
             self._updateConnected()
         except:
             logger.debug( "_handleMonitorTimeout failed:", exc_info=True )
-        return True
+        if self.address and not self.connected:
+           return True
+        else:
+           return False
 
     def setAddress( self, address ):
         if self.address != address:
             if self.connected:
                 self.setPlaying( False )
                 self._disconnectBT()
-                self.connected = False
-                if self._onConnectionStatus:
-                    self._onConnectionStatus( self.connected )
         if self.address and not address:
             self.usageiface.ReleaseResource(
                 "Bluetooth",
                 reply_handler=self.cbReleaseReply,
                 error_handler=self.cbReleaseError,
             )
-        self.address = address
-        if self.address:
+        if not self.address and address:
             try:
                 self.usageiface.RequestResource(
                     "Bluetooth",
@@ -177,6 +191,8 @@ class HeadsetManager( object ):
                 )
             except:
                 pass
+            self.monitor = gobject.timeout_add_seconds( 10, self._handleMonitorTimeout )
+        self.address = address
 
     def cbRequestReply( self ):
         logger.info( "Requested Bluetooth" )

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list