# Copyright (c) 2011 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.
"""Base class interface for base station emulators."""
# This is essentially all documentation; no code (other than raise
# NotImplementedError()) should go here."""
import air_state_verifier
import cellular
class BaseStationInterface(object):
"""A generic base station emulator."""
def Start(self):
raise NotImplementedError()
def Stop(self):
raise NotImplementedError()
def GetAirStateVerifier(self):
return air_state_verifier.AirStateVerifierPermissive(self)
def SetBsIpV4(self, ip1, ip2):
"""Sets base station IPv4 addresses."""
raise NotImplementedError()
def SetBsNetmaskV4(self, netmask):
"""Sets base station netmask."""
raise NotImplementedError()
def SetFrequencyBand(self, band):
"""Sets the frequency used by the BS. BS must be stopped.
Arguments:
band: A band number, from the UMTS bands summarized at
http://en.wikipedia.org/wiki/UMTS_frequency_bands
Use band 5 for 800MHz C2k/EV-DO, 2 for 1900MHz C2k/EV-DO
"""
raise NotImplementedError()
def SetPlmn(self, mcc, mnc):
"""Sets the mobile country and network codes. BS must be stopped."""
raise NotImplementedError()
def SetPower(self, dbm):
"""Sets the output power of the base station.
Arguments:
dbm: Power, in dBm. See class Power for useful constants.
"""
raise NotImplementedError()
def SetUeDnsV4(self, dns1, dns2):
"""Set the DNS values provided to the UE. Emulator must be stopped.
"""
raise NotImplementedError()
def SetUeIpV4(self, ip1, ip2=None):
"""Set the IP addresses provided to the UE. Emulator must be stopped.
Arguments:
ip1: IP address, as a dotted-quad string.
ip2: Secondary IP address. Not set if not supplied.
"""
raise NotImplementedError()
def GetUeDataStatus(self):
"""Gets the data call status of the UE."""
raise NotImplementedError()
def PrepareForStatusChange(self):
"""Prepare for a future call to WaitForStatusChange.
There's a race in WaitForStatusChange; if we tell the modem to
connect, it might connect before we get around to calling
PrepareForStatusChange.
As a special case for 8960, this tells the instrument to make the
next GetUeStatus call block on a status change.
"""
raise NotImplementedError()
def WaitForStatusChange(self,
interested=None,
timeout=cellular.DEFAULT_TIMEOUT):
"""When UE status changes (to a value in interested), return the value.
Arguments:
interested: if non-None, only transitions to these states will
cause a return
timeout: in seconds.
"""
raise NotImplementedError()
def WaitForSmsReceive(self,
timeout=cellular.DEFAULT_TIMEOUT):
"""Return received SMS is received from the UE.
Arguments:
timeout: in seconds.
"""
raise NotImplementedError()
def SendSms(self,
message,
o_address=cellular.SmsAddress('8960'),
dcs=0xf0):
"""Sends the supplied SMS message."""
raise NotImplementedError()