[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