Changeset 4539


Ignore:
Timestamp:
07/18/08 19:20:29 (5 years ago)
Author:
john_lee
Message:

modified to receive accelerometer signal from fso

  • many other minor changes.
Location:
developers/john_lee/pyfso
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • developers/john_lee/pyfso/__init__.py

    r4537 r4539  
    55GPLv2 or later 
    66""" 
    7 from accelerometer import Accelerometer, MockAccelerometer, \ 
    8     InputDevAccelerometer, Gta02Accelerometer, get_xy_theta 
    9  
     7from accelerometer import MockAccelerometer, FSOAccelerometer 
    108from dialer import Dialer, MockDialer, FSODialer 
     9from fso_backend import FSOObject 
  • developers/john_lee/pyfso/accelerometer.py

    r4537 r4539  
    55GPLv2 or later 
    66""" 
    7 from fso_backend import FSOObject 
     7from dbus import Interface, SystemBus 
     8from dbus.exceptions import DBusException 
    89from general import Subject, DumpObserver 
    910import math 
    1011 
     12class MockAccelerometer(Subject): 
     13    """>>> m = MockAccelerometer() 
     14    >>> d = DumpObserver(m) 
     15    (0, -1000, 0) {} 
     16    """ 
     17    def __init__(self, *args, **kwargs): 
     18        super(MockAccelerometer, self).__init__() 
     19 
     20    def attach(self, function): 
     21        super(MockAccelerometer, self).attach(function) 
     22        self._notify(0, -1000, 0) 
     23 
     24 
    1125class FSOAccelerometer(Subject): 
    12     def __init__(self, fso_obj): 
     26    def __init__(self, fso): 
    1327        super(FSOAccelerometer, self).__init__() 
    14         self.fso = fso_obj 
    15         self.fso.onAccelerometer.append(self.on_accelerometer) 
    16  
    17     def on_accelerometer(self, x, y, z): 
    18         self._notify(x, y, z) 
     28        fso.onAccelerometer.append(self._notify) 
    1929 
    2030 
     
    4252 
    4353 
    44 def _test(): 
     54def _test_fso(): 
    4555    from dbus.mainloop.glib import DBusGMainLoop 
    46     fso = FSOObject() 
    47     fso.initialize(DBusGMainLoop()) 
    48     accelerometer = FSOAccelerometer(fso) 
     56    from fso_backend import FSOObject 
     57    accelerometer = FSOAccelerometer(FSOObject(SystemBus(mainloop=DBusGMainLoop()))) 
    4958    DumpObserver(accelerometer) 
    5059    import gobject 
     
    5766if __name__ == '__main__': 
    5867    _doctest() 
    59     _test() 
     68    _test_fso() 
  • developers/john_lee/pyfso/dialer.py

    r4537 r4539  
    66""" 
    77from general import Subject 
    8 from fso_backend import FSOObject 
    9 from dbus import DBusException 
     8from dbus import DBusException, SystemBus 
    109from threading import Timer 
    1110 
     
    7473    """A Dialer implementation based on fso dbus API. 
    7574    """ 
    76     def __init__(self, fso_obj): 
     75    def __init__(self, fso): 
    7776        super(FSODialer, self).__init__() 
    7877        self.callid = None 
    7978        self.initialized = False 
    8079        self.registered = False 
    81         self.fso = fso_obj 
     80        self.fso = fso 
     81        self.fso.onCallStatus.append(self.on_call_status) 
    8282        self._set_state('release') 
    8383        from threading import Thread 
     
    8585 
    8686    def _init(self): 
    87         if not self.fso.fullinit: 
    88             self.fso.initialize() 
    89         self.fso.onCallStatus.append(self.on_call_status) 
    90         if not self._register(): 
    91             return 
    92         self.registered = True 
    93         # FIXME: get state from fso and set self state 
    94         return True 
    95  
    96     def _register(self): 
    9787        if self.fso.gsm_network_iface.GetStatus()['registration'] == 'unregistered': 
    9888            try: 
     
    10090                self.fso.gsm_network_iface.Register() 
    10191                print 'registered' 
     92                self.registered = True 
    10293            except DBusException, e: 
    10394                # FIXME pin number? 
    10495                print e 
    10596                self.registered = False 
    106                 return False 
    107         return True 
    10897 
    10998    @need_registered 
     
    125114 
    126115 
    127 def _test(): 
     116def _test_fso(): 
    128117    from dbus.mainloop.glib import DBusGMainLoop 
    129     fso = FSOObject() 
    130     fso.initialize(DBusGMainLoop()) 
    131     dialer = FSODialer(fso) 
     118    from fso_backend import FSOObject 
     119    try: 
     120        dialer = FSODialer(FSOObject(SystemBus(mainloop=DBusGMainLoop()))) 
     121    except DBusException: 
     122        return 
    132123    import gobject 
    133124    try: 
     
    137128 
    138129if __name__ == "__main__": 
    139     _test() 
     130    _test_fso() 
  • developers/john_lee/pyfso/fso_backend.py

    r4537 r4539  
    11""" 
    2  
     2Originated from zhone 
    33(C) 2008 John Lee <john_lee@openmoko.com> 
    44(C) 2008 Openmoko, Inc. 
     
    1212    """Based on the code from zhone. 
    1313    """ 
    14     def __init__(self): 
     14    def __init__(self, bus): 
     15 
    1516        self.objects = {} 
    1617        self.onResourceChanged = [] 
     
    2122        self.onAccelerometer = [] 
    2223        self.ignoreSuspend = False 
     24        self.bus = bus 
    2325 
    24         self.framework_obj = None 
    25         self.gsm_device_obj = None 
     26        self.fw_iface = None 
     27        self.usage_iface = None 
    2628        self.gsm_device_iface = None 
    27         self.usage_iface = None 
     29        self.gsm_sim_iface = None 
     30        self.gsm_network_iface = None 
     31        self.gsm_call_iface = None 
     32        self.gsm_test_iface = None 
    2833        self.device_iface = None 
    2934        self.device_power_iface = None 
    30         self.idlenotifier_obj = None 
    3135        self.idlenotifier_iface = None 
    32         self.inputnotifier_obj = None 
    3336        self.inputnotifier_iface = None 
    34         self.display_obj = None 
    3537        self.display_iface = None 
     38        self.accelerometer_iface = None 
    3639 
    37         self.fullinit = False 
     40        # Framework -- at least we should have this.  if not, let exception raise. 
     41        fw_obj = self.bus.get_object('org.freesmartphone.frameworkd', 
     42                                     '/org/freesmartphone/Framework') 
     43        self.fw_iface = Interface(fw_obj, "org.freesmartphone.Objects") 
     44 
     45        # Usage 
     46        usage_obj = self.tryGetProxy('org.freesmartphone.ousaged', 
     47                                          '/org/freesmartphone/Usage') 
     48        if usage_obj: 
     49            print 'creating usage interface', 
     50            self.usage_iface = Interface(usage_obj, 'org.freesmartphone.Usage') 
     51            self.usage_iface.connect_to_signal("ResourceChanged", self.cbResourceChanged) 
     52            self.usage_iface.RequestResource("GSM") 
     53            print 'ok' 
     54 
     55        # Phone 
     56        gsm_device_obj = self.tryGetProxy('org.freesmartphone.ogsmd', 
     57                                          '/org/freesmartphone/GSM/Device') 
     58        if gsm_device_obj: 
     59            print "creating gsm interfaces", 
     60            self.gsm_device_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Device') 
     61            self.gsm_sim_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.SIM') 
     62            self.gsm_network_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Network') 
     63            self.gsm_call_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Call') 
     64            self.gsm_test_iface = Interface(gsm_device_obj, 'org.freesmartphone.GSM.Test') 
     65            self.gsm_call_iface.connect_to_signal("CallStatus", self.cbCallStatus) 
     66            self.gsm_network_iface.connect_to_signal("Status", self.cbNetworkStatus) 
     67            self.gsm_network_iface.connect_to_signal('SignalStrength', self.cbSignalStrength) 
     68            print 'ok' 
     69 
     70        device_obj = self.tryGetProxy('org.freesmartphone.odeviced', 
     71                                      '/org/freesmartphone/Device') 
     72        if device_obj: 
     73            self.device_iface = Interface(device_obj, 'org.freesmartphone.Device') 
     74            print 'device interface ok' 
     75 
     76        self.device_power_iface = self.tryGetFirstInterface( 
     77            "org.freesmartphone.odeviced", "org.freesmartphone.Device.PowerSupply") 
     78 
     79        self.idlenotifier_iface = self.tryGetFirstInterface( 
     80            "org.freesmartphone.odeviced", "org.freesmartphone.Device.IdleNotifier") 
     81        if self.idlenotifier_iface: 
     82            self.idlenotifier_iface.connect_to_signal("State", self.cbIdleStateChanged) 
     83 
     84        inputnotifier_obj = self.tryGetProxy("org.freesmartphone.odeviced", "/org/freesmartphone/Device/Input") 
     85        if inputnotifier_obj: 
     86            self.inputnotifier_iface = Interface(inputnotifier_obj, "org.freesmartphone.Device.Input") 
     87            self.inputnotifier_iface.connect_to_signal("Event", self.cbEvent) 
     88 
     89        self.display_iface = self.tryGetFirstInterface( 
     90            "org.freesmartphone.odeviced", "org.freesmartphone.Device.Display") 
     91        if self.display_iface: 
     92            self.display_iface.SetBrightness(90) 
     93 
     94        accelerometer_obj = self.tryGetProxy( 
     95            "org.freesmartphone.odeviced", "/org/freesmartphone/Device/Accelerometer") 
     96        if accelerometer_obj: 
     97            self.accelerometer_iface = Interface(accelerometer_obj, "org.freesmartphone.Device.Accelerometer") 
     98            self.accelerometer_iface.connect_to_signal("Event", self.cbAccelerometer) 
     99 
     100    def tryGetFirstInterface(self, busname, interface): 
     101        if self.fw_iface: 
     102            list = self.fw_iface.ListObjectsByInterface(interface) 
     103            if list and (len(list) > 1): 
     104                obj = self.tryGetProxy(busname, list[0]) 
     105                return Interface(obj, interface) 
    38106 
    39107    def tryGetProxy( self, busname, objname ): 
     
    49117                self.objects[ "%s:%s" % ( busname, objname ) ] = obj 
    50118        return obj 
    51  
    52     def initialize(self, mainloop): 
    53         if self.fullinit: 
    54             return True 
    55         try: 
    56             self.bus = SystemBus( mainloop=mainloop ) 
    57         except DBusException, e: 
    58             print "could not connect to dbus_object system bus:", e 
    59             return False 
    60  
    61         # Framework 
    62         fw_obj = self.tryGetProxy( 'org.freesmartphone.frameworkd', '/org/freesmartphone/Framework' ) 
    63         if fw_obj is None: 
    64             print ( "could not connect to org.freesmartphone.frameworkd -- is the framework daemon started?" ) 
    65             return False 
    66         else: 
    67             self.fw = Interface( fw_obj, "org.freesmartphone.Objects" ) 
    68         failcount = 0 
    69  
    70         # Usage 
    71         self.usage_obj = self.tryGetProxy( 'org.freesmartphone.ousaged', '/org/freesmartphone/Usage' ) 
    72         if ( self.usage_obj is not None ) and ( self.usage_iface is None ): 
    73             self.usage_iface = Interface(self.usage_obj, 'org.freesmartphone.Usage') 
    74             self.usage_iface.connect_to_signal( "ResourceChanged", self.cbResourceChanged ) 
    75             self.usage_iface.RequestResource("GSM") 
    76         if self.usage_obj is None: 
    77             failcount += 1 
    78         else: 
    79             print "usage ok", self.usage_iface 
    80  
    81         # Phone 
    82         self.gsm_device_obj = self.tryGetProxy( 'org.freesmartphone.ogpsd', '/org/freesmartphone/GSM/Device' ) 
    83         print self.gsm_device_obj 
    84  
    85         if ( self.gsm_device_obj is not None ) and ( self.gsm_device_iface is None ): 
    86             print "creating gsm interfaces" 
    87             self.gsm_device_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Device') 
    88             self.gsm_sim_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.SIM') 
    89             self.gsm_network_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Network') 
    90             self.gsm_call_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Call') 
    91             self.gsm_test_iface = Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Test') 
    92             self.gsm_call_iface.connect_to_signal( "CallStatus", self.cbCallStatus ) 
    93             self.gsm_network_iface.connect_to_signal( "Status", self.cbNetworkStatus ) 
    94             self.gsm_network_iface.connect_to_signal('SignalStrength', self.cbSignalStrength) 
    95         if self.gsm_device_obj is None: 
    96             failcount += 1 
    97         else: 
    98             print "gsm ok", self.gsm_network_iface 
    99  
    100         self.device_obj = self.tryGetProxy( 'org.freesmartphone.odeviced', '/org/freesmartphone/Device' ) 
    101         if ( self.device_obj is not None ) and ( self.device_iface is None ): 
    102             self.device_iface = Interface( self.device_obj, 'org.freesmartphone.Device' ) 
    103  
    104             self.device_power_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.PowerSupply" )[0] ) 
    105             self.device_power_iface = Interface(self.device_power_obj, 'org.freesmartphone.Device.PowerSupply') 
    106  
    107             self.idlenotifier_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.IdleNotifier" )[0] ) 
    108  
    109             self.idlenotifier_iface = Interface( self.idlenotifier_obj, "org.freesmartphone.Device.IdleNotifier" ) 
    110             self.idlenotifier_iface.connect_to_signal( "State", self.cbIdleStateChanged ) 
    111  
    112             self.inputnotifier_obj = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/Input" ) 
    113             self.inputnotifier_iface = Interface( self.inputnotifier_obj, "org.freesmartphone.Device.Input" ) 
    114             self.inputnotifier_iface.connect_to_signal( "Event", self.cbEvent ) 
    115  
    116             print "displays:", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.Display" ) 
    117             self.display_obj = self.tryGetProxy( "org.freesmartphone.odeviced", self.fw.ListObjectsByInterface( "org.freesmartphone.Device.Display" )[0] ) 
    118             if self.display_obj is not None: 
    119                 self.display_iface = Interface( self.display_obj, "org.freesmartphone.Device.Display" ) 
    120                 self.display_iface.SetBrightness( 90 ) 
    121  
    122             self.accelerometer_obj = self.bus.get_object("org.freesmartphone.odeviced", "/org/freesmartphone/Device/Accelerometer") 
    123             self.accelerometer_iface = Interface(self.accelerometer_obj, "org.freesmartphone.Device.Accelerometer") 
    124             self.accelerometer_iface.connect_to_signal("Event", self.cbAccelerometer) 
    125  
    126         if self.device_obj is None: 
    127             failcount += 1 
    128         else: 
    129             print "device ok", self.device_iface 
    130  
    131         print "failcount=", failcount 
    132         if failcount == 0: 
    133             self.fullinit = True 
    134         return self.fullinit 
    135119 
    136120    def cbResourceChanged( self, resourcename ): 
     
    194178    from dbus.mainloop.glib import DBusGMainLoop 
    195179    import sys 
    196     fso = FSOObject() 
    197     fso.initialize(DBusGMainLoop()) 
     180    fso = FSOObject(SystemBus(mainloop=DBusGMainLoop())) 
    198181    import gobject 
    199182    try: 
  • developers/john_lee/pyfso/general.py

    r4537 r4539  
    11""" 
    2  
    32(C) 2008 John Lee <john_lee@openmoko.com> 
    43(C) 2008 Openmoko, Inc. 
     
    1615        self._observers = [] 
    1716 
    18     def attach(self, observer): 
     17    def attach(self, function): 
    1918        """attach as an observer 
    2019        """ 
    2120        with self._observers_lock: 
    22             self._observers.append(observer) 
     21            self._observers.append(function) 
    2322 
    24     def detach(self, observer): 
     23    def detach(self, function): 
    2524        """detach from observers 
    2625        """ 
    2726        with self._observers_lock: 
    28             self._observers.remove(observer) 
     27            self._observers.remove(function) 
    2928 
    3029    def _notify(self, *args, **kwargs): 
    3130        with self._observers_lock: 
    32             for o in self._observers: 
    33                 o.update(*args, **kwargs) 
     31            for f in self._observers: 
     32                f(*args, **kwargs) 
    3433 
    3534 
     
    5453 
    5554class DumpObserver(object): 
     55    """ dump everything the subject notifies. 
     56    >>> s = Subject() 
     57    >>> d = DumpObserver(s) 
     58    >>> s._notify('test') 
     59    ('test',) {} 
     60    """ 
    5661    def __init__(self, subject): 
    57         subject.attach(self) 
     62        subject.attach(self.update) 
    5863 
    5964    def update(self, *args, **kwargs): 
Note: See TracChangeset for help on using the changeset viewer.