Multidevice CTS tests
Bug: 243666928
Bug: 229730966
Fixes: 243666928
Fixes: 229730966
Test: http://ab/I06700010101675154
Merged-In: I152e005a0574e1c47f4aa0c6b6bf8c6b212d24b7
Change-Id: Iebad38da55ca450f092f4e6779a4421af2ad617c
diff --git a/tests/cts/hostsidetests/multidevices/uwb/Android.bp b/tests/cts/hostsidetests/multidevices/uwb/Android.bp
index fd8f848..e78656c 100644
--- a/tests/cts/hostsidetests/multidevices/uwb/Android.bp
+++ b/tests/cts/hostsidetests/multidevices/uwb/Android.bp
@@ -16,8 +16,24 @@
default_applicable_licenses: ["Android-Apache-2.0"],
}
+python_defaults {
+ name: "CtsUwbMultiDevicePythonDefaults",
+ libs: [
+ "mobly",
+ ],
+ test_suites: [
+ "cts",
+ "general-tests",
+ ],
+ version: {
+ py3: {
+ embedded_launcher: true,
+ },
+ },
+}
+
python_test_host {
- name: "CtsUwbMultiDeviceTestCases",
+ name: "CtsUwbMultiDeviceTestCase_UwbManagerTests",
main: "uwb_manager_test.py",
srcs: [
"uwb_manager_test.py",
@@ -26,13 +42,7 @@
"lib/uwb_ranging_params.py",
"test_utils/uwb_test_utils.py",
],
- libs: [
- "mobly",
- ],
- test_suites: [
- "cts",
- "general-tests",
- ],
+ test_config: "UwbManagerTests/AndroidTest.xml",
test_options: {
unit_test: false,
},
@@ -40,9 +50,26 @@
// Package the snippet with the mobly test
":uwb_snippet",
],
- version: {
- py3: {
- embedded_launcher: true,
- },
+ defaults: ["CtsUwbMultiDevicePythonDefaults"],
+}
+
+python_test_host {
+ name: "CtsUwbMultiDeviceTestCase_FiraRangingTests",
+ main: "ranging_test.py",
+ srcs: [
+ "ranging_test.py",
+ "lib/uwb_base_test.py",
+ "lib/uwb_ranging_decorator.py",
+ "lib/uwb_ranging_params.py",
+ "test_utils/uwb_test_utils.py",
+ ],
+ test_config: "FiraRangingTests/AndroidTest.xml",
+ test_options: {
+ unit_test: false,
},
+ data: [
+ // Package the snippet with the mobly test
+ ":uwb_snippet",
+ ],
+ defaults: ["CtsUwbMultiDevicePythonDefaults"],
}
diff --git a/tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml b/tests/cts/hostsidetests/multidevices/uwb/FiraRangingTests/AndroidTest.xml
similarity index 96%
copy from tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml
copy to tests/cts/hostsidetests/multidevices/uwb/FiraRangingTests/AndroidTest.xml
index 8e852a3..94ce8f1 100644
--- a/tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml
+++ b/tests/cts/hostsidetests/multidevices/uwb/FiraRangingTests/AndroidTest.xml
@@ -43,9 +43,9 @@
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
- <option name="mobly-par-file-name" value="CtsUwbMultiDeviceTestCases" />
+ <option name="mobly-par-file-name" value="CtsUwbMultiDeviceTestCase_FiraRangingTests" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
- <option name="mobly-test-timeout" value="60000" />
+ <option name="mobly-test-timeout" value="900000" />
</test>
</configuration>
diff --git a/tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml b/tests/cts/hostsidetests/multidevices/uwb/UwbManagerTests/AndroidTest.xml
similarity index 98%
rename from tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml
rename to tests/cts/hostsidetests/multidevices/uwb/UwbManagerTests/AndroidTest.xml
index 8e852a3..750f6de 100644
--- a/tests/cts/hostsidetests/multidevices/uwb/AndroidTest.xml
+++ b/tests/cts/hostsidetests/multidevices/uwb/UwbManagerTests/AndroidTest.xml
@@ -43,7 +43,7 @@
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
- <option name="mobly-par-file-name" value="CtsUwbMultiDeviceTestCases" />
+ <option name="mobly-par-file-name" value="CtsUwbMultiDeviceTestCase_UwbManagerTests" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="60000" />
</test>
diff --git a/tests/cts/hostsidetests/multidevices/uwb/lib/uwb_base_test.py b/tests/cts/hostsidetests/multidevices/uwb/lib/uwb_base_test.py
index b7e67b1..bd4dac2 100644
--- a/tests/cts/hostsidetests/multidevices/uwb/lib/uwb_base_test.py
+++ b/tests/cts/hostsidetests/multidevices/uwb/lib/uwb_base_test.py
@@ -17,7 +17,8 @@
def setup_class(self):
"""Sets up the Android devices for Uwb test."""
super().setup_class()
- self.android_devices = self.register_controller(android_device)
+ self.android_devices = self.register_controller(android_device,
+ min_number=2)
for ad in self.android_devices:
ad.load_snippet("uwb", "com.google.snippet.uwb")
ad.adb.shell(["cmd", "uwb", "force-country-code", "enabled", "US"])
diff --git a/tests/cts/hostsidetests/multidevices/uwb/ranging_test.py b/tests/cts/hostsidetests/multidevices/uwb/ranging_test.py
new file mode 100644
index 0000000..da0596e
--- /dev/null
+++ b/tests/cts/hostsidetests/multidevices/uwb/ranging_test.py
@@ -0,0 +1,1117 @@
+"""Tests for Uwb Ranging APIs."""
+
+import logging
+import random
+import sys
+from typing import List
+
+from mobly import asserts
+from mobly import config_parser
+from mobly import test_runner
+from mobly import records
+from mobly import signals
+import timeout_decorator
+
+from lib import uwb_base_test
+from lib import uwb_ranging_decorator
+from lib import uwb_ranging_params
+from test_utils import uwb_test_utils
+
+RESPONDER_STOP_CALLBACK_TIMEOUT = 60
+
+_TEST_CASES = (
+ "test_ranging_device_tracker_profile_default",
+ "test_ranging_nearby_share_profile_default",
+ "test_ranging_device_tracker_profile_reconfigure_ranging_interval",
+ "test_ranging_nearby_share_profile_reconfigure_ranging_interval",
+ "test_ranging_device_tracker_profile_no_aoa_report",
+ "test_ranging_nearby_share_profile_hopping_mode_enabled",
+ "test_ranging_rr_ss_twr_deferred_device_tracker_profile",
+ "test_ranging_rr_ss_twr_deferred_nearby_share_profile",
+ "test_stop_initiator_ranging_device_tracker_profile",
+ "test_stop_initiator_ranging_nearby_share_profile",
+ "test_stop_responder_ranging_device_tracker_profile",
+ "test_stop_responder_ranging_nearby_share_profile",
+ "test_ranging_device_tracker_profile_with_airplane_mode_toggle",
+ "test_ranging_nearby_share_profile_with_airplane_mode_toggle",
+)
+
+
+class RangingTest(uwb_base_test.UwbBaseTest):
+ """Tests for UWB Ranging APIs.
+
+ Attributes:
+ android_devices: list of android device objects.
+ """
+
+ def __init__(self, configs: config_parser.TestRunConfig):
+ """Init method for the test class.
+
+ Args:
+ configs: A config_parser.TestRunConfig object.
+ """
+ super().__init__(configs)
+ self.tests = _TEST_CASES
+
+ def setup_class(self):
+ super().setup_class()
+ self.uwb_devices = [
+ uwb_ranging_decorator.UwbRangingDecorator(ad)
+ for ad in self.android_devices
+ ]
+ self.initiator, self.responder = self.uwb_devices
+ self.device_addresses = self.user_params.get("device_addresses",
+ [[1, 2], [3, 4]])
+ self.initiator_addr, self.responder_addr = self.device_addresses
+ self.new_responder_addr = [4, 5]
+ self.block_stride_length = random.randint(1, 10)
+
+ def setup_test(self):
+ super().setup_test()
+ for uwb_device in self.uwb_devices:
+ try:
+ uwb_device.close_ranging()
+ except timeout_decorator.TimeoutError:
+ uwb_device.log.warn("Failed to cleanup ranging sessions")
+ for uwb_device in self.uwb_devices:
+ uwb_test_utils.set_airplane_mode(uwb_device.ad, False)
+
+ def teardown_test(self):
+ super().teardown_test()
+ self.responder.stop_ranging()
+ self.initiator.stop_ranging()
+ self.responder.close_ranging()
+ self.initiator.close_ranging()
+
+ def teardown_class(self):
+ super().teardown_class()
+ for count, ad in enumerate(self.android_devices):
+ test_name = "initiator" if not count else "responder"
+ ad.take_bug_report(
+ test_name=test_name, destination=self.current_test_info.output_path)
+
+ ### Helper Methods ###
+
+ def _verify_one_to_one_ranging(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ responder: uwb_ranging_decorator.UwbRangingDecorator,
+ initiator_params: uwb_ranging_params.UwbRangingParams,
+ responder_params: uwb_ranging_params.UwbRangingParams,
+ peer_addr: List[int]):
+ """Verifies ranging between two uwb devices.
+
+ Args:
+ initiator: uwb device object.
+ responder: uwb device object.
+ initiator_params: ranging params for initiator.
+ responder_params: ranging params for responder.
+ peer_addr: address of uwb device.
+ """
+ initiator.open_fira_ranging(initiator_params)
+ responder.open_fira_ranging(responder_params)
+ initiator.start_fira_ranging()
+ responder.start_fira_ranging()
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ def _verify_one_to_one_ranging_reconfigured_params(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ responder: uwb_ranging_decorator.UwbRangingDecorator,
+ initiator_params: uwb_ranging_params.UwbRangingParams,
+ responder_params: uwb_ranging_params.UwbRangingParams,
+ peer_addr: List[int]):
+ """Verifies ranging between two uwb devices with reconfigured params.
+
+ Args:
+ initiator: The uwb device object.
+ responder: The uwb device object.
+ initiator_params: The ranging params for initiator.
+ responder_params: The ranging params for responder.
+ peer_addr: The new address of uwb device.
+ """
+ # change responder addr and verify peer cannot be found
+ responder_params.update(device_address=peer_addr)
+ responder.open_fira_ranging(responder_params)
+ responder.start_fira_ranging()
+ try:
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+ asserts.fail("Peer found without reconfiguring initiator.")
+ except signals.TestFailure:
+ logging.info("Peer %s not found as expected", peer_addr)
+
+ # reconfigure initiator with new peer addr and verify peer found
+ reconfigure_params = uwb_ranging_params.UwbRangingReconfigureParams(
+ action=uwb_ranging_params.FiraParamEnums
+ .MULTICAST_LIST_UPDATE_ACTION_ADD,
+ address_list=[peer_addr])
+ initiator.reconfigure_fira_ranging(reconfigure_params)
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ def _verify_stop_initiator_callback(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ responder: uwb_ranging_decorator.UwbRangingDecorator,
+ initiator_params: uwb_ranging_params.UwbRangingParams,
+ responder_params: uwb_ranging_params.UwbRangingParams,
+ peer_addr: List[int]):
+ """Verifies stop callback on initiator.
+
+ Args:
+ initiator: uwb device object.
+ responder: uwb device object.
+ initiator_params: ranging params for initiator.
+ responder_params: ranging params for responder.
+ peer_addr: address of uwb device.
+ """
+
+ # Verify ranging
+ self._verify_one_to_one_ranging(initiator, responder, initiator_params,
+ responder_params, peer_addr)
+
+ # Verify Stopped callbacks
+ initiator.stop_ranging()
+ responder.verify_callback_received(
+ "Stopped", timeout=RESPONDER_STOP_CALLBACK_TIMEOUT)
+
+ # Restart and verify ranging
+ initiator.start_fira_ranging()
+ responder.start_fira_ranging()
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ def _verify_stop_responder_callback(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ responder: uwb_ranging_decorator.UwbRangingDecorator,
+ initiator_params: uwb_ranging_params.UwbRangingParams,
+ responder_params: uwb_ranging_params.UwbRangingParams,
+ peer_addr: List[int]):
+ """Verifies stop callback on responder.
+
+ Args:
+ initiator: uwb device object.
+ responder: uwb device object.
+ initiator_params: ranging params for initiator.
+ responder_params: ranging params for responder.
+ peer_addr: address of uwb device.
+ """
+
+ # Verify ranging
+ self._verify_one_to_one_ranging(initiator, responder, initiator_params,
+ responder_params, peer_addr)
+
+ # Verify Stopped callbacks
+ responder.stop_ranging()
+
+ # Restart and verify ranging
+ responder.start_fira_ranging()
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ def _verify_one_to_one_ranging_airplane_mode_toggle(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ responder: uwb_ranging_decorator.UwbRangingDecorator,
+ initiator_params: uwb_ranging_params.UwbRangingParams,
+ responder_params: uwb_ranging_params.UwbRangingParams,
+ peer_addr: List[int]):
+ """Verifies ranging with airplane mode toggle.
+
+ Args:
+ initiator: uwb device object.
+ responder: uwb device object.
+ initiator_params: ranging params for initiator.
+ responder_params: ranging params for responder.
+ peer_addr: address of uwb device.
+ """
+
+ # Verify ranging before APM toggle
+ self._verify_one_to_one_ranging(initiator, responder, initiator_params,
+ responder_params, peer_addr)
+
+ # Enable APM on initiator and verify callbacks
+ initiator.clear_ranging_session_callback_events()
+ responder.clear_ranging_session_callback_events()
+ uwb_test_utils.set_airplane_mode(initiator.ad, True)
+ initiator.verify_callback_received("Closed")
+ responder.verify_callback_received(
+ "Stopped", timeout=RESPONDER_STOP_CALLBACK_TIMEOUT)
+
+ # Disable APM, restart and verify ranging
+ uwb_test_utils.set_airplane_mode(initiator.ad, False)
+ uwb_test_utils.verify_uwb_state_callback(initiator.ad, "Inactive")
+ initiator.open_fira_ranging(initiator_params)
+ initiator.start_fira_ranging()
+ responder.start_fira_ranging()
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ # Enable APM on responder and verify callbacks
+ responder.clear_ranging_session_callback_events()
+ uwb_test_utils.set_airplane_mode(responder.ad, True)
+ responder.verify_callback_received("Closed")
+
+ # Disable APM, restart and verify ranging
+ uwb_test_utils.set_airplane_mode(responder.ad, False)
+ uwb_test_utils.verify_uwb_state_callback(responder.ad, "Inactive")
+ responder.open_fira_ranging(responder_params)
+ responder.start_fira_ranging()
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ def _verify_one_to_one_ranging_reconfigure_ranging_interval(
+ self, initiator: uwb_ranging_decorator.UwbRangingDecorator,
+ block_stride_length: int, peer_addr: List[int]):
+ """Verifies ranging with reconfigured ranging interval.
+
+ Args:
+ initiator: The uwb device object.
+ block_stride_length: The new block stride length to reconfigure.
+ peer_addr: address of the responder.
+ """
+ initiator.log.info("Reconfigure block stride length to: %s" %
+ block_stride_length)
+ reconfigure_params = uwb_ranging_params.UwbRangingReconfigureParams(
+ block_stride_length=block_stride_length)
+ initiator.reconfigure_fira_ranging(reconfigure_params)
+ uwb_test_utils.verify_peer_found(initiator, peer_addr)
+
+ ### Test Cases ###
+
+ @records.uid("534e80d7-cfba-47c1-9ae1-62b3630458ac")
+ def test_ranging_default_params(self):
+ """Verifies ranging with default Fira parameters."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self.responder.stop_ranging()
+ self.responder.close_ranging()
+ self._verify_one_to_one_ranging_reconfigured_params(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.new_responder_addr)
+
+ @records.uid("04ec82db-be17-4aaf-911c-56e702c1ea55")
+ def test_ranging_device_tracker_profile_default(self):
+ """Verifies ranging with device tracker profile default values."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("05fa3bc8-b4c8-4bd4-a802-80250aa27a0b")
+ def test_ranging_nearby_share_profile_default(self):
+ """Verifies ranging for device nearby share with default profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self.responder.stop_ranging()
+ self.responder.close_ranging()
+ self._verify_one_to_one_ranging_reconfigured_params(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.new_responder_addr)
+
+ @records.uid("fa9b18c2-a1e1-4bf8-bc76-796700a1c2cb")
+ def test_open_ranging_with_same_session_id_nearby_share(self):
+ """Verifies ranging for device nearby share with same session id."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self.responder.close_ranging()
+ self.initiator.close_ranging()
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("973a083a-f01a-44cc-a706-3b2953ca8e22")
+ def test_open_ranging_with_same_session_id_device_tracker(self):
+ """Verifies ranging with device tracker profile with same session id."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self.responder.close_ranging()
+ self.initiator.close_ranging()
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("dff3aaff-c3ed-47fb-b99f-d47f55c06770")
+ def test_ranging_default_params_reconfigure_ranging_interval(self):
+ """Verifies ranging with default Fira parameters."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self._verify_one_to_one_ranging_reconfigure_ranging_interval(
+ self.initiator, self.block_stride_length, self.responder_addr)
+
+ @records.uid("7800a229-af09-48e1-a6f9-bdd159afc460")
+ def test_ranging_device_tracker_profile_reconfigure_ranging_interval(self):
+ """Verifies ranging with device tracker profile default values."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self._verify_one_to_one_ranging_reconfigure_ranging_interval(
+ self.initiator, self.block_stride_length, self.responder_addr)
+
+ @records.uid("c1d98ba2-93bd-4458-abfe-0194307ac2d4")
+ def test_ranging_nearby_share_profile_reconfigure_ranging_interval(self):
+ """Verifies ranging for device nearby share with default profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ self._verify_one_to_one_ranging_reconfigure_ranging_interval(
+ self.initiator, self.block_stride_length, self.responder_addr)
+
+ @records.uid("19ed274a-5cb2-4210-9592-0843313cb88f")
+ def test_ranging_device_tracker_profile_ch9_pr12(self):
+ """Verifies ranging with device tracker for channel 9 and preamble 12."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("810d13ef-678f-4ee5-affc-b0b50efaafc5")
+ def test_ranging_device_tracker_profile_ch5_pr11(self):
+ """Verifies ranging with device tracker for channel 5 and preamble 11."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("90d73266-07f2-46d8-bc06-a4a1206d693a")
+ def test_ranging_device_tracker_profile_ch9_pr11(self):
+ """Verifies device tracking profile with channel 9 and preamble 11."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("827c969e-15dc-43f9-ad65-c8dbcc91dd56")
+ def test_ranging_device_tracker_profile_ch5_pr10(self):
+ """Verifies device tracking profile with channel 5 and preamble 10."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("f7a4fad5-9340-461c-bfb3-e9e530a54a97")
+ def test_ranging_device_tracker_profile_ch9_pr9(self):
+ """Verifies ranging with device tracker for channel 9 and preamble 9."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_9,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_9,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9,
+ multi_node_mode=uwb_ranging_params
+ .FiraParamEnums.MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("d75d7443-904c-4ebf-9cb2-5e1df484db7a")
+ def test_ranging_device_tracker_profile_ch5_pr9(self):
+ """Verifies ranging with device tracker for channel 5 and preamble 9."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9,
+ multi_node_mode=uwb_ranging_params
+ .FiraParamEnums.MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9,
+ multi_node_mode=uwb_ranging_params
+ .FiraParamEnums.MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("0413d123-8578-477f-b07e-be2e8e0a8652")
+ def test_ranging_device_tracker_profile_ch5_pr12(self):
+ """Verifies ranging with device tracker for channel 5 and preamble 12."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12,
+ multi_node_mode=uwb_ranging_params
+ .FiraParamEnums.MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5,
+ preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12,
+ multi_node_mode=uwb_ranging_params
+ .FiraParamEnums.MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ # disable due to b/212455943
+ @records.uid("73c9e335-c1da-432f-937a-d4bf15f6b338")
+ def _test_ranging_device_nearby_share_profile_block_stride(self):
+ """Verifies nearby share profile with block stride."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ block_stride_length=0xFF,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ block_stride_length=0xFF,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("cf9d3a96-433e-40d6-a74e-5413c975da78")
+ def test_ranging_device_tracker_profile_no_aoa_report(self):
+ """Verifies ranging with device tracker profile with no aoa report."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ aoa_result_request=uwb_ranging_params.FiraParamEnums
+ .AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ aoa_result_request=uwb_ranging_params.FiraParamEnums
+ .AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT,
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+ try:
+ self.initiator.get_aoa_azimuth_measurement(self.responder_addr)
+ asserts.fail("Received AoA measurement.")
+ except ValueError:
+ pass
+
+ @records.uid("68c6e10c-749f-448b-b650-a1edaa56a833")
+ def test_ranging_nearby_share_profile_hopping_mode_enabled(self):
+ """Verifies ranging with nearby share profile with hopping mode enabled."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ ranging_interval_ms=200,
+ hopping_mode=uwb_ranging_params.FiraParamEnums
+ .HOPPING_MODE_FIRA_HOPPING_ENABLE,
+ slots_per_ranging_round=20,
+ initiation_time_ms=100,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ ranging_interval_ms=200,
+ hopping_mode=uwb_ranging_params.FiraParamEnums
+ .HOPPING_MODE_FIRA_HOPPING_ENABLE,
+ slots_per_ranging_round=20,
+ initiation_time_ms=100,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("7c63291f-d610-4360-88c9-ae17c46cc0ba")
+ def test_ranging_rr_ss_twr_deferred_default_params(self):
+ """Verifies ranging with default Fira parameters and Ranging Round 1."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("cb404b61-626a-4bbe-87b2-a45bf1fa4174")
+ def test_ranging_rr_ss_twr_deferred_device_tracker_profile(self):
+ """Verifies ranging with device tracker profile and ranging round 1."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("1990b59c-dd57-4f24-8134-f1ccb2db3062")
+ def test_ranging_rr_ss_twr_deferred_nearby_share_profile(self):
+ """Verifies ranging for nearby share profile and ranging round 1."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ ranging_round_usage=uwb_ranging_params.FiraParamEnums
+ .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE,
+ )
+ self._verify_one_to_one_ranging(self.initiator, self.responder,
+ initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("ae7a95b3-e8f1-4358-b3cc-ecb10cb6d20c")
+ def test_stop_initiator_ranging_device_tracker_profile(self):
+ """Verifies initiator stop ranging callbacks with device tracker profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_stop_initiator_callback(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("cd339d74-910a-49e9-9201-b4868adf6db7")
+ def test_stop_initiator_ranging_nearby_share_profile(self):
+ """Verifies initiator stop ranging callbacks for nearby share profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_stop_initiator_callback(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("c7757248-362f-4efa-95f4-344360e163ad")
+ def test_stop_responder_ranging_device_tracker_profile(self):
+ """Verifies responder stop ranging callbacks with device tracker profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_stop_responder_callback(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("79f9dff3-6397-495f-9a35-bc1b21b7b500")
+ def test_stop_responder_ranging_nearby_share_profile(self):
+ """Verifies responder stop ranging callbacks for nearby share profile."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_stop_responder_callback(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("8109b3b3-bd2d-4d0e-be70-844d98f4d6fb")
+ def test_ranging_device_tracker_profile_with_airplane_mode_toggle(self):
+ """Verifies ranging with device tracker profile and airplane mode toggle."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ multi_node_mode=uwb_ranging_params.FiraParamEnums
+ .MULTI_NODE_MODE_UNICAST,
+ initiation_time_ms=100,
+ ranging_interval_ms=240,
+ slots_per_ranging_round=6,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging_airplane_mode_toggle(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+ @records.uid("583d3c33-d41a-4d91-93ef-19dc5e064fb7")
+ def test_ranging_nearby_share_profile_with_airplane_mode_toggle(self):
+ """Verifies ranging for nearby share profile and APM toggle."""
+ initiator_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER,
+ device_address=self.initiator_addr,
+ destination_addresses=[self.responder_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ responder_params = uwb_ranging_params.UwbRangingParams(
+ device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER,
+ device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE,
+ device_address=self.responder_addr,
+ destination_addresses=[self.initiator_addr],
+ initiation_time_ms=100,
+ ranging_interval_ms=200,
+ slots_per_ranging_round=20,
+ in_band_termination_attempt_count=3,
+ )
+ self._verify_one_to_one_ranging_airplane_mode_toggle(
+ self.initiator, self.responder, initiator_params, responder_params,
+ self.responder_addr)
+
+if __name__ == "__main__":
+ index = sys.argv.index('--')
+ sys.argv = sys.argv[:1] + sys.argv[index + 1:]
+ test_runner.main()
diff --git a/tests/cts/hostsidetests/multidevices/uwb/uwb_manager_test.py b/tests/cts/hostsidetests/multidevices/uwb/uwb_manager_test.py
index 4693110..a107d98 100644
--- a/tests/cts/hostsidetests/multidevices/uwb/uwb_manager_test.py
+++ b/tests/cts/hostsidetests/multidevices/uwb/uwb_manager_test.py
@@ -45,9 +45,9 @@
super().setup_class()
self.dut = self.android_devices[0]
- def on_fail(self, record):
- for ad in self.android_devices:
- ad.take_bug_report(destination=self.current_test_info.output_path)
+ def teardown_class(self):
+ super().teardown_class()
+ self.dut.take_bug_report(destination=self.current_test_info.output_path)
### Helper methods ###