[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:19:37 UTC 2011


The following commit has been merged in the debian branch:
commit f7c479964dd4e2deee10646cb6be96642098ed26
Author: Felix Huber <felix.huber at schyf.de>
Date:   Tue Mar 9 23:14:04 2010 +0100

    Fixed Implement HFP pbook retrieval, call indication and bluetooth autostart

diff --git a/etc/freesmartphone/oevents/rules.yaml b/etc/freesmartphone/oevents/rules.yaml
index 7431d57..21ec5e3 100644
--- a/etc/freesmartphone/oevents/rules.yaml
+++ b/etc/freesmartphone/oevents/rules.yaml
@@ -43,11 +43,19 @@
 
 -
     while: CallListContains("incoming")
-    filters: Not(CallListContains("active"))
+    filters:
+             - Not(CallListContains("active"))
+             - Not(BTHeadsetIsConnected())
     actions:
              - RingTone()
              - SetDisplayBrightness("0", 90)
-
+-
+    while: CallListContains("incoming")
+    filters:
+             - Not(CallListContains("active"))
+             - BTHeadsetIsConnected()
+    actions:
+             - SetDisplayBrightness("0", 90)
 -
     while: CallStatus()
     filters: Not(HasAttr(status, "release"))
diff --git a/framework/subsystems/ogsmd/device.py b/framework/subsystems/ogsmd/device.py
index f76d3e8..a06802f 100644
--- a/framework/subsystems/ogsmd/device.py
+++ b/framework/subsystems/ogsmd/device.py
@@ -315,11 +315,17 @@ class Device( resource.Resource ):
     def GetPhonebookInfo( self, category, dbus_ok, dbus_error ):
         mediator.SimGetPhonebookInfo( self, dbus_ok, dbus_error, category=category )
 
-    @dbus.service.method( DBUS_INTERFACE_SIM, "s", "a(iss)",
+    @dbus.service.method( DBUS_INTERFACE_SIM, "s", "ii",
                           async_callbacks=( "dbus_ok", "dbus_error" ) )
     @resource.checkedmethod
-    def RetrievePhonebook( self, category, dbus_ok, dbus_error ):
-        mediator.SimRetrievePhonebook( self, dbus_ok, dbus_error, category=category )
+    def GetPhonebookStorageInfo( self, category, dbus_ok, dbus_error ):
+        mediator.SimGetPhonebookStorageInfo( self, dbus_ok, dbus_error, category=category )
+
+    @dbus.service.method( DBUS_INTERFACE_SIM, "sii", "a(iss)",
+                          async_callbacks=( "dbus_ok", "dbus_error" ) )
+    @resource.checkedmethod
+    def RetrievePhonebook( self, category, indexFirst, indexLast, dbus_ok, dbus_error ):
+        mediator.SimRetrievePhonebook( self, dbus_ok, dbus_error, category=category, indexFirst=indexFirst, indexLast=indexLast )
 
     @dbus.service.method( DBUS_INTERFACE_SIM, "si", "",
                           async_callbacks=( "dbus_ok", "dbus_error" ) )
diff --git a/framework/subsystems/ogsmd/modems/abstract/mediator.py b/framework/subsystems/ogsmd/modems/abstract/mediator.py
index 4fce25e..c4fb091 100644
--- a/framework/subsystems/ogsmd/modems/abstract/mediator.py
+++ b/framework/subsystems/ogsmd/modems/abstract/mediator.py
@@ -857,6 +857,28 @@ class SimGetPhonebookInfo( SimMediator ):
             self._ok( result )
 
 #=========================================================================#
+class SimGetPhonebookStorageInfo( SimMediator ):
+#=========================================================================#
+    def trigger( self ):
+        charset = currentModem()._charsets["DEFAULT"]
+        try:
+            self.pbcategory = const.PHONEBOOK_CATEGORY[self.category]
+        except KeyError:
+            self._error( DBusError.InvalidParameter( "valid categories are %s" % const.PHONEBOOK_CATEGORY.keys() ) )
+        else:
+            self._commchannel.enqueue( '+CPBS="%s";+CPBS?' % self.pbcategory.encode(charset), self.responseFromChannel, self.errorFromChannel )
+
+    def responseFromChannel( self, request, response ):
+        if response[-1] != "OK":
+            SimMediator.responseFromChannel( self, request, response )
+        else:
+            name, used, total  = safesplit( self._rightHandSide( response[0] ), "," )
+            used = int( used )
+            total = int( total )
+            self._ok( used , total)
+
+
+#=========================================================================#
 class SimRetrievePhonebook( SimMediator ):
 #=========================================================================#
     def trigger( self ):
@@ -866,7 +888,12 @@ class SimRetrievePhonebook( SimMediator ):
         except KeyError:
             self._error( DBusError.InvalidParameter( "valid categories are %s" % const.PHONEBOOK_CATEGORY.keys() ) )
         else:
-            minimum, maximum = self._object.modem.phonebookIndices( self.pbcategory )
+            if self.indexFirst != -1:
+                minimum = self.indexFirst
+                maximum = self.indexLast
+            else:
+                minimum, maximum = self._object.modem.phonebookIndices( self.pbcategory )
+
             if minimum is None: # don't know yet
                 SimGetPhonebookInfo( self._object, self.tryAgain, self.reportError, category=self.category )
             else:
diff --git a/framework/subsystems/ophoned/headset.py b/framework/subsystems/ophoned/headset.py
index 7a33bf2..80f5517 100644
--- a/framework/subsystems/ophoned/headset.py
+++ b/framework/subsystems/ophoned/headset.py
@@ -34,11 +34,14 @@ class HeadsetManager( object ):
         self.pcm_device = "hw:0,1"
         self.pcm_play = None
         self.pcm_cap = None
-        self.enabled = False
         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 )
+
 
     def _kickPCM( self ):
         try:
@@ -125,23 +128,23 @@ class HeadsetManager( object ):
         if self._matchAnswerRequested:
             self._matchAnswerRequested.remove()
             self._matchAnswerRequested = None
-        self.bluez_device_headset.Disconnect()
+        # 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()
+        except:
+           pass
         self.bluez_device_headset = None
         self.bluez_adapter = None
         self.bluez_manager = None
 
     def _updateConnected( self ):
-        # FIXME: handle disappearing BT device
-        if self.enabled and not self.connected:
+        if self.address and not self.connected:
             self._connectBT()
             self.connected = True
             if self._onConnectionStatus:
                 self._onConnectionStatus( self.connected )
-        elif not self.enabled and self.connected:
-            self._disconnectBT()
-            self.connected = False
-            if self._onConnectionStatus:
-                self._onConnectionStatus( self.connected )
 
     def _handleMonitorTimeout( self ):
         try:
@@ -151,29 +154,51 @@ class HeadsetManager( object ):
         return True
 
     def setAddress( self, address ):
-        if self.enabled:
-            raise HeadsetError("Can't change address while enabled")
+        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:
+            try:
+                self.usageiface.RequestResource(
+                    "Bluetooth",
+                    reply_handler=self.cbRequestReply,
+                    error_handler=self.cbRequestError,
+                )
+            except:
+                pass
+
+    def cbRequestReply( self ):
+        logger.info( "Requested Bluetooth" )
 
-    def setEnabled( self, enabled ):
-        if not self.enabled and enabled:
-            if not self.address:
-                raise HeadsetError("Address not set")
-            self.enabled = True
-        elif self.enabled and not enabled:
-            self.setPlaying( False )
-            self.enabled = False
+    def cbRequestError( self, e ):
+        log_dbus_error( e, "error while requesting Bluetooth"  )
+        logger.info( "Requested Bluetooth with error" )
 
-    def getEnabled( self ):
-        return self.enabled
+    def cbReleaseReply( self ):
+        logger.info( "Released Bluetooth" )
+
+    def cbReleaseError( self, e ):
+        log_dbus_error( e, "error while releasing Bluetooth" )
+        logger.info( "Released Bluetooth with error" )
 
     def getConnected( self ):
         return self.connected
 
     def setPlaying( self, playing ):
         if not self.playing and playing:
-            if not self.enabled:
-                raise HeadsetError("Not enabled")
+            if not self.connected:
+                raise HeadsetError("No connected")
             self._startPCM()
             self._startBT()
             self.playing = True
@@ -188,3 +213,4 @@ class HeadsetManager( object ):
 if __name__=="__main__":
     m = HeadsetManager( dbus.SystemBus() )
 
+
diff --git a/framework/subsystems/ophoned/ophoned.py b/framework/subsystems/ophoned/ophoned.py
index 622878f..6b90255 100644
--- a/framework/subsystems/ophoned/ophoned.py
+++ b/framework/subsystems/ophoned/ophoned.py
@@ -51,19 +51,10 @@ class Phone(dbus.service.Object):
         gobject.idle_add( self.on_startup )
 
     def on_startup( self ):
-        self.bus.add_signal_receiver(
-            self.on_preferences_changed, 'Notify', 'org.freesmartphone.Preferences.Service',
-            'org.freesmartphone.opreferencesd', '/org/freesmartphone/Preferences/phone'
-        )
-
         opreferencesd = Controller.object( "/org/freesmartphone/Preferences" )
         self.preferences = opreferencesd.GetService( "phone" )
         address = self.preferences.GetValue( "bt-headset-address" )
-        enabled = self.preferences.GetValue( "bt-headset-enabled" )
         self.headset.setAddress( address )
-        if address and enabled:
-            self.headset.setEnabled( True )
-            self.BTHeadsetEnabled( True )
 
         self.bus.add_signal_receiver(
             self.on_preferences_changed, 'Notify', 'org.freesmartphone.Preferences.Service',
@@ -73,9 +64,6 @@ class Phone(dbus.service.Object):
     def on_preferences_changed (self, key, value ):
         if key == "bt-headset-address":
             self.headset.setAddress( value )
-        elif key == "bt-headset-enabled":
-            self.headset.setEnabled( value )
-            self.BTHeadsetEnabled( value )
 
     def on_resource_changed( self, resourcename, state, attributes ):
         if resourcename == "GSM":
@@ -128,10 +116,6 @@ class Phone(dbus.service.Object):
         self.headset.setPlaying( playing )
 
     @dbus.service.signal('org.freesmartphone.Phone', signature='b')
-    def BTHeadsetEnabled(self, enabled):
-        pass
-
-    @dbus.service.signal('org.freesmartphone.Phone', signature='b')
     def BTHeadsetConnected(self, connected):
         pass
 

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list