On gen1 +CFUN={1,0} is very slow to sync up with the network and this can
confuse ogsmd, by sleeping in DeviceSetAntennaPower and before NetworkRegister 
we
give the modem the time to emit the responses to +CFUN and +COPS in a clearer
order. We do the symmetric in NetworkUnregister.

Signed-off-by: Antonio Ospite <osp...@studenti.unina.it>
---
 .../ogsmd/modems/freescale_neptune/mediator.py     |   31 ++++++++++++++++----
 1 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/framework/subsystems/ogsmd/modems/freescale_neptune/mediator.py 
b/framework/subsystems/ogsmd/modems/freescale_neptune/mediator.py
index 101d8b1..ad9b5f6 100644
--- a/framework/subsystems/ogsmd/modems/freescale_neptune/mediator.py
+++ b/framework/subsystems/ogsmd/modems/freescale_neptune/mediator.py
@@ -86,24 +86,22 @@ class SimGetAuthStatus( SimMediator ):
 class DeviceSetAntennaPower( AbstractMediator.DeviceSetAntennaPower ):
 #=========================================================================#
     """
-    We want to receive all initial status commands, so we always send +CFUN=0 
first.
-
     In contrast to AbstractMediator.DeviceSetAntennaPower, PIN handling
     has been removed here, since after powercycling we will get an URC
     indicating the PIN status.
     """
 
     def trigger( self ):
-        self._commchannel.enqueue( "+CFUN=0", self.responseFromChannel1, 
self.errorFromChannel )
+        if not self.power:
+            time.sleep(2.0)
 
-    def responseFromChannel1( self, request, response ):
-        # FIXME: make async
-        time.sleep( 2.0 )
         cmd = "+CFUN=%d" % ( 1 if self.power else 0 )
         self._commchannel.enqueue( cmd, self.responseFromChannel, 
self.errorFromChannel )
 
     def responseFromChannel( self, request, response ):
         if response[-1] == "OK":
+            if self.power:
+                time.sleep( 2.0 )
             self._ok()
         else:
             DeviceMediator.responseFromChannel( self, request, response )
@@ -141,6 +139,27 @@ class SimListPhonebooks( SimMediator ):
         self._ok( "contacts own fixed".split() )
 
 #=========================================================================#
+class NetworkRegister( NetworkMediator ):
+#=========================================================================#
+    def trigger( self ):
+        time.sleep( 4.0 )
+        self._commchannel.enqueue( "+COPS=0,0", self.responseFromChannel, 
self.errorFromChannel )
+
+#=========================================================================#
+class NetworkUnregister( NetworkMediator ):
+#=========================================================================#
+    def trigger( self ):
+        self._commchannel.enqueue( "+COPS=2,0", self.responseFromChannel, 
self.errorFromChannel )
+
+    @logged
+    def responseFromChannel( self, request, response ):
+        if response[-1] == "OK":
+            time.sleep( 4.0 )
+            self._ok()
+        else:
+            NetworkMediator.responseFromChannel( self, request, response )
+
+#=========================================================================#
 class NetworkGetStatus( NetworkMediator ):
 #=========================================================================#
     """
-- 
1.7.1


Reply via email to