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