[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82
Michael 'Mickey' Lauer
mickey at vanille-media.de
Mon Feb 2 18:51:24 UTC 2009
The following commit has been merged in the master branch:
commit cd9ed5834d0cfc5d4be60ab7310b7fda34c9de97
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date: Tue Nov 25 18:50:30 2008 +0100
ogsmd: (readd) server.py
diff --git a/framework/subsystems/ogsmd/server.py b/framework/subsystems/ogsmd/server.py
new file mode 100644
index 0000000..792be0a
--- /dev/null
+++ b/framework/subsystems/ogsmd/server.py
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+"""
+The Open Device Daemon - Python Implementation
+
+(C) 2008 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+(C) 2008 Openmoko, Inc.
+GPLv2 or later
+
+Package: ogsmd
+Module: server
+"""
+
+MODULE_NAME = "ogsmd.server"
+__version__ = "0.1.0"
+
+from framework import resource
+
+import dbus
+import dbus.service
+from dbus import DBusException
+
+from gobject import timeout_add, idle_add
+import weakref
+import math
+import sys, os
+import types
+
+import logging
+logger = logging.getLogger( MODULE_NAME )
+
+from device import DBUS_INTERFACE_DEVICE, \
+ DBUS_OBJECT_PATH_DEVICE, \
+ DBUS_BUS_NAME_DEVICE, \
+ DBUS_INTERFACE_SIM, \
+ DBUS_INTERFACE_CB
+
+DBUS_INTERFACE_NETWORK = "org.freesmartphone.Network"
+DBUS_INTERFACE_HZ = "org.freesmartphone.GSM.HZ"
+DBUS_OBJECT_PATH_SERVER = "/org/freesmartphone/GSM/Server"
+
+HOMEZONE_DEBUG = False
+
+#=========================================================================#
+class Server( dbus.service.Object ):
+#=========================================================================#
+ """
+ Open Phone Server aggregated functions:
+ - HomeZone
+
+ Ideas:
+ - watch for clients on bus and send coldplug status
+ - monitor device aliveness and restart, if necessary
+ """
+
+ def __init__( self, bus ):
+ self.path = DBUS_OBJECT_PATH_SERVER
+ dbus.service.Object.__init__( self, bus, self.path )
+ logger.info( "%s %s initialized." % ( self.__class__.__name__, __version__ ) )
+ self.bus = bus
+ self.homezones = None
+ self.zone = "unknown"
+ self.setupSignals()
+
+ def setupSignals( self ):
+ device = self.bus.get_object( DBUS_BUS_NAME_DEVICE, DBUS_OBJECT_PATH_DEVICE )
+ self.fso_cb = dbus.Interface( device, DBUS_INTERFACE_CB )
+ self.fso_cb.connect_to_signal( "IncomingCellBroadcast", self.onIncomingCellBroadcast )
+ self.fso_sim = dbus.Interface( device, DBUS_INTERFACE_SIM )
+
+ def __del__( self ):
+ server = None
+
+ #
+ # Callbacks
+ #
+ def onIncomingCellBroadcast( self, channel, data ):
+
+ def gotHomezones( homezones, self=self ):
+ logger.info( "got SIM homezones: %s", homezones )
+ self.homezones = homezones
+ # debug code, if you have no homezones on your SIM. To test, use:
+ # gsm.DebugInjectString("UNSOL","+CBM: 16,221,0,1,1\r\n347747555093\r\r\r\n")
+ if HOMEZONE_DEBUG: self.homezones = [ ( "city", 347747, 555093, 1000 ), ( "home", 400000, 500000, 1000 ) ]
+ self.checkInHomezones()
+
+ if channel == 221: # home zone cell broadcast
+ if len( data ) != 12:
+ return
+ self.x, self.y = int( data[:6] ), int( data[6:] )
+ logger.info( "home zone cell broadcast detected: %s %s", self.x, self.y )
+ if self.homezones is None: # never tried to read them
+ logger.info( "trying to read home zones from SIM" )
+ self.fso_sim.GetHomeZones( reply_handler=gotHomezones, error_handler=lambda error:None )
+ else:
+ self.checkInHomezones()
+
+ def checkInHomezones( self ):
+ status = ""
+ for zname, zx, zy, zr in self.homezones:
+ if self.checkInHomezone( self.x, self.y, zx, zy, zr ):
+ status = zname
+ break
+ self.HomeZoneStatus( status )
+
+ def checkInHomezone( self, x, y, zx, zy, zr ):
+ logger.info( "matching whether %s %s is in ( %s, %s, %s )" % ( x, y, zx, zy, zr ) )
+ dist = math.sqrt( math.pow( x-zx, 2 ) + math.pow( y-zy, 2 ) ) * 10
+ maxdist = math.sqrt( zr ) * 10
+ return dist < maxdist
+
+ #
+ # dbus org.freesmartphone.GSM.HZ
+ #
+ @dbus.service.method( DBUS_INTERFACE_HZ, "", "s",
+ async_callbacks=( "dbus_ok", "dbus_error" ) )
+ def GetHomeZoneStatus( self, dbus_ok, dbus_error ):
+ dbus_ok( self.zone )
+
+ @dbus.service.signal( DBUS_INTERFACE_HZ, "s" )
+ def HomeZoneStatus( self, zone ):
+ self.zone = zone
+ logger.info( "home zone status now %s" % zone )
+
+ @dbus.service.method( DBUS_INTERFACE_HZ, "", "as",
+ async_callbacks=( "dbus_ok", "dbus_error" ) )
+ def GetKnownHomeZones( self, dbus_ok, dbus_error ):
+
+ def gotHomezones( homezones, self=self, dbus_ok=dbus_ok ):
+ logger.info( "got SIM homezones: %s", homezones )
+ self.homezones = homezones
+ # debug code, if you have no homezones on your SIM. To test, use:
+ # gsm.DebugInjectString("UNSOL","+CBM: 16,221,0,1,1\r\n347747555093\r\r\r\n")
+ if HOMEZONE_DEBUG: self.homezones = [ ( "city", 347747, 555093, 1000 ), ( "home", 400000, 500000, 1000 ) ]
+ dbus_ok( [ zone[0] for zone in self.homezones ] )
+
+ self.fso_sim.GetHomeZones( reply_handler=gotHomezones, error_handler=lambda error:None )
+
+ #
+ # dbus org.freesmartphone.Network
+ #
+ @dbus.service.method( DBUS_INTERFACE_HZ, "", "s",
+ async_callbacks=( "dbus_ok", "dbus_error" ) )
+ def GetHomeZoneStatus( self, dbus_ok, dbus_error ):
+ dbus_ok( self.zone )
+
+ @dbus.service.signal( DBUS_INTERFACE_HZ, "s" )
+ def HomeZoneStatus( self, zone ):
+ self.zone = zone
+ logger.info( "home zone status now %s" % zone )
+
+ @dbus.service.method( DBUS_INTERFACE_HZ, "", "as",
+ async_callbacks=( "dbus_ok", "dbus_error" ) )
+ def GetKnownHomeZones( self, dbus_ok, dbus_error ):
+
+ def gotHomezones( homezones, self=self, dbus_ok=dbus_ok ):
+ logger.info( "got SIM homezones: %s", homezones )
+ self.homezones = homezones
+ # debug code, if you have no homezones on your SIM. To test, use:
+ # gsm.DebugInjectString("UNSOL","+CBM: 16,221,0,1,1\r\n347747555093\r\r\r\n")
+ if HOMEZONE_DEBUG: self.homezones = [ ( "city", 347747, 555093, 1000 ), ( "home", 400000, 500000, 1000 ) ]
+ dbus_ok( [ zone[0] for zone in self.homezones ] )
+
+ self.fso_sim.GetHomeZones( reply_handler=gotHomezones, error_handler=lambda error:None )
+
+#=========================================================================#
+def factory( prefix, controller ):
+#=========================================================================#
+ return [ Server( controller.bus ) ]
+
+#=========================================================================#
+if __name__ == "__main__":
+#=========================================================================#
+ pass
--
FSO frameworkd Debian packaging
More information about the pkg-fso-commits
mailing list