r4539 - developers/john_lee/pyfso
john_lee at docs.openmoko.org
john_lee at docs.openmoko.org
Fri Jul 18 19:20:29 CEST 2008
Author: john_lee
Date: 2008-07-18 19:20:29 +0200 (Fri, 18 Jul 2008)
New Revision: 4539
Modified:
developers/john_lee/pyfso/__init__.py
developers/john_lee/pyfso/accelerometer.py
developers/john_lee/pyfso/dialer.py
developers/john_lee/pyfso/fso_backend.py
developers/john_lee/pyfso/general.py
Log:
modified to receive accelerometer signal from fso
* many other minor changes.
Modified: developers/john_lee/pyfso/__init__.py
===================================================================
--- developers/john_lee/pyfso/__init__.py 2008-07-18 17:20:17 UTC (rev 4538)
+++ developers/john_lee/pyfso/__init__.py 2008-07-18 17:20:29 UTC (rev 4539)
@@ -4,7 +4,6 @@
(C) 2008 Openmoko, Inc.
GPLv2 or later
"""
-from accelerometer import Accelerometer, MockAccelerometer, \
- InputDevAccelerometer, Gta02Accelerometer, get_xy_theta
-
+from accelerometer import MockAccelerometer, FSOAccelerometer
from dialer import Dialer, MockDialer, FSODialer
+from fso_backend import FSOObject
Modified: developers/john_lee/pyfso/accelerometer.py
===================================================================
--- developers/john_lee/pyfso/accelerometer.py 2008-07-18 17:20:17 UTC (rev 4538)
+++ developers/john_lee/pyfso/accelerometer.py 2008-07-18 17:20:29 UTC (rev 4539)
@@ -4,20 +4,30 @@
(C) 2008 Openmoko, Inc.
GPLv2 or later
"""
-from fso_backend import FSOObject
+from dbus import Interface, SystemBus
+from dbus.exceptions import DBusException
from general import Subject, DumpObserver
import math
+class MockAccelerometer(Subject):
+ """>>> m = MockAccelerometer()
+ >>> d = DumpObserver(m)
+ (0, -1000, 0) {}
+ """
+ def __init__(self, *args, **kwargs):
+ super(MockAccelerometer, self).__init__()
+
+ def attach(self, function):
+ super(MockAccelerometer, self).attach(function)
+ self._notify(0, -1000, 0)
+
+
class FSOAccelerometer(Subject):
- def __init__(self, fso_obj):
+ def __init__(self, fso):
super(FSOAccelerometer, self).__init__()
- self.fso = fso_obj
- self.fso.onAccelerometer.append(self.on_accelerometer)
+ fso.onAccelerometer.append(self._notify)
- def on_accelerometer(self, x, y, z):
- self._notify(x, y, z)
-
# shamelessly stoled from olv
def get_xy_theta(u):
"""get the angle related to (0, -1), clockwise.
@@ -41,11 +51,10 @@
doctest.testmod()
-def _test():
+def _test_fso():
from dbus.mainloop.glib import DBusGMainLoop
- fso = FSOObject()
- fso.initialize(DBusGMainLoop())
- accelerometer = FSOAccelerometer(fso)
+ from fso_backend import FSOObject
+ accelerometer = FSOAccelerometer(FSOObject(SystemBus(mainloop=DBusGMainLoop())))
DumpObserver(accelerometer)
import gobject
try:
@@ -56,4 +65,4 @@
if __name__ == '__main__':
_doctest()
- _test()
+ _test_fso()
Modified: developers/john_lee/pyfso/dialer.py
===================================================================
--- developers/john_lee/pyfso/dialer.py 2008-07-18 17:20:17 UTC (rev 4538)
+++ developers/john_lee/pyfso/dialer.py 2008-07-18 17:20:29 UTC (rev 4539)
@@ -5,8 +5,7 @@
GPLv2 or later
"""
from general import Subject
-from fso_backend import FSOObject
-from dbus import DBusException
+from dbus import DBusException, SystemBus
from threading import Timer
class Dialer(Subject):
@@ -73,38 +72,28 @@
class FSODialer(Dialer):
"""A Dialer implementation based on fso dbus API.
"""
- def __init__(self, fso_obj):
+ def __init__(self, fso):
super(FSODialer, self).__init__()
self.callid = None
self.initialized = False
self.registered = False
- self.fso = fso_obj
+ self.fso = fso
+ self.fso.onCallStatus.append(self.on_call_status)
self._set_state('release')
from threading import Thread
Thread(target=self._init).run()
def _init(self):
- if not self.fso.fullinit:
- self.fso.initialize()
- self.fso.onCallStatus.append(self.on_call_status)
- if not self._register():
- return
- self.registered = True
- # FIXME: get state from fso and set self state
- return True
-
- def _register(self):
if self.fso.gsm_network_iface.GetStatus()['registration'] == 'unregistered':
try:
self.fso.gsm_device_iface.SetAntennaPower(True)
self.fso.gsm_network_iface.Register()
print 'registered'
+ self.registered = True
except DBusException, e:
# FIXME pin number?
print e
self.registered = False
- return False
- return True
@need_registered
def dial(self, number):
@@ -124,11 +113,13 @@
self.callid = id
-def _test():
+def _test_fso():
from dbus.mainloop.glib import DBusGMainLoop
- fso = FSOObject()
- fso.initialize(DBusGMainLoop())
- dialer = FSODialer(fso)
+ from fso_backend import FSOObject
+ try:
+ dialer = FSODialer(FSOObject(SystemBus(mainloop=DBusGMainLoop())))
+ except DBusException:
+ return
import gobject
try:
gobject.MainLoop().run()
@@ -136,4 +127,4 @@
return
if __name__ == "__main__":
- _test()
+ _test_fso()
Modified: developers/john_lee/pyfso/fso_backend.py
===================================================================
--- developers/john_lee/pyfso/fso_backend.py 2008-07-18 17:20:17 UTC (rev 4538)
+++ developers/john_lee/pyfso/fso_backend.py 2008-07-18 17:20:29 UTC (rev 4539)
@@ -1,5 +1,5 @@
"""
-
+Originated from zhone
(C) 2008 John Lee <john_lee at openmoko.com>
(C) 2008 Openmoko, Inc.
GPLv2 or later
@@ -11,7 +11,8 @@
class FSOObject(object):
"""Based on the code from zhone.
"""
- def __init__(self):
+ def __init__(self, bus):
+
self.objects = {}
self.onResourceChanged = []
self.onCallStatus = []
@@ -20,118 +21,101 @@
self.onSignalStrength = []
self.onAccelerometer = []
self.ignoreSuspend = False
+ self.bus = bus
- self.framework_obj = None
- self.gsm_device_obj = None
- self.gsm_device_iface = None
+ self.fw_iface = None
self.usage_iface = None
+ self.gsm_device_iface = None
+ self.gsm_sim_iface = None
+ self.gsm_network_iface = None
+ self.gsm_call_iface = None
+ self.gsm_test_iface = None
self.device_iface = None
self.device_power_iface = None
- self.idlenotifier_obj = None
self.idlenotifier_iface = None
- self.inputnotifier_obj = None
self.inputnotifier_iface = None
- self.display_obj = None
self.display_iface = None
+ self.accelerometer_iface = None
- self.fullinit = False
+ # Framework -- at least we should have this. if not, let exception raise.
+ fw_obj = self.bus.get_object('org.freesmartphone.frameworkd',
+ '/org/freesmartphone/Framework')
+ self.fw_iface = Interface(fw_obj, "org.freesmartphone.Objects")
- def tryGetProxy( self, busname, objname ):
- obj = None
- try:
- obj = self.objects[ "%s:%s" % ( busname, objname ) ]
- except KeyError:
- try:
- obj = self.bus.get_object( busname, objname )
- except DBusException, e:
- print "could not create proxy for %s:%s" % ( busname, objname ), e
- else:
- self.objects[ "%s:%s" % ( busname, objname ) ] = obj
- return obj
-
- def initialize(self, mainloop):
- if self.fullinit:
- return True
- try:
- self.bus = SystemBus( mainloop=mainloop )
- except DBusException, e:
- print "could not connect to dbus_object system bus:", e
- return False
-
- # Framework
- fw_obj = self.tryGetProxy( 'org.freesmartphone.frameworkd', '/org/freesmartphone/Framework' )
- if fw_obj is None:
- print ( "could not connect to org.freesmartphone.frameworkd -- is the framework daemon started?" )
- return False
- else:
- self.fw = Interface( fw_obj, "org.freesmartphone.Objects" )
- failcount = 0
-
# Usage
- self.usage_obj = self.tryGetProxy( 'org.freesmartphone.ousaged', '/org/freesmartphone/Usage' )
- if ( self.usage_obj is not None ) and ( self.usage_iface is None ):
- self.usage_iface = Interface(self.usage_obj, 'org.freesmartphone.Usage')
- self.usage_iface.connect_to_signal( "ResourceChanged", self.cbResourceChanged )
+ usage_obj = self.tryGetProxy('org.freesmartphone.ousaged',
+ '/org/freesmartphone/Usage')
+ if usage_obj:
+ print 'creating usage interface',
+ self.usage_iface = Interface(usage_obj, 'org.freesmartphone.Usage')
+ self.usage_iface.connect_to_signal("ResourceChanged", self.cbResourceChanged)
self.usage_iface.RequestResource("GSM")
- if self.usage_obj is None:
- failcount += 1
- else:
- print "usage ok", self.usage_iface
+ print 'ok'
# Phone
- self.gsm_device_obj = self.tryGetProxy( 'org.freesmartphone.ogpsd', '/org/freesmartphone/GSM/Device' )
- print self.gsm_device_obj
-
- if ( self.gsm_device_obj is not None ) and ( self.gsm_device_iface is None ):
- print "creating gsm interfaces"
- self.gsm_device_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Device')
- self.gsm_sim_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.SIM')
- self.gsm_network_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Network')
- self.gsm_call_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Call')
- self.gsm_test_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Test')
- self.gsm_call_iface.connect_to_signal( "CallStatus", self.cbCallStatus )
- self.gsm_network_iface.connect_to_signal( "Status", self.cbNetworkStatus )
+ gsm_device_obj = self.tryGetProxy('org.freesmartphone.ogsmd',
+ '/org/freesmartphone/GSM/Device')
+ if gsm_device_obj:
+ print "creating gsm interfaces",
+ self.gsm_device_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Device')
+ self.gsm_sim_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.SIM')
+ self.gsm_network_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Network')
+ self.gsm_call_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Call')
+ self.gsm_test_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Test')
+ self.gsm_call_iface.connect_to_signal("CallStatus", self.cbCallStatus)
+ self.gsm_network_iface.connect_to_signal("Status", self.cbNetworkStatus)
self.gsm_network_iface.connect_to_signal('SignalStrength', self.cbSignalStrength)
- if self.gsm_device_obj is None:
- failcount += 1
- else:
- print "gsm ok", self.gsm_network_iface
+ print 'ok'
- self.device_obj = self.tryGetProxy( 'org.freesmartphone.odeviced', '/org/freesmartphone/Device' )
- if ( self.device_obj is not None ) and ( self.device_iface is None ):
- self.device_iface = Interface( self.device_obj, 'org.freesmartphone.Device' )
+ device_obj = self.tryGetProxy('org.freesmartphone.odeviced',
+ '/org/freesmartphone/Device')
+ if device_obj:
+ self.device_iface = Interface(device_obj, 'org.freesmartphone.Device')
+ print 'device interface ok'
- self.device_power_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.PowerSupply" )[0] )
- self.device_power_iface = Interface(self.device_power_obj, 'org.freesmartphone.Device.PowerSupply')
+ self.device_power_iface = self.tryGetFirstInterface(
+ "org.freesmartphone.odeviced", "org.freesmartphone.Device.PowerSupply")
- self.idlenotifier_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.IdleNotifier" )[0] )
+ self.idlenotifier_iface = self.tryGetFirstInterface(
+ "org.freesmartphone.odeviced", "org.freesmartphone.Device.IdleNotifier")
+ if self.idlenotifier_iface:
+ self.idlenotifier_iface.connect_to_signal("State", self.cbIdleStateChanged)
- self.idlenotifier_iface = Interface( self.idlenotifier_obj, "org.freesmartphone.Device.IdleNotifier" )
- self.idlenotifier_iface.connect_to_signal( "State", self.cbIdleStateChanged )
+ inputnotifier_obj = self.tryGetProxy("org.freesmartphone.odeviced", "/org/freesmartphone/Device/Input")
+ if inputnotifier_obj:
+ self.inputnotifier_iface = Interface(inputnotifier_obj, "org.freesmartphone.Device.Input")
+ self.inputnotifier_iface.connect_to_signal("Event", self.cbEvent)
- self.inputnotifier_obj = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/Input" )
- self.inputnotifier_iface = Interface( self.inputnotifier_obj, "org.freesmartphone.Device.Input" )
- self.inputnotifier_iface.connect_to_signal( "Event", self.cbEvent )
+ self.display_iface = self.tryGetFirstInterface(
+ "org.freesmartphone.odeviced", "org.freesmartphone.Device.Display")
+ if self.display_iface:
+ self.display_iface.SetBrightness(90)
- print "displays:", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.Display" )
- self.display_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.Display" )[0] )
- if self.display_obj is not None:
- self.display_iface = Interface( self.display_obj, "org.freesmartphone.Device.Display" )
- self.display_iface.SetBrightness( 90 )
-
- self.accelerometer_obj = self.bus.get_object("org.freesmartphone.odeviced", "/org/freesmartphone/Device/Accelerometer")
- self.accelerometer_iface = Interface(self.accelerometer_obj, "org.freesmartphone.Device.Accelerometer")
+ accelerometer_obj = self.tryGetProxy(
+ "org.freesmartphone.odeviced", "/org/freesmartphone/Device/Accelerometer")
+ if accelerometer_obj:
+ self.accelerometer_iface = Interface(accelerometer_obj, "org.freesmartphone.Device.Accelerometer")
self.accelerometer_iface.connect_to_signal("Event", self.cbAccelerometer)
- if self.device_obj is None:
- failcount += 1
- else:
- print "device ok", self.device_iface
+ def tryGetFirstInterface(self, busname, interface):
+ if self.fw_iface:
+ list = self.fw_iface.ListObjectsByInterface(interface)
+ if list and (len(list) > 1):
+ obj = self.tryGetProxy(busname, list[0])
+ return Interface(obj, interface)
- print "failcount=", failcount
- if failcount == 0:
- self.fullinit = True
- return self.fullinit
+ def tryGetProxy( self, busname, objname ):
+ obj = None
+ try:
+ obj = self.objects[ "%s:%s" % ( busname, objname ) ]
+ except KeyError:
+ try:
+ obj = self.bus.get_object( busname, objname )
+ except DBusException, e:
+ print "could not create proxy for %s:%s" % ( busname, objname ), e
+ else:
+ self.objects[ "%s:%s" % ( busname, objname ) ] = obj
+ return obj
def cbResourceChanged( self, resourcename ):
for cb in self.onResourceChanged:
@@ -193,8 +177,7 @@
def _test():
from dbus.mainloop.glib import DBusGMainLoop
import sys
- fso = FSOObject()
- fso.initialize(DBusGMainLoop())
+ fso = FSOObject(SystemBus(mainloop=DBusGMainLoop()))
import gobject
try:
gobject.MainLoop().run()
Modified: developers/john_lee/pyfso/general.py
===================================================================
--- developers/john_lee/pyfso/general.py 2008-07-18 17:20:17 UTC (rev 4538)
+++ developers/john_lee/pyfso/general.py 2008-07-18 17:20:29 UTC (rev 4539)
@@ -1,5 +1,4 @@
"""
-
(C) 2008 John Lee <john_lee at openmoko.com>
(C) 2008 Openmoko, Inc.
GPLv2 or later
@@ -15,22 +14,22 @@
self._observers_lock = RLock()
self._observers = []
- def attach(self, observer):
+ def attach(self, function):
"""attach as an observer
"""
with self._observers_lock:
- self._observers.append(observer)
+ self._observers.append(function)
- def detach(self, observer):
+ def detach(self, function):
"""detach from observers
"""
with self._observers_lock:
- self._observers.remove(observer)
+ self._observers.remove(function)
def _notify(self, *args, **kwargs):
with self._observers_lock:
- for o in self._observers:
- o.update(*args, **kwargs)
+ for f in self._observers:
+ f(*args, **kwargs)
class Singleton(object):
@@ -53,8 +52,14 @@
class DumpObserver(object):
+ """ dump everything the subject notifies.
+ >>> s = Subject()
+ >>> d = DumpObserver(s)
+ >>> s._notify('test')
+ ('test',) {}
+ """
def __init__(self, subject):
- subject.attach(self)
+ subject.attach(self.update)
def update(self, *args, **kwargs):
print args, kwargs
More information about the commitlog
mailing list