[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:44 UTC 2009


The following commit has been merged in the master branch:
commit af4a94a2016e3e5a7fcf370932980c1d5ca2dac1
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Sat Dec 20 20:24:59 2008 +0100

    ogsmd: [QUALCOMM MSM] new modem abstraction based on singleline

diff --git a/ChangeLog b/ChangeLog
index 43332fd..be12b66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-12-20	Michael Lauer	<mickey at openmoko.org>
+
+	* [ogsmd] Create qualcomm_msm modem abstraction based on singleline with minimal changes.
+
 2008-12-18	Michael Lauer	<mickey at openmoko.org>
 
 	* [ousaged] Check resume reason and launch emergency shutdown, if we
diff --git a/framework/subsystems/ogsmd/modems/__init__.py b/framework/subsystems/ogsmd/modems/__init__.py
index 9cac14a..c52851b 100644
--- a/framework/subsystems/ogsmd/modems/__init__.py
+++ b/framework/subsystems/ogsmd/modems/__init__.py
@@ -23,6 +23,7 @@ modemmap = { \
     "freescale_neptune": "FreescaleNeptune",
     "muxed4line":        "Muxed4Line",
     "option":            "Option",
+    "qualcomm_msm":      "QualcommMsm",
     "sierra":            "Sierra",
     "singleline":        "SingleLine",
     "ti_calypso":        "TiCalypso",
@@ -61,6 +62,9 @@ def modemFactory( modemtype ):
     elif modemtype == "ericsson_F3507g":
         from ericsson_F3507g.modem import EricssonF3507g as Modem
         import ericsson_F3507g.mediator as mediator
+    elif modemtype == "qualcomm_msm":
+        from qualcomm_msm.modem import QualcommMsm as Modem
+        import qualcomm_msm.mediator as mediator
     else:
         assert False, "must never reach this"
         sys.exit( -1 )
diff --git a/framework/patterns/__init__.py b/framework/subsystems/ogsmd/modems/qualcomm_msm/__init__.py
similarity index 100%
copy from framework/patterns/__init__.py
copy to framework/subsystems/ogsmd/modems/qualcomm_msm/__init__.py
diff --git a/framework/subsystems/ogsmd/modems/cinterion_mc75/channel.py b/framework/subsystems/ogsmd/modems/qualcomm_msm/channel.py
similarity index 50%
copy from framework/subsystems/ogsmd/modems/cinterion_mc75/channel.py
copy to framework/subsystems/ogsmd/modems/qualcomm_msm/channel.py
index 1adaad0..35b69f5 100644
--- a/framework/subsystems/ogsmd/modems/cinterion_mc75/channel.py
+++ b/framework/subsystems/ogsmd/modems/qualcomm_msm/channel.py
@@ -1,44 +1,67 @@
 #!/usr/bin/env python
 """
-The Open GSM Daemon -- Python Implementation
+The Open GSM Daemon - Python Implementation
 
 (C) 2008 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
 (C) 2008 Openmoko, Inc.
 GPLv2 or later
 
-Package: ogsmd.modems.cinterion_mc75
+Package: ogsmd.modems.qualcomm_msm
 Module: channel
 """
 
+MODULE_NAME = "ogsmd.modems.qualcomm_msm.channel"
+
 from ogsmd.modems.abstract.channel import AbstractModemChannel
-from ogsmd.gsm.callback import SimpleCallback
 
 import itertools, select
 
 import logging
-logger = logging.getLogger( "ogsmd.modems.cinterion_mc75.channel" )
+logger = logging.getLogger( MODULE_NAME )
 
 #=========================================================================#
-class CinterionModemChannel( AbstractModemChannel ):
+class SingleLineChannel( AbstractModemChannel ):
 #=========================================================================#
+    def __init__( self, *args, **kwargs ):
+        if not "timeout" in kwargs:
+            kwargs["timeout"] = 60*60
+        AbstractModemChannel.__init__( self, *args, **kwargs )
+
+    def _populateCommands( self ):
+        """
+        Populate the command queues to be sent on modem state changes.
+        """
+
+        AbstractModemChannel._populateCommands( self ) # prepopulated
+
+        c = self._commands["init"]
+        c.remove( "Z" ) # do not reset, otherwise it will fall back to V1
+        # reenable unsolicited responses, we don't have a seperate channel
+        # so we need to process them here as well
+        c.append( "+CLIP=1" ) # calling line identification presentation enable
+        c.append( "+COLP=1" ) # connected line identification presentation enable
+        c.append( "+CCWA=1" ) # call waiting
+        c.append( "+CSSN=1,1" ) # supplementary service notifications: send unsol. code
+        c.append( "+CTZU=1" ) # timezone update
+        c.append( "+CTZR=1" ) # timezone reporting
+        c.append( "+CREG=2" ) # registration information (NOTE not all modems support =2)
+        c.append( "+CAOC=2" ) # advice of charge: send unsol. code
+        # GPRS unsolicited
+        c.append( "+CGEREP=2,1" )
+        c.append( "+CGREG=2" )
 
     def _hookLowLevelInit( self ):
         """
         Low level initialization of channel.
 
-        This is actually an ugly hack which is unfortunately
-        necessary since the multiplexer obviously has problems
-        wrt. to initialization (swallowing first bunch of commands now and then...)
-        To work around this, we send '\x1a\r\n' until we actually get an
-        'OK' from the modem. We try this for 5 times, then we reopen
-        the serial line. If after 10 times we still have no response,
-        we assume that the modem is broken and fail.
+        Qualcomm default mode is V0, which completely disturbs our parser.
+        We send a special init here until it responds in V1 mode.
         """
         for i in itertools.count():
             logger.debug( "(modem init... try #%d)", i+1 )
-            select.select( [], [self.serial.fd], [], 2 )
-            self.serial.write( "AT\r\n" )
-            r, w, x = select.select( [self.serial.fd], [], [], 2 )
+            select.select( [], [self.serial.fd], [], 0.5 )
+            self.serial.write( "ATE0Q0V1\r\n" )
+            r, w, x = select.select( [self.serial.fd], [], [], 0.5 )
             if r:
                 try:
                     buf = self.serial.inWaiting()
@@ -71,46 +94,5 @@ class CinterionModemChannel( AbstractModemChannel ):
                 return False
         logger.info( "%s: responding OK" % self )
         self.serial.flushInput()
-        return True
-
-#=========================================================================#
-class MiscChannel( CinterionModemChannel ):
-#=========================================================================#
-    def __init__( self, *args, **kwargs ):
-        if not "timeout" in kwargs:
-            kwargs["timeout"] = 60*60
-        CinterionModemChannel.__init__( self, *args, **kwargs )
-        self.callback = None
-
-    def setIntermediateResponseCallback( self, callback ):
-        assert self.callback is None, "callback already set"
-        self.callback = callback
-
-    def handleUnsolicitedResponse( self, response ):
-        if self.callback is not None:
-            self.callback( response )
-        else:
-            print "CALLCHANNEL: UNHANDLED INTERMEDIATE: ", response
-
-#=========================================================================#
-class UnsolicitedResponseChannel( CinterionModemChannel ):
-#=========================================================================#
-
-    def __init__( self, *args, **kwargs ):
-        CinterionModemChannel.__init__( self, *args, **kwargs )
 
-    def _populateCommands( self ):
-        CinterionModemChannel._populateCommands( self )
-
-        c = self._commands["init"]
-        # enable unsolicited codes
-
-        c.append( "+CLIP=1" ) # calling line identification presentation enable
-        c.append( "+COLP=1" ) # connected line identification presentation enable
-        c.append( "+CCWA=1" ) # call waiting: send unsol. code
-        c.append( "+CSSN=1,1") # supplementary service notifications: send unsol. code
-        c.append( "+CRC=1" ) # cellular result codes: extended
-        c.append( "+CSNS=0" ) # single numbering scheme: voice
-        c.append( "+CTZU=1" ) # timezone update
-        c.append( "+CTZR=1" ) # timezone reporting
-        c.append( "+CREG=2" ) # registration information (TODO not all modems support that)
+        return True
diff --git a/framework/subsystems/ogsmd/modems/muxed4line/mediator.py b/framework/subsystems/ogsmd/modems/qualcomm_msm/mediator.py
similarity index 88%
copy from framework/subsystems/ogsmd/modems/muxed4line/mediator.py
copy to framework/subsystems/ogsmd/modems/qualcomm_msm/mediator.py
index 2319702..c56bfd1 100644
--- a/framework/subsystems/ogsmd/modems/muxed4line/mediator.py
+++ b/framework/subsystems/ogsmd/modems/qualcomm_msm/mediator.py
@@ -6,7 +6,7 @@ The Open GSM Daemon - Python Implementation
 (C) 2008 Openmoko, Inc.
 GPLv2 or later
 
-Package: ogsmd.modems.muxed4line
+Package: ogsmd.modems.qualcomm_msm
 Module: mediator
 """
 
diff --git a/framework/subsystems/ogsmd/modems/singleline/modem.py b/framework/subsystems/ogsmd/modems/qualcomm_msm/modem.py
similarity index 74%
copy from framework/subsystems/ogsmd/modems/singleline/modem.py
copy to framework/subsystems/ogsmd/modems/qualcomm_msm/modem.py
index 737a0f4..dcf7997 100644
--- a/framework/subsystems/ogsmd/modems/singleline/modem.py
+++ b/framework/subsystems/ogsmd/modems/qualcomm_msm/modem.py
@@ -6,12 +6,12 @@ The Open GSM Daemon - Python Implementation
 (C) 2008 Openmoko, Inc.
 GPLv2 or later
 
-Package: ogsmd.modems.singleline
+Package: ogsmd.modems.qualcomm_msm
 Module: modem
 """
 
 __version__ = "1.0.0"
-MODULE_NAME = "singleline"
+MODULE_NAME = "ogsmd.modems.qualcomm_msm.modem"
 
 import mediator
 
@@ -23,7 +23,7 @@ from .unsolicited import UnsolicitedResponseDelegate
 from framework.config import config
 
 #=========================================================================#
-class SingleLine( AbstractModem ):
+class QualcommMsm( AbstractModem ):
 #=========================================================================#
 
     def __init__( self, *args, **kwargs ):
@@ -35,8 +35,12 @@ class SingleLine( AbstractModem ):
         self._channels["SINGLE"].setDelegate( UnsolicitedResponseDelegate( self._object, mediator ) )
 
     def channel( self, category ):
-            # we do not care about a category here, we only have one channel
-            return self._channels["SINGLE"]
+        # we do not care about a category here, we only have one channel
+        return self._channels["SINGLE"]
 
     def portfactory( self, name ):
-        return config.getValue( "ogsmd", "serial", default="/dev/ttySAC0" )
+        return config.getValue( "ogsmd", "serial", default="/dev/smd0" )
+
+    def dataPort( self ):
+        # FIXME remove duplication and just use pathfactory
+        return "/dev/smd1"
diff --git a/framework/subsystems/ogsmd/modems/singleline/unsolicited.py b/framework/subsystems/ogsmd/modems/qualcomm_msm/unsolicited.py
similarity index 92%
copy from framework/subsystems/ogsmd/modems/singleline/unsolicited.py
copy to framework/subsystems/ogsmd/modems/qualcomm_msm/unsolicited.py
index e63c0ba..b74e916 100644
--- a/framework/subsystems/ogsmd/modems/singleline/unsolicited.py
+++ b/framework/subsystems/ogsmd/modems/qualcomm_msm/unsolicited.py
@@ -6,7 +6,7 @@ The Open GSM Daemon - Python Implementation
 (C) 2008 Openmoko, Inc.
 GPLv2 or later
 
-Package: ogsmd.modems.singleline
+Package: ogsmd.modems.qualcomm_msm
 Module: unsolicited
 """
 

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list