blob: 490cb30cc096c18bcc7d775db48eb080e4007390 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 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 os
import time
from acts import utils
import acts.test_utils.bt.bt_test_utils as bt_utils
import acts.test_utils.wifi.wifi_performance_test_utils as wifi_utils
from acts.test_utils.bt.ble_performance_test_utils import ble_gatt_disconnection
from acts.test_utils.bt.ble_performance_test_utils import ble_coc_connection
from acts.test_utils.bt.bt_constants import l2cap_max_inactivity_delay_after_disconnect
from acts.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
from acts.test_utils.bt.BtSarBaseTest import BtSarBaseTest
FIXED_ATTENUATION = 36
class BleSarPowerLimitTest(BtSarBaseTest):
"""Class to define BLE SAR power cap tests.
This class defines tests that iterate over and force different
states in the BLE SAR table and calculates the TX power at the
antenna port.
"""
def setup_class(self):
super().setup_class()
self.bt_device = self.android_devices[1]
return setup_multiple_devices_for_bt_test(self.android_devices)
def setup_test(self):
#self.dut.droid.bluetoothFactoryReset()
#bt_utils.enable_bluetooth(self.dut.droid, self.bt_device.ed)
#Reset SAR test result to 0 before every test
self.sar_test_result.metric_value = 0
# To prevent default file from being overwritten
self.dut.adb.shell('cp {} {}'.format(self.power_file_paths[0],
self.power_file_paths[1]))
self.sar_file_path = self.power_file_paths[1]
self.sar_file_name = os.path.basename(self.power_file_paths[1])
self.bt_sar_df = self.read_sar_table(self.dut)
utils.set_location_service(self.bt_device, True)
utils.set_location_service(self.dut, True)
self.attenuator.set_atten(FIXED_ATTENUATION)
self.log.info('Attenuation set to {} dB'.format(FIXED_ATTENUATION))
# BokehFigure object
self.plot = wifi_utils.BokehFigure(title='{}'.format(
self.current_test_name),
x_label='Scenarios',
primary_y_label='TX power(dBm)')
def teardown_test(self):
# Deleting the table
self.dut.adb.shell('rm {}'.format(self.power_file_paths[1]))
self.attenuator.set_atten(self.atten_min)
self.log.info('Attenuation set to {} dB'.format(self.atten_min))
ble_gatt_disconnection(self.bt_device, self.bluetooth_gatt,
self.gatt_callback)
self.bt_device.droid.bluetoothSocketConnStop()
self.dut.droid.bluetoothSocketConnStop()
time.sleep(l2cap_max_inactivity_delay_after_disconnect)
self.dut.droid.bluetoothFactoryReset()
bt_utils.disable_bluetooth(self.dut.droid)
def teardown_class(self):
bt_utils.disable_bluetooth(self.dut.droid)
def test_ble_sar_table(self):
""" Test for BLE SAR default table
BLE SAR table Test iterates over BT SAR default table and forces signal states, by
measuring ble RSSI and power level for each state and processes the results of
sweep_table and computes BLE TX power and parses the processed table with
computed BLE TX power values to return pass or fail
"""
# Establish CoC BLE connection
self.status, self.gatt_callback, self.gatt_server, self.bluetooth_gatt, \
self.client_conn_id = ble_coc_connection(self.bt_device, self.dut)
sar_df = self.sweep_table(self.dut,
self.bt_device,
self.client_conn_id,
self.gatt_server,
self.gatt_callback,
isBLE=True)
sar_df = self.process_table(sar_df)
self.process_results(sar_df, type='BLE')
def test_ble_sar_custom_table(self):
""" Test for BLE SAR custom table
BLE SAR custom table Test Iterates over BT SAR custom table and forces signal states, by
measuring ble RSSI and power level for each state and processes the results of
sweep_table and computes BLE TX power and parses the processed table with
computed BLE TX power values to return pass or fail
"""
self.push_table(self.dut, self.custom_sar_path)
setup_multiple_devices_for_bt_test(self.android_devices)
# Establish CoC BLE connection
self.status, self.gatt_callback, self.gatt_server, self.bluetooth_gatt, \
self.client_conn_id = ble_coc_connection(self.bt_device, self.dut)
sar_df = self.sweep_table(self.dut,
self.bt_device,
self.client_conn_id,
self.gatt_server,
self.gatt_callback,
isBLE=True)
sar_df = self.process_table(sar_df)
self.process_results(sar_df, type='BLE')