# Lint as: python2, python3 # Copyright 2019 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. """ This class provides functions to initialize variable attentuator used for Bluetooth range vs rate tests """ import logging from autotest_lib.client.bin import utils from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib import global_config from autotest_lib.client.common_lib.cros.network import ping_runner from autotest_lib.server.cros import dnsname_mangler from autotest_lib.server.cros.network import attenuator_controller def init_btattenuator(host, args_dict): """ Function to initialize bluetooth attenuator and zero the attenuator Attenuator address can be passed as argument to test_that or have to be derived from the host name (hostname-btattenuator). For devices in lab, attenuator is assumed to be absent unless added to attenuator_hosts.py file If attenuator is present but not accessible, an exception is raised. @param host: cros host object representing the DUT args_dict : arguments passed to test_that @return: AttenuatorController object if attenutator is present else None @raises: TestError if attenautor init fails or if attenutator cannot be accessed """ try: if not utils.is_in_container(): is_moblab = utils.is_moblab() else: is_moblab = global_config.global_config.get_config_value( 'SSP', 'is_moblab', type=bool, default=False) if is_moblab: # TODO(b:183231262) Implement for moblab logging.debug('bt attenuator not implemented for moblab') return None # If attenuator address is provided in args, then it is used # else try to derive attenuator hostname from DUT hostname btattenuator_args = host.get_btattenuator_arguments( args_dict) if args_dict is not None else {} btatten_addr = btattenuator_args.get('btatten_addr') btatten_addr = dnsname_mangler.get_btattenuator_addr( host.hostname, btatten_addr, True) logging.debug('Bluetooth attentuator address is %s', btatten_addr) if not btatten_addr: logging.debug('Bluetooth attenuator not present') return None # Attenuator retains previous attenuation set even if it powered down # Do not proceed if attenutator is not accessible if not ping_runner.PingRunner().simple_ping(btatten_addr): logging.debug('Bluetooth attenuator not accessible') return None # Init also sets attenutation to zero logging.debug('Initializing bluetooth attenuator') return attenuator_controller.AttenuatorController(btatten_addr) except error.TestError: raise except Exception as e: logging.error('Exception %s while initializing bt attenuator', str(e)) return None