[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