blob: 4cd2dd76bbbf41055f4e09e98c11384afc0217b9 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import acts_contrib.test_utils.bt.bt_test_utils as btutils
from acts_contrib.test_utils.bt.A2dpBaseTest import A2dpBaseTest
from acts_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
from acts_contrib.test_utils.bt.bt_test_utils import generate_ble_scan_objects
from acts_contrib.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
from acts_contrib.test_utils.bt.bt_constants import scan_result
INIT_ATTEN = 0
class BtA2dpRangeWithBleScanTest(A2dpBaseTest):
"""User can generate test case with below format.
test_bt_a2dp_range_codec_"Codec"_with_BLE_scan_"Scan Mode"
Below are the list of test cases:
test_bt_a2dp_range_codec_AAC_with_BLE_scan_balanced
test_bt_a2dp_range_codec_AAC_with_BLE_scan_low_latency
test_bt_a2dp_range_codec_AAC_with_BLE_scan_low_power
test_bt_a2dp_range_codec_AAC_with_BLE_scan_opportunistic
test_bt_a2dp_range_codec_SBC_with_BLE_scan_balanced
test_bt_a2dp_range_codec_SBC_with_BLE_scan_low_latency
test_bt_a2dp_range_codec_SBC_with_BLE_scan_low_power
test_bt_a2dp_range_codec_SBC_with_BLE_scan_opportunistic
"""
def __init__(self, configs):
super().__init__(configs)
req_params = ['attenuation_vector', 'codecs']
opt_params = ['gain_mismatch', 'dual_chain']
#'attenuation_vector' is a dict containing: start, stop and step of attenuation changes
#'codecs' is a list containing all codecs required in the tests
#'gain_mismatch' is an offset value between the BT two chains
#'dual_chain' set to 1 enable sweeping attenuation for BT two chains
self.unpack_userparams(req_params)
self.unpack_userparams(opt_params, dual_chian=None, gain_mismatch=None)
def setup_generated_tests(self):
for codec_config in self.codecs:
for scan_mode in ble_scan_settings_modes.items():
arg_set = [(codec_config, scan_mode)]
self.generate_tests(
test_logic=self.BtA2dp_with_ble_scan_test_logic,
name_func=self.create_test_name,
arg_sets=arg_set)
def setup_class(self):
super().setup_class()
#Enable BQR on all android devices
btutils.enable_bqr(self.android_devices)
if hasattr(self, 'dual_chain') and self.dual_chain == 1:
self.atten_c0 = self.attenuators[0]
self.atten_c1 = self.attenuators[1]
self.atten_c0.set_atten(INIT_ATTEN)
self.atten_c1.set_atten(INIT_ATTEN)
return setup_multiple_devices_for_bt_test(self.android_devices)
def teardown_class(self):
super().teardown_class()
if hasattr(self, 'atten_c0') and hasattr(self, 'atten_c1'):
self.atten_c0.set_atten(INIT_ATTEN)
self.atten_c1.set_atten(INIT_ATTEN)
def BtA2dp_with_ble_scan_test_logic(self, codec_config, scan_mode):
scan_callback = self.start_ble_scan(scan_mode[1])
self.run_a2dp_to_max_range(codec_config)
self.dut.droid.bleStopBleScan(scan_callback)
self.log.info("BLE Scan stopped successfully")
def create_test_name(self, codec_config, scan_mode):
if hasattr(self, 'dual_chain') and self.dual_chain == 1:
test_case_name = 'test_dual_bt_a2dp_range_codec_{}_gainmismatch_{}dB_with_BLE_scan_{}'.format(
codec_config['codec_type'], self.gain_mismatch, scan_mode[0])
else:
test_case_name = 'test_bt_a2dp_range_codec_{}_with_BLE_scan_{}'.format(
codec_config['codec_type'], scan_mode[0])
return test_case_name
def start_ble_scan(self, scan_mode):
""" This function will start Ble Scan with different scan mode.
Args:
Scan_mode: Ble scan setting modes
returns:
Scan_callback: Ble scan callback
"""
self.dut.droid.bleSetScanSettingsScanMode(scan_mode)
filter_list, scan_settings, scan_callback = generate_ble_scan_objects(
self.dut.droid)
self.dut.droid.bleStartBleScan(filter_list, scan_settings,
scan_callback)
self.log.info("BLE Scanning started successfully")
return scan_callback