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