[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:36 UTC 2011
The following commit has been merged in the debian branch:
commit 4d4641684459fd64552b4fa305615717dda3f961
Author: Felix Huber <felix.huber at schyf.de>
Date: Sun Mar 7 15:16:28 2010 +0100
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..a1b5f7e 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:
+ 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..5042402 100644
--- a/framework/subsystems/ophoned/headset.py
+++ b/framework/subsystems/ophoned/headset.py
@@ -34,11 +34,13 @@ 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 +127,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 +153,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 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 cbRequestReply( self ):
+ logger.info( "Requested Bluetooth" )
+
+ def cbRequestError( self, e ):
+ log_dbus_error( e, "error while requesting Bluetooth" )
+ logger.info( "Requested Bluetooth with error" )
+
+ def cbReleaseReply( self ):
+ logger.info( "Released Bluetooth" )
- def getEnabled( self ):
- return self.enabled
+ 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
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