blob: 1c20301b0b56c3fd35659144bd4341f6c5751c17 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (C) 2016 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.
"""
This is base class for tests that exercises different GATT procedures between two connected devices.
Setup/Teardown methods take care of establishing connection, and doing GATT DB initialization/discovery.
"""
import os
import time
from queue import Empty
from acts.keys import Config
from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
from acts_contrib.test_utils.bt.bt_test_utils import pair_pri_to_sec
from acts_contrib.test_utils.tel.tel_phone_setup_utils import ensure_phones_default_state
from acts_contrib.test_utils.tel.tel_test_utils import get_phone_number
from acts_contrib.test_utils.tel.tel_test_utils import setup_droid_properties
class BluetoothCarHfpBaseTest(BluetoothBaseTest):
DEFAULT_TIMEOUT = 15
ag_phone_number = ""
re_phone_number = ""
def __init__(self, controllers):
BluetoothBaseTest.__init__(self, controllers)
# HF : HandsFree (CarKit role)
self.hf = self.android_devices[0]
self.hf.log.info("Role set to HF (HandsFree Carkit role).")
# AG : Audio Gateway (Phone role)
self.ag = self.android_devices[1]
self.ag.log.info("Role set to AG (Audio Gateway Phone role).")
# RE : Remote Device (Phone being talked to role)
if len(self.android_devices) > 2:
self.re = self.android_devices[2]
self.re.log.info("Role set to RE (Remote device).")
else:
self.re = None
if len(self.android_devices) > 3:
self.re2 = self.android_devices[3]
self.re2.log.info("Role set to RE2 (Remote device 2).")
else:
self.re2 = None
def setup_class(self):
super(BluetoothCarHfpBaseTest, self).setup_class()
if not "sim_conf_file" in self.user_params.keys():
self.log.error("Missing mandatory user config \"sim_conf_file\"!")
return False
sim_conf_file = self.user_params["sim_conf_file"][0]
if not os.path.isfile(sim_conf_file):
sim_conf_file = os.path.join(
self.user_params[Config.key_config_path.value], sim_conf_file)
if not os.path.isfile(sim_conf_file):
self.log.error("Unable to load user config " + sim_conf_file +
" from test config file.")
return False
setup_droid_properties(self.log, self.ag, sim_conf_file)
self.ag_phone_number = get_phone_number(self.log, self.ag)
self.ag.log.info("ag tel: {}".format(self.ag_phone_number))
if self.re:
setup_droid_properties(self.log, self.re, sim_conf_file)
self.re_phone_number = get_phone_number(self.log, self.re)
self.re.log.info("re tel: {}".format(self.re_phone_number))
if self.re2:
setup_droid_properties(self.log, self.re2, sim_conf_file)
self.re2_phone_number = get_phone_number(self.log, self.re2)
self.re2.log.info("re2 tel: {}".format(self.re2_phone_number))
# Pair and connect the devices.
# Grace time inbetween stack state changes
time.sleep(5)
if not pair_pri_to_sec(
self.hf, self.ag, attempts=4, auto_confirm=False):
self.log.error("Failed to pair")
return False
return True
def setup_test(self):
if not super(BluetoothCarHfpBaseTest, self).setup_test():
return False
return ensure_phones_default_state(self.log, self.android_devices[1:])
def teardown_test(self):
if not super(BluetoothCarHfpBaseTest, self).teardown_test():
return False
return ensure_phones_default_state(self.log, self.android_devices[1:])
def on_fail(self, test_name, begin_time):
result = True
if not super(BluetoothCarHfpBaseTest, self).on_fail(test_name,
begin_time):
result = False
ensure_phones_default_state(self.log, self.android_devices[1:])
return result