10b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
20b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray# Use of this source code is governed by a BSD-style license that can be
30b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray# found in the LICENSE file.
40b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
50b03eab867e84dc28a61595afe02283f4ac6aab0Arman Ugurayimport logging
60b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
7c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Leimport pm_errors
80b03eab867e84dc28a61595afe02283f4ac6aab0Arman Ugurayimport register_machine
90b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
10c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Lefrom autotest_lib.client.cros.cellular import mm1_constants
11c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le
124b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhuclass RegisterCdmaMachine(register_machine.RegisterMachine):
135555f62fedfdc36cc8c4911eb24299008d961263Arman Uguray    """
144b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu    RegisterCdmaMachine handles the CDMA specific state transitions involved in
155555f62fedfdc36cc8c4911eb24299008d961263Arman Uguray    bringing the modem to the REGISTERED state.
165555f62fedfdc36cc8c4911eb24299008d961263Arman Uguray
175555f62fedfdc36cc8c4911eb24299008d961263Arman Uguray    """
180b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray    def Cancel(self):
194b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        """
204b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        Cancel the current machine.
214b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu
224b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        Overwritten from parent class.
234b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        """
244b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        logging.info('RegisterCdmaMachine: Canceling register.')
254b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        super(RegisterCdmaMachine, self).Cancel()
26c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le        state = self._modem.Get(mm1_constants.I_MODEM, 'State')
27c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le        reason = mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED
28c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le        if state == mm1_constants.MM_MODEM_STATE_SEARCHING:
294b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu            logging.info('RegisterCdmaMachine: Setting state to ENABLED.')
30c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le            self._modem.ChangeState(mm1_constants.MM_MODEM_STATE_ENABLED,
31c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                                    reason)
320b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray            self._modem.SetRegistrationState(
33c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN)
340b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        self._modem.register_step = None
35ed1b5861b9cf7e5f1307e5558beb0016e532a1ebArman Uguray        if self._raise_cb:
36ed1b5861b9cf7e5f1307e5558beb0016e532a1ebArman Uguray            self._raise_cb(
37c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                    pm_errors.MMCoreError(pm_errors.MMCoreError.CANCELLED,
38c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                                          'Cancelled'))
390b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
40c43ea562a0447330b26eeec3c7b1fb935958e985Prathmesh Prabhu
410b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray    def _GetModemStateFunctionMap(self):
420b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        return {
43c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le            mm1_constants.MM_MODEM_STATE_ENABLED:
44c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                    RegisterCdmaMachine._HandleEnabledState,
45c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le            mm1_constants.MM_MODEM_STATE_SEARCHING:
46c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                    RegisterCdmaMachine._HandleSearchingState
470b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        }
480b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
49c43ea562a0447330b26eeec3c7b1fb935958e985Prathmesh Prabhu
500b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray    def _HandleEnabledState(self):
514b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        logging.info('RegisterCdmaMachine: Modem is ENABLED.')
524b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        logging.info('RegisterCdmaMachine: Setting state to SEARCHING.')
530b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        self._modem.ChangeState(
54c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_STATE_SEARCHING,
55c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED)
560b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        return True
570b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray
58c43ea562a0447330b26eeec3c7b1fb935958e985Prathmesh Prabhu
590b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray    def _HandleSearchingState(self):
604b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu        logging.info('RegisterCdmaMachine: Modem is SEARCHING.')
610b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        network = self._modem.GetHomeNetwork()
620b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        if not network:
634b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu            logging.info('RegisterCdmaMachine: No network available.')
644b64e9ff090ace27a336d1444a120f22fba15cc9Prathmesh Prabhu            logging.info('RegisterCdmaMachine: Setting state to ENABLED.')
65c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le            self._modem.ChangeState(mm1_constants.MM_MODEM_STATE_ENABLED,
66c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_STATE_CHANGE_REASON_UNKNOWN)
67ed1b5861b9cf7e5f1307e5558beb0016e532a1ebArman Uguray            if self._raise_cb:
68c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                self._raise_cb(
69c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                        pm_errors.MMMobileEquipmentError(
70c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                                pm_errors.MMMobileEquipmentError.NO_NETWORK,
71c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                                'No networks were found to register.'))
724e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le            self._modem.register_step = None
734e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le            return False
744e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le
754e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le        logging.info(
764e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le            'RegisterMachineCdma: Registering to network: ' + str(network))
774e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le        logging.info('RegisterMachineCdma: Setting state to REGISTERED.')
780b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        self._modem.SetRegistered(network)
794e9e166e056c5a93b4655c9cfca0a4064d8929bbThieu Le        self._modem.ChangeState(
80c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_STATE_REGISTERED,
81c569e99b922542e7ddbbc4cd465fc8328ec16214Thieu Le                mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED)
820b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        self._modem.register_step = None
83ed1b5861b9cf7e5f1307e5558beb0016e532a1ebArman Uguray        if self._return_cb:
84ed1b5861b9cf7e5f1307e5558beb0016e532a1ebArman Uguray            self._return_cb()
850b03eab867e84dc28a61595afe02283f4ac6aab0Arman Uguray        return False
86