1b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg# Use of this source code is governed by a BSD-style license that can be 3b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg# found in the LICENSE file. 4b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 5b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg"""Constants, enums, and basic types for cellular base station emulation.""" 6b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 7b3a65823851f8ad28d214ad005765bf6b9805480David RochbergDEFAULT_TIMEOUT = 10 8b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 9b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 108f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochbergdef Enum(enum_name, items): 11e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """Build a class with a member for each item. 129f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 13e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan Arguments: 14e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan members: A list of items for the enum. They must be valid python 15e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan identifiers 16e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """ 17e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan class output(object): 18e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan pass 199f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 20e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan for item in items: 21e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan setattr(output, item, enum_name + ':' + item) 229f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 23e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan return output 249f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 259f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 268f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergTechnology = Enum('Technology', [ 279f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'GPRS', 289f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'EGPRS', 299f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'WCDMA', 309f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'HSDPA', 31c3df3886dfd11de46b744b8c98a7443b704d87afJason Glasgow 'HSUPA', 329f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'HSDUPA', 339f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'HSPA_PLUS', 349f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'CDMA_2000', 358f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'EVDO_1X', 369f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'LTE' 37e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan]) 389f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 395cf6379550561ad2def92cbafcd05f34851eefb5David RochbergTechnologyFamily = Enum('TechnologyFamily', [ 405cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg 'UMTS', 415cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg 'CDMA', 42630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'LTE' 43e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan]) 445cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg 455cf6379550561ad2def92cbafcd05f34851eefb5David RochbergTechnologyToFamily = { 465cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.GPRS: TechnologyFamily.UMTS, 475cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.EGPRS: TechnologyFamily.UMTS, 485cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.WCDMA: TechnologyFamily.UMTS, 495cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.HSDPA: TechnologyFamily.UMTS, 50c3df3886dfd11de46b744b8c98a7443b704d87afJason Glasgow Technology.HSUPA: TechnologyFamily.UMTS, 515cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.HSDUPA: TechnologyFamily.UMTS, 525cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.HSPA_PLUS: TechnologyFamily.UMTS, 535cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.CDMA_2000: TechnologyFamily.CDMA, 545cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg Technology.EVDO_1X: TechnologyFamily.CDMA, 55630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert Technology.LTE: TechnologyFamily.LTE, 565cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg} 575cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg 585cf6379550561ad2def92cbafcd05f34851eefb5David Rochberg 598f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergUeGsmDataStatus = Enum('GsmDataStatus', [ 609f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'NONE', 619f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'IDLE', 629f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'ATTACHING', 632b92e830cedcc866ad028bea0e65f2bd4929708bDavid Rochberg 'ATTACHED', 649f21ba40e6135220f6f4bdca6c1ddf96910d2b20David Rochberg 'DETACHING', 658f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'PDP_ACTIVATING', 668f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'PDP_ACTIVE', 678f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'PDP_DEACTIVATING', 68e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan]) 69b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 708f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergUeC2kDataStatus = Enum('C2kDataStatus', [ 718f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'OFF', 728f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'DORMANT', 738f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'DATA_CONNECTED', 748f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg]) 758f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 768f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergUeEvdoDataStatus = Enum('EvdoDataStatus', [ 778f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'CONNECTION_CLOSING', 788f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'CONNECTION_NEGOTIATE', 798f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'CONNECTION_REQUEST', 808f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'DATA_CONNECTED', 818f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'DORMANT', 828f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'HANDOFF', 838f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'IDLE', 848f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'PAGING', 858f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'SESSION_CLOSING', 868f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'SESSION_NEGOTIATE', 878f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'SESSION_OPEN', 888f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'UATI_REQUEST', 898f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg]) 908f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 91630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert# todo(byronk): Move this LTE specific data into the LTE call_box object 92630f29391fabb13a6e6d191fa747e81512bcb726Byron KubertUeLteDataStatus = Enum('LteDataStatus', [ 93630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'OFF', 94630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'IDLE', 95630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'CONNECTED', 96630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'REGISTERED', 97630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'LOOPBACK', 98630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'RELEASE', 99630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 'UNAVAILABLE', 100630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert]) 1018f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1028f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg# Each cell technology has a different connection state machine. For 1038f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg# generic tests, we want to abstract that away. UeGenericDataStatus 1048f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg# is this abstraction, and RatToGenericDataStatus is a map from 1058f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg# specific states to this generic status. 1068f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1078f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1088f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg# TODO(rochberg): Do we need connecting/disconnecting for this level of test? 1098f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergUeGenericDataStatus = Enum('UeGenericDataStatus', [ 1108f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'NONE', # UE not seen or in transition to/from REGISTERED 1118f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'REGISTERED', # Network knows about UE 1128f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'CONNECTED', # Data can be sent 1138f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'CONNECTING', 1148f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 'DISCONNECTING', 115e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan]) 1168f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1178f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1188f72603f571bad5197dcd8fe04c210b38dac71bcDavid RochbergRatToGenericDataStatus = { 1198f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.NONE: UeGenericDataStatus.NONE, 1208f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.IDLE: UeGenericDataStatus.NONE, 1218f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.ATTACHING: UeGenericDataStatus.NONE, # Transition 1222b92e830cedcc866ad028bea0e65f2bd4929708bDavid Rochberg UeGsmDataStatus.ATTACHED: UeGenericDataStatus.REGISTERED, 1238f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.DETACHING: UeGenericDataStatus.NONE, # Transition 1248f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.PDP_ACTIVATING: UeGenericDataStatus.CONNECTING, 1258f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.PDP_ACTIVE: UeGenericDataStatus.CONNECTED, 1268f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeGsmDataStatus.PDP_DEACTIVATING: UeGenericDataStatus.DISCONNECTING, 1278f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1288f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeC2kDataStatus.OFF: UeGenericDataStatus.NONE, 1298f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeC2kDataStatus.DORMANT: UeGenericDataStatus.CONNECTED, 1308f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeC2kDataStatus.DATA_CONNECTED: UeGenericDataStatus.CONNECTED, 1318f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1328f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.CONNECTION_CLOSING: UeGenericDataStatus.DISCONNECTING, 1338f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.CONNECTION_NEGOTIATE: UeGenericDataStatus.CONNECTING, 1348f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.CONNECTION_REQUEST: UeGenericDataStatus.CONNECTING, 1358f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.DATA_CONNECTED: UeGenericDataStatus.CONNECTED, 1368f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.DORMANT: UeGenericDataStatus.CONNECTED, 1378f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.HANDOFF: UeGenericDataStatus.CONNECTING, 1388f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.IDLE: UeGenericDataStatus.CONNECTED, 1398f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.PAGING: UeGenericDataStatus.CONNECTED, 1408f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.SESSION_CLOSING: UeGenericDataStatus.DISCONNECTING, 1418f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.SESSION_NEGOTIATE: UeGenericDataStatus.CONNECTING, 1428f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.SESSION_OPEN: UeGenericDataStatus.REGISTERED, 1438f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg UeEvdoDataStatus.UATI_REQUEST: UeGenericDataStatus.NONE, 144630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.OFF: UeGenericDataStatus.NONE, 145630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.IDLE: UeGenericDataStatus.NONE, 146630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.CONNECTED: UeGenericDataStatus.CONNECTED, 147630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.REGISTERED: UeGenericDataStatus.REGISTERED, 148630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.LOOPBACK: UeGenericDataStatus.NONE, 149630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.RELEASE: UeGenericDataStatus.DISCONNECTING, 150630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert UeLteDataStatus.UNAVAILABLE: UeGenericDataStatus.NONE 1518f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg} 1528f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 1538f72603f571bad5197dcd8fe04c210b38dac71bcDavid Rochberg 154b3a65823851f8ad28d214ad005765bf6b9805480David Rochbergclass Power(object): 155e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """Useful power levels, in dBm.""" 156e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan OFF = -200 157e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan DEFAULT = -35 158b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 159b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 160b3a65823851f8ad28d214ad005765bf6b9805480David Rochbergclass SmsAddress(object): 161e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan def __init__(self, address, address_type='INAT', address_plan='ISDN'): 162e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """Constructs an SMS address. 163e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 164e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan For expediency, the address type arguments come from the GPIB 165e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan commands for the Agilent 8960. See 166e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan http://wireless.agilent.com/rfcomms/refdocs/ 167e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan gsmgprs/gprsla_hpib_sms.html#CIHDGBIH 168e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 169e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan Arguments: 170e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan address: 1-10 octets 171e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan address_type: INAT, NAT, NET, SUBS, ALPH, ABBR, RES 172e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan address_plan: ISDN, DATA, TEL, SCS1, SCS2, PRIV, NATional, 173e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan ERMes, RES 174e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """ 175e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan self.address = address 176e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan self.address_type = address_type 177e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan self.address_plan = address_plan 178b3a65823851f8ad28d214ad005765bf6b9805480David Rochberg 179630f29391fabb13a6e6d191fa747e81512bcb726Byron Kubert 180b3a65823851f8ad28d214ad005765bf6b9805480David Rochbergclass TestEnvironment(object): 181e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan def __init__(self, event_loop): 182e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan pass 183e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 184e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan def RequestBaseStations(self, 185e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan configuration, 186e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan requirements_list): 187e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """Requests a set of base stations that satisfy the given requirements. 188e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 189e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan Arguments: 190e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan configuration: configuration dictionary 191e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan requirements_list: A list of lists of technologies that must be 192e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan supported 193e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 194e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan Returns: a list of base stations. 195e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """ 196e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan pass 197e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan 198e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan def TimedOut(self): 199e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan """Called by base stations when an expected event hasn't occurred.""" 200e5c6fd854508a2335ae6ce18b9651cee5a1004afBen Chan pass 201