blob: ce78efab430c039241dd3893e3fe8d64a4611e5d [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 random
# Setup wardmodem package root and other autotest paths.
import common
from state_machines import call_machine
class CallMachineE362(call_machine.CallMachine):
"""
E362 specific extension to the call machine.
"""
def __init__(self, state, transceiver, modem_conf):
"""
@param state: The GlobalState object shared by all state machines.
@param transceiver: The ATTransceiver object to interact with.
@param modem_conf: A modem configuration object that contains
configuration data for different state machines.
@raises: SetupException if we attempt to create an instance of a machine
that has not been completely specified (see
get_well_known_name).
"""
super(CallMachineE362, self).__init__(state, transceiver, modem_conf)
# Add all wardmodem response functions used by this machine.
self._add_response_function('wm_response_qmi_call_result_success')
self._add_response_function('wm_response_qmi_call_state_connected')
self._add_response_function('wm_response_qmi_call_state_disconnected')
self._add_response_function('wm_response_qmi_call_end_reason')
self._add_response_function('wm_response_qmi_call_duration')
random.seed()
self._call_duration = 0
# ##########################################################################
# State machine API functions.
def connect_call(self):
"""
Connect a call with the registered network.
Overrides CallMachine.connect_call
"""
super(CallMachineE362, self).connect_call()
self._update_state({'call_end_reason': 0})
self._call_duration = 0
def disconnect_call(self):
"""
Disconnect an active call with the registered network.
Overrides CallMachine.disconnect_call
"""
super(CallMachineE362, self).disconnect_call()
self._call_duration = 0
def get_qmi_call_status(self):
"""
Get the current call status as returned by the QMI call to E362.
"""
if self._state['call_status'] == 'CONNECTED':
# We randomly increment the call duration every time a status check
# is made in a continuing call.
self._call_duration += random.randint(0, 20)
self._respond(self.wm_response_qmi_call_result_success)
self._respond(self.wm_response_qmi_call_state_connected)
self._respond(self.wm_response_qmi_call_end_reason, 0,
str(self._state['call_end_reason']))
self._respond(self.wm_response_qmi_call_duration, 0,
self._call_duration)
self._respond(self.wm_response_qmi_call_result_success)
self._respond(self.wm_response_qmi_call_state_connected)
self._respond(self.wm_response_qmi_call_end_reason, 0, '0')
self._respond(self.wm_response_qmi_call_duration, 0,
self._call_duration)
self._respond_ok()
else:
self._respond(self.wm_response_qmi_call_result_success)
self._respond(self.wm_response_qmi_call_state_disconnected)
self._respond(self.wm_response_qmi_call_end_reason, 0,
str(self._state['call_end_reason']))
self._respond(self.wm_response_qmi_call_duration, 0,
self._call_duration)
self._respond(self.wm_response_qmi_call_result_success)
self._respond(self.wm_response_qmi_call_state_disconnected)
self._respond(self.wm_response_qmi_call_end_reason, 0, '0')
self._respond(self.wm_response_qmi_call_duration, 0,
self._call_duration)
self._respond_ok()