[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone5.1

Michael 'Mickey' Lauer mickey at vanille-media.de
Sat Jun 6 12:21:44 UTC 2009


The following commit has been merged in the master branch:
commit 4c20045ac9b09838b66b86bb72be65559099404c
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Fri Feb 6 15:42:18 2009 +0100

    ogsmd: [TI CALYPSO] Add support for the next-generation 07.10 multiplexer from FSO.
    Set 'ti_calypso_muxer' to 'fso-abyss'. Default value is gsm0710muxd for the time being.

diff --git a/ChangeLog b/ChangeLog
index b92fd4f..47acabe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-02-06	Michael Lauer	<mlauer at vanille-media.de>
+
+	* ogsmd: [TI CALYPSO] Add support for the next-generation 07.10 multiplexer from FSO.
+	  Set 'ti_calypso_muxer' to 'fso-abyss'. Default value is gsm0710muxd for the time being.
+
 2009-02-01	Stefan Schmidt	<stefan at openmoko.org>
 
 	* Released as freesmartphone.org framework milestone 5
diff --git a/framework/subsystems/ogsmd/modems/ti_calypso/channel.py b/framework/subsystems/ogsmd/modems/ti_calypso/channel.py
index bffbfe4..3fb383d 100644
--- a/framework/subsystems/ogsmd/modems/ti_calypso/channel.py
+++ b/framework/subsystems/ogsmd/modems/ti_calypso/channel.py
@@ -13,7 +13,7 @@ Module: channel
 TI Calypso specific modem channels
 """
 
-__version__ = "0.9.10.3"
+__version__ = "0.9.10.4"
 
 from framework.config import config
 
@@ -143,6 +143,14 @@ class CalypsoModemChannel( AbstractModemChannel ):
         return True
 
     #
+    # send %CUNS=2 on every channel as init
+    #
+    def _populateCommands( self ):
+        AbstractModemChannel._populateCommands( self )
+
+        self._commands["init"].append( "%CUNS=2" )
+
+    #
     # TI Calypso has a deep sleep mode, effective after 8 seconds,
     # from which we need to wake up by sending a special character
     # (plus a small waiting time)
diff --git a/framework/subsystems/ogsmd/modems/ti_calypso/modem.py b/framework/subsystems/ogsmd/modems/ti_calypso/modem.py
index 45f9bfd..62910ea 100644
--- a/framework/subsystems/ogsmd/modems/ti_calypso/modem.py
+++ b/framework/subsystems/ogsmd/modems/ti_calypso/modem.py
@@ -2,8 +2,8 @@
 """
 The Open GSM Daemon - Python Implementation
 
-(C) 2008 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
-(C) 2008 Openmoko, Inc.
+(C) 2008-2009 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+(C) 2008-2009 Openmoko, Inc.
 GPLv2 or later
 
 Package: ogsmd.modems.ti_calypso
@@ -11,13 +11,18 @@ Module: modem
 
 """
 
-__version__ = "0.9.9.6"
+__version__ = "0.9.9.7"
 MODULE_NAME = "ogsmd.modems.ti_calypso"
 
+DEVICE_CALYPSO_PATH             = "/dev/ttySAC0"
+SYSFS_CALYPSO_POWER_PATH        = "/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on"
+SYSFS_CALYPSO_RESET_PATH        = "/sys/bus/platform/devices/neo1973-pm-gsm.0/reset"
 SYSFS_CALYPSO_FLOW_CONTROL_PATH = "/sys/bus/platform/devices/neo1973-pm-gsm.0/flowcontrolled"
 
 import mediator
 
+from framework.config import config
+
 from ogsmd.modems.abstract.modem import AbstractModem
 
 from .channel import CallChannel, UnsolicitedResponseChannel, MiscChannel
@@ -28,6 +33,14 @@ from ogsmd.helpers import writeToFile
 
 from ogsmd.helpers import killall
 
+from dbus import Interface
+from time import sleep
+
+import serial
+
+import logging
+logger = logging.getLogger( MODULE_NAME )
+
 #=========================================================================#
 class TiCalypso( AbstractModem ):
 #=========================================================================#
@@ -35,6 +48,8 @@ class TiCalypso( AbstractModem ):
     def __init__( self, *args, **kwargs ):
         AbstractModem.__init__( self, *args, **kwargs )
 
+        self._channelmap = { "ogsmd.call":1, "ogsmd.unsolicited":2, "ogsmd.misc":3, "ogsmd.gprs":4 }
+
         # VC 1
         self._channels["CALL"] = CallChannel( self.pathfactory, "ogsmd.call", modem=self )
         # VC 2
@@ -50,6 +65,66 @@ class TiCalypso( AbstractModem ):
         # configure behaviour using special commands
         self._data["cancel-outgoing-call"] = "%CHLD=I"
 
+        # muxer mode
+        self._muxercommand = config.getValue( "ogsmd", "ti_calypso_muxer", "gsm0710muxd" )
+
+        # muxer object
+        self._muxeriface = None
+
+    def _modemOn( self ):
+        """
+        Lowlevel initialize this modem.
+        """
+        logger.debug( "reset-cycling modem" )
+        writeToFile( SYSFS_CALYPSO_POWER_PATH, "0" )
+        sleep( 1 )
+        writeToFile( SYSFS_CALYPSO_RESET_PATH, "0" )
+        sleep( 1 )
+        writeToFile( SYSFS_CALYPSO_POWER_PATH, "1" )
+        sleep( 1 )
+        writeToFile( SYSFS_CALYPSO_RESET_PATH, "1" )
+        sleep( 1 )
+        writeToFile( SYSFS_CALYPSO_RESET_PATH, "0" )
+        sleep( 1 )
+        logger.debug( "reset cycle complete" )
+
+        device = serial.Serial()
+        device.port = DEVICE_CALYPSO_PATH
+        device.baudrate = 115200
+        device.rtscts = True
+        device.xonxoff = False
+        device.bytesize = serial.EIGHTBITS
+        device.parity = serial.PARITY_NONE
+        device.stopbits = serial.STOPBITS_ONE
+        device.timeout = 1
+        logger.debug( "opening port now" )
+        device.open()
+        device.write( "\0xf9\0xf9" )
+        device.flush()
+        sleep( 0.2 )
+        device.write( "\0x7E\0x03\0xEF\0xC3\0x01\0x70\0x7E" )
+        device.flush()
+        sleep( 0.2 )
+        device.write( "\r\nAT\r\n" )
+        device.flush()
+        result = device.read( 64 )
+        logger.debug( "got %s", repr(result) )
+        ok = False
+        for retries in xrange( 5 ):
+            logger.debug( "port open, sending ATE0" )
+            device.write( "ATE0\r\n" )
+            device.flush()
+            result = device.read( 64 )
+            logger.debug( "got %s", repr(result) )
+            if "OK" in result:
+                ok = True
+                break
+        device.close()
+        return ok
+
+    def _modemOff( self ):
+        writeToFile( "0\n", SYSFS_CALYPSO_POWER_PATH )
+
     def close( self ): # SYNC
         """
         Close modem.
@@ -58,9 +133,8 @@ class TiCalypso( AbstractModem ):
         """
         # call default implementation (closing all channels)
         AbstractModem.close( self )
-        # FIXME ok this is a bit hefty. gsm0710muxd has open/close dbus calls,
-        # but last time I checked they weren't working.
-        killall( "gsm0710muxd" )
+        killall( self._muxercommand )
+        self._modemOff()
 
     def channel( self, category ):
         """
@@ -81,13 +155,29 @@ class TiCalypso( AbstractModem ):
 
         Overridden for internal purposes.
         """
-        muxer = self._bus.get_object( "org.pyneo.muxer", "/org/pyneo/Muxer" )
-        return str( muxer.AllocChannel( name, dbus_interface="org.freesmartphone.GSM.MUX" ) )
+        logger.info( "Requesting new channel from '%s'", self._muxercommand )
+
+        if self._muxercommand == "gsm0710muxd":
+            if self._muxeriface is None:
+                muxer = self._bus.get_object( "org.pyneo.muxer", "/org/pyneo/Muxer" )
+                self._muxeriface = Interface( muxer, "org.freesmartphone.GSM.MUX" )
+            return str( self._muxeriface.AllocChannel( name ) )
+
+        elif self._muxercommand == "fso-abyss":
+            if self._muxeriface is None:
+                muxer = self._bus.get_object( "org.freesmartphone.omuxerd", "/org/freesmartphone/GSM/Muxer" )
+                self._muxeriface = Interface( muxer, "org.freesmartphone.GSM.MUX" )
+                # power on modem
+                if not self._modemOn():
+                    self._muxeriface = None
+                    return "" # FIXME: emit error?
+                # abyss needs an open session before we can allocate channels
+                self._muxeriface.OpenSession( True, 98, DEVICE_CALYPSO_PATH, 115200 )
+            pts, vc = self._muxeriface.AllocChannel( name, self._channelmap[name] )
+            return str(pts)
 
     def dataPort( self ):
-        # FIXME remove duplication and just use pathfactory
-        muxer = self._bus.get_object( "org.pyneo.muxer", "/org/pyneo/Muxer" )
-        return muxer.AllocChannel( "ogsmd.gprs", dbus_interface="org.freesmartphone.GSM.MUX" )
+        return self.pathfactory( self, "ogsmd.gprs" )
 
     def prepareForSuspend( self, ok_callback, error_callback ):
         """overridden for internal purposes"""

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list