• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import random
6
7# Setup wardmodem package root and other autotest paths.
8import common
9
10from state_machines import call_machine
11
12class CallMachineE362(call_machine.CallMachine):
13    """
14    E362 specific extension to the call machine.
15
16    """
17    def __init__(self, state, transceiver, modem_conf):
18        """
19        @param state: The GlobalState object shared by all state machines.
20
21        @param transceiver: The ATTransceiver object to interact with.
22
23        @param modem_conf: A modem configuration object that contains
24                configuration data for different state machines.
25
26        @raises: SetupException if we attempt to create an instance of a machine
27                that has not been completely specified (see
28                get_well_known_name).
29
30        """
31        super(CallMachineE362, self).__init__(state, transceiver, modem_conf)
32
33        # Add all wardmodem response functions used by this machine.
34        self._add_response_function('wm_response_qmi_call_result_success')
35        self._add_response_function('wm_response_qmi_call_state_connected')
36        self._add_response_function('wm_response_qmi_call_state_disconnected')
37        self._add_response_function('wm_response_qmi_call_end_reason')
38        self._add_response_function('wm_response_qmi_call_duration')
39
40        random.seed()
41        self._call_duration = 0
42
43
44    # ##########################################################################
45    # State machine API functions.
46    def connect_call(self):
47        """
48        Connect a call with the registered network.
49
50        Overrides CallMachine.connect_call
51
52        """
53        super(CallMachineE362, self).connect_call()
54        self._update_state({'call_end_reason': 0})
55        self._call_duration = 0
56
57
58    def disconnect_call(self):
59        """
60        Disconnect an active call with the registered network.
61
62        Overrides CallMachine.disconnect_call
63
64        """
65        super(CallMachineE362, self).disconnect_call()
66        self._call_duration = 0
67
68
69    def get_qmi_call_status(self):
70        """
71        Get the current call status as returned by the QMI call to E362.
72
73        """
74        if self._state['call_status'] == 'CONNECTED':
75            # We randomly increment the call duration every time a status check
76            # is made in a continuing call.
77            self._call_duration += random.randint(0, 20)
78
79            self._respond(self.wm_response_qmi_call_result_success)
80            self._respond(self.wm_response_qmi_call_state_connected)
81            self._respond(self.wm_response_qmi_call_end_reason, 0,
82                          str(self._state['call_end_reason']))
83            self._respond(self.wm_response_qmi_call_duration, 0,
84                          self._call_duration)
85            self._respond(self.wm_response_qmi_call_result_success)
86            self._respond(self.wm_response_qmi_call_state_connected)
87            self._respond(self.wm_response_qmi_call_end_reason, 0, '0')
88            self._respond(self.wm_response_qmi_call_duration, 0,
89                          self._call_duration)
90            self._respond_ok()
91        else:
92            self._respond(self.wm_response_qmi_call_result_success)
93            self._respond(self.wm_response_qmi_call_state_disconnected)
94            self._respond(self.wm_response_qmi_call_end_reason, 0,
95                          str(self._state['call_end_reason']))
96            self._respond(self.wm_response_qmi_call_duration, 0,
97                          self._call_duration)
98            self._respond(self.wm_response_qmi_call_result_success)
99            self._respond(self.wm_response_qmi_call_state_disconnected)
100            self._respond(self.wm_response_qmi_call_end_reason, 0, '0')
101            self._respond(self.wm_response_qmi_call_duration, 0,
102                          self._call_duration)
103            self._respond_ok()
104