blob: 7b38a5bb1033d7a21e1898cbe7ad98f294e80200 [file] [log] [blame]
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import pm_errors
import register_machine
from autotest_lib.client.cros.cellular import mm1_constants
class RegisterCdmaMachine(register_machine.RegisterMachine):
"""
RegisterCdmaMachine handles the CDMA specific state transitions involved in
bringing the modem to the REGISTERED state.
"""
def Cancel(self):
"""
Cancel the current machine.
Overwritten from parent class.
"""
logging.info('RegisterCdmaMachine: Canceling register.')
super(RegisterCdmaMachine, self).Cancel()
state = self._modem.Get(mm1_constants.I_MODEM, 'State')
reason = mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED
if state == mm1_constants.MM_MODEM_STATE_SEARCHING:
logging.info('RegisterCdmaMachine: Setting state to ENABLED.')
self._modem.ChangeState(mm1_constants.MM_MODEM_STATE_ENABLED,
reason)
self._modem.SetRegistrationState(
mm1_constants.MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN)
self._modem.register_step = None
if self._raise_cb:
self._raise_cb(
pm_errors.MMCoreError(pm_errors.MMCoreError.CANCELLED,
'Cancelled'))
def _GetModemStateFunctionMap(self):
return {
mm1_constants.MM_MODEM_STATE_ENABLED:
RegisterCdmaMachine._HandleEnabledState,
mm1_constants.MM_MODEM_STATE_SEARCHING:
RegisterCdmaMachine._HandleSearchingState
}
def _HandleEnabledState(self):
logging.info('RegisterCdmaMachine: Modem is ENABLED.')
logging.info('RegisterCdmaMachine: Setting state to SEARCHING.')
self._modem.ChangeState(
mm1_constants.MM_MODEM_STATE_SEARCHING,
mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED)
return True
def _HandleSearchingState(self):
logging.info('RegisterCdmaMachine: Modem is SEARCHING.')
network = self._modem.GetHomeNetwork()
if not network:
logging.info('RegisterCdmaMachine: No network available.')
logging.info('RegisterCdmaMachine: Setting state to ENABLED.')
self._modem.ChangeState(mm1_constants.MM_MODEM_STATE_ENABLED,
mm1_constants.MM_MODEM_STATE_CHANGE_REASON_UNKNOWN)
if self._raise_cb:
self._raise_cb(
pm_errors.MMMobileEquipmentError(
pm_errors.MMMobileEquipmentError.NO_NETWORK,
'No networks were found to register.'))
self._modem.register_step = None
return False
logging.info(
'RegisterMachineCdma: Registering to network: ' + str(network))
logging.info('RegisterMachineCdma: Setting state to REGISTERED.')
self._modem.SetRegistered(network)
self._modem.ChangeState(
mm1_constants.MM_MODEM_STATE_REGISTERED,
mm1_constants.MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED)
self._modem.register_step = None
if self._return_cb:
self._return_cb()
return False