By moving _freescale_neptune_modemOn() from __init__() to __new__() we
can return None if the modem can't be initialized.

Note that now _freescale_neptune_modemOn() is a static method.

Signed-off-by: Antonio Ospite <osp...@studenti.unina.it>
---
 .../ogsmd/modems/freescale_neptune/modem.py        |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/framework/subsystems/ogsmd/modems/freescale_neptune/modem.py 
b/framework/subsystems/ogsmd/modems/freescale_neptune/modem.py
index 11a3dbf..3de8257 100644
--- a/framework/subsystems/ogsmd/modems/freescale_neptune/modem.py
+++ b/framework/subsystems/ogsmd/modems/freescale_neptune/modem.py
@@ -76,16 +76,20 @@ class FreescaleNeptune( AbstractModem ):
     """
 
     @logged
-    def __init__( self, *args, **kwargs ):
-        AbstractModem.__init__( self, *args, **kwargs )
-
+    def __new__( cls, *args, **kwargs ):
         global initDone
         if not initDone:
-            ret = self._freescale_neptune_modemOn()
-            if not ret:
-                return False
+            ret = cls._freescale_neptune_modemOn()
+            if ret == False:
+                return None
             initDone = True
 
+        return AbstractModem.__new__( cls, *args, **kwargs )
+
+    @logged
+    def __init__( self, *args, **kwargs ):
+        AbstractModem.__init__( self, *args, **kwargs )
+
         # /dev/mux0
         self._channels[ "CallAndNetwork" ] = CallAndNetworkChannel( 
self.pathfactory, "/dev/mux1", modem=self )
         # /dev/mux2
@@ -127,7 +131,8 @@ class FreescaleNeptune( AbstractModem ):
     def pathfactory(self, name):
         return name
 
-    def _freescale_neptune_modemOn(self):
+    @staticmethod
+    def _freescale_neptune_modemOn():
         global muxfds
         logger.debug("********************** Modem init 
**********************")
         subprocess.check_call(['modprobe', 'ohci-hcd'])
-- 
1.7.1


Reply via email to