xref: /aosp_15_r20/external/autotest/client/cros/cellular/cellular.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
3*9c5db199SXin Li# found in the LICENSE file.
4*9c5db199SXin Li
5*9c5db199SXin Li"""Constants, enums, and basic types for cellular base station emulation."""
6*9c5db199SXin Li
7*9c5db199SXin LiDEFAULT_TIMEOUT = 10
8*9c5db199SXin Li
9*9c5db199SXin Li
10*9c5db199SXin Lidef Enum(enum_name, items):
11*9c5db199SXin Li    """Build a class with a member for each item.
12*9c5db199SXin Li
13*9c5db199SXin Li    Arguments:
14*9c5db199SXin Li      members: A list of items for the enum.  They must be valid python
15*9c5db199SXin Li       identifiers
16*9c5db199SXin Li    """
17*9c5db199SXin Li    class output(object):
18*9c5db199SXin Li        pass
19*9c5db199SXin Li
20*9c5db199SXin Li    for item in items:
21*9c5db199SXin Li        setattr(output, item, enum_name + ':' + item)
22*9c5db199SXin Li
23*9c5db199SXin Li    return output
24*9c5db199SXin Li
25*9c5db199SXin Li
26*9c5db199SXin LiTechnology = Enum('Technology', [
27*9c5db199SXin Li    'GPRS',
28*9c5db199SXin Li    'EGPRS',
29*9c5db199SXin Li    'WCDMA',
30*9c5db199SXin Li    'HSDPA',
31*9c5db199SXin Li    'HSUPA',
32*9c5db199SXin Li    'HSDUPA',
33*9c5db199SXin Li    'HSPA_PLUS',
34*9c5db199SXin Li    'CDMA_2000',
35*9c5db199SXin Li    'EVDO_1X',
36*9c5db199SXin Li    'LTE'
37*9c5db199SXin Li])
38*9c5db199SXin Li
39*9c5db199SXin LiTechnologyFamily = Enum('TechnologyFamily', [
40*9c5db199SXin Li    'UMTS',
41*9c5db199SXin Li    'CDMA',
42*9c5db199SXin Li    'LTE'
43*9c5db199SXin Li])
44*9c5db199SXin Li
45*9c5db199SXin LiTechnologyToFamily = {
46*9c5db199SXin Li    Technology.GPRS: TechnologyFamily.UMTS,
47*9c5db199SXin Li    Technology.EGPRS: TechnologyFamily.UMTS,
48*9c5db199SXin Li    Technology.WCDMA: TechnologyFamily.UMTS,
49*9c5db199SXin Li    Technology.HSDPA: TechnologyFamily.UMTS,
50*9c5db199SXin Li    Technology.HSUPA: TechnologyFamily.UMTS,
51*9c5db199SXin Li    Technology.HSDUPA: TechnologyFamily.UMTS,
52*9c5db199SXin Li    Technology.HSPA_PLUS: TechnologyFamily.UMTS,
53*9c5db199SXin Li    Technology.CDMA_2000: TechnologyFamily.CDMA,
54*9c5db199SXin Li    Technology.EVDO_1X: TechnologyFamily.CDMA,
55*9c5db199SXin Li    Technology.LTE: TechnologyFamily.LTE,
56*9c5db199SXin Li}
57*9c5db199SXin Li
58*9c5db199SXin Li
59*9c5db199SXin LiUeGsmDataStatus = Enum('GsmDataStatus', [
60*9c5db199SXin Li    'NONE',
61*9c5db199SXin Li    'IDLE',
62*9c5db199SXin Li    'ATTACHING',
63*9c5db199SXin Li    'ATTACHED',
64*9c5db199SXin Li    'DETACHING',
65*9c5db199SXin Li    'PDP_ACTIVATING',
66*9c5db199SXin Li    'PDP_ACTIVE',
67*9c5db199SXin Li    'PDP_DEACTIVATING',
68*9c5db199SXin Li])
69*9c5db199SXin Li
70*9c5db199SXin LiUeC2kDataStatus = Enum('C2kDataStatus', [
71*9c5db199SXin Li    'OFF',
72*9c5db199SXin Li    'DORMANT',
73*9c5db199SXin Li    'DATA_CONNECTED',
74*9c5db199SXin Li])
75*9c5db199SXin Li
76*9c5db199SXin LiUeEvdoDataStatus = Enum('EvdoDataStatus', [
77*9c5db199SXin Li    'CONNECTION_CLOSING',
78*9c5db199SXin Li    'CONNECTION_NEGOTIATE',
79*9c5db199SXin Li    'CONNECTION_REQUEST',
80*9c5db199SXin Li    'DATA_CONNECTED',
81*9c5db199SXin Li    'DORMANT',
82*9c5db199SXin Li    'HANDOFF',
83*9c5db199SXin Li    'IDLE',
84*9c5db199SXin Li    'PAGING',
85*9c5db199SXin Li    'SESSION_CLOSING',
86*9c5db199SXin Li    'SESSION_NEGOTIATE',
87*9c5db199SXin Li    'SESSION_OPEN',
88*9c5db199SXin Li    'UATI_REQUEST',
89*9c5db199SXin Li])
90*9c5db199SXin Li
91*9c5db199SXin Li# todo(byronk): Move this LTE specific data into the LTE call_box object
92*9c5db199SXin LiUeLteDataStatus = Enum('LteDataStatus', [
93*9c5db199SXin Li    'OFF',
94*9c5db199SXin Li    'IDLE',
95*9c5db199SXin Li    'CONNECTED',
96*9c5db199SXin Li    'REGISTERED',
97*9c5db199SXin Li    'LOOPBACK',
98*9c5db199SXin Li    'RELEASE',
99*9c5db199SXin Li    'UNAVAILABLE',
100*9c5db199SXin Li])
101*9c5db199SXin Li
102*9c5db199SXin Li# Each cell technology has a different connection state machine.  For
103*9c5db199SXin Li# generic tests, we want to abstract that away.  UeGenericDataStatus
104*9c5db199SXin Li# is this abstraction, and RatToGenericDataStatus is a map from
105*9c5db199SXin Li# specific states to this generic status.
106*9c5db199SXin Li
107*9c5db199SXin Li
108*9c5db199SXin Li# TODO(rochberg):  Do we need connecting/disconnecting for this level of test?
109*9c5db199SXin LiUeGenericDataStatus = Enum('UeGenericDataStatus', [
110*9c5db199SXin Li    'NONE',             # UE not seen or in transition to/from REGISTERED
111*9c5db199SXin Li    'REGISTERED',       # Network knows about UE
112*9c5db199SXin Li    'CONNECTED',        # Data can be sent
113*9c5db199SXin Li    'CONNECTING',
114*9c5db199SXin Li    'DISCONNECTING',
115*9c5db199SXin Li])
116*9c5db199SXin Li
117*9c5db199SXin Li
118*9c5db199SXin LiRatToGenericDataStatus = {
119*9c5db199SXin Li    UeGsmDataStatus.NONE: UeGenericDataStatus.NONE,
120*9c5db199SXin Li    UeGsmDataStatus.IDLE: UeGenericDataStatus.NONE,
121*9c5db199SXin Li    UeGsmDataStatus.ATTACHING: UeGenericDataStatus.NONE, # Transition
122*9c5db199SXin Li    UeGsmDataStatus.ATTACHED: UeGenericDataStatus.REGISTERED,
123*9c5db199SXin Li    UeGsmDataStatus.DETACHING: UeGenericDataStatus.NONE, # Transition
124*9c5db199SXin Li    UeGsmDataStatus.PDP_ACTIVATING: UeGenericDataStatus.CONNECTING,
125*9c5db199SXin Li    UeGsmDataStatus.PDP_ACTIVE: UeGenericDataStatus.CONNECTED,
126*9c5db199SXin Li    UeGsmDataStatus.PDP_DEACTIVATING: UeGenericDataStatus.DISCONNECTING,
127*9c5db199SXin Li
128*9c5db199SXin Li    UeC2kDataStatus.OFF: UeGenericDataStatus.NONE,
129*9c5db199SXin Li    UeC2kDataStatus.DORMANT: UeGenericDataStatus.CONNECTED,
130*9c5db199SXin Li    UeC2kDataStatus.DATA_CONNECTED: UeGenericDataStatus.CONNECTED,
131*9c5db199SXin Li
132*9c5db199SXin Li    UeEvdoDataStatus.CONNECTION_CLOSING: UeGenericDataStatus.DISCONNECTING,
133*9c5db199SXin Li    UeEvdoDataStatus.CONNECTION_NEGOTIATE: UeGenericDataStatus.CONNECTING,
134*9c5db199SXin Li    UeEvdoDataStatus.CONNECTION_REQUEST: UeGenericDataStatus.CONNECTING,
135*9c5db199SXin Li    UeEvdoDataStatus.DATA_CONNECTED: UeGenericDataStatus.CONNECTED,
136*9c5db199SXin Li    UeEvdoDataStatus.DORMANT: UeGenericDataStatus.CONNECTED,
137*9c5db199SXin Li    UeEvdoDataStatus.HANDOFF: UeGenericDataStatus.CONNECTING,
138*9c5db199SXin Li    UeEvdoDataStatus.IDLE: UeGenericDataStatus.CONNECTED,
139*9c5db199SXin Li    UeEvdoDataStatus.PAGING: UeGenericDataStatus.CONNECTED,
140*9c5db199SXin Li    UeEvdoDataStatus.SESSION_CLOSING: UeGenericDataStatus.DISCONNECTING,
141*9c5db199SXin Li    UeEvdoDataStatus.SESSION_NEGOTIATE: UeGenericDataStatus.CONNECTING,
142*9c5db199SXin Li    UeEvdoDataStatus.SESSION_OPEN: UeGenericDataStatus.REGISTERED,
143*9c5db199SXin Li    UeEvdoDataStatus.UATI_REQUEST: UeGenericDataStatus.NONE,
144*9c5db199SXin Li    UeLteDataStatus.OFF: UeGenericDataStatus.NONE,
145*9c5db199SXin Li    UeLteDataStatus.IDLE: UeGenericDataStatus.NONE,
146*9c5db199SXin Li    UeLteDataStatus.CONNECTED: UeGenericDataStatus.CONNECTED,
147*9c5db199SXin Li    UeLteDataStatus.REGISTERED: UeGenericDataStatus.REGISTERED,
148*9c5db199SXin Li    UeLteDataStatus.LOOPBACK: UeGenericDataStatus.NONE,
149*9c5db199SXin Li    UeLteDataStatus.RELEASE: UeGenericDataStatus.DISCONNECTING,
150*9c5db199SXin Li    UeLteDataStatus.UNAVAILABLE: UeGenericDataStatus.NONE
151*9c5db199SXin Li}
152*9c5db199SXin Li
153*9c5db199SXin Li
154*9c5db199SXin Liclass Power(object):
155*9c5db199SXin Li    """Useful power levels, in dBm."""
156*9c5db199SXin Li    OFF = -200
157*9c5db199SXin Li    DEFAULT = -35
158*9c5db199SXin Li
159*9c5db199SXin Li
160*9c5db199SXin Liclass SmsAddress(object):
161*9c5db199SXin Li    def __init__(self, address, address_type='INAT', address_plan='ISDN'):
162*9c5db199SXin Li        """Constructs an SMS address.
163*9c5db199SXin Li
164*9c5db199SXin Li        For expediency, the address type arguments come from the GPIB
165*9c5db199SXin Li        commands for the Agilent 8960.  See
166*9c5db199SXin Li        http://wireless.agilent.com/rfcomms/refdocs/
167*9c5db199SXin Li               gsmgprs/gprsla_hpib_sms.html#CIHDGBIH
168*9c5db199SXin Li
169*9c5db199SXin Li        Arguments:
170*9c5db199SXin Li            address:  1-10 octets
171*9c5db199SXin Li            address_type:  INAT, NAT, NET, SUBS, ALPH, ABBR, RES
172*9c5db199SXin Li            address_plan:  ISDN, DATA, TEL, SCS1, SCS2, PRIV, NATional,
173*9c5db199SXin Li                           ERMes, RES
174*9c5db199SXin Li        """
175*9c5db199SXin Li        self.address = address
176*9c5db199SXin Li        self.address_type = address_type
177*9c5db199SXin Li        self.address_plan = address_plan
178*9c5db199SXin Li
179*9c5db199SXin Li
180*9c5db199SXin Liclass TestEnvironment(object):
181*9c5db199SXin Li    def __init__(self, event_loop):
182*9c5db199SXin Li        pass
183*9c5db199SXin Li
184*9c5db199SXin Li    def RequestBaseStations(self,
185*9c5db199SXin Li                            configuration,
186*9c5db199SXin Li                            requirements_list):
187*9c5db199SXin Li        """Requests a set of base stations that satisfy the given requirements.
188*9c5db199SXin Li
189*9c5db199SXin Li        Arguments:
190*9c5db199SXin Li            configuration:  configuration dictionary
191*9c5db199SXin Li            requirements_list: A list of lists of technologies that must be
192*9c5db199SXin Li                               supported
193*9c5db199SXin Li
194*9c5db199SXin Li        Returns: a list of base stations.
195*9c5db199SXin Li        """
196*9c5db199SXin Li        pass
197*9c5db199SXin Li
198*9c5db199SXin Li    def TimedOut(self):
199*9c5db199SXin Li        """Called by base stations when an expected event hasn't occurred."""
200*9c5db199SXin Li        pass
201