1"""Tests for Uwb Ranging APIs.""" 2 3import random 4import sys 5import threading 6import time 7from typing import List, Optional 8 9from lib import uwb_base_test 10from lib import uwb_ranging_decorator 11from lib import uwb_ranging_params 12from mobly import asserts 13from mobly import config_parser 14from mobly import signals 15from mobly import suite_runner 16from test_utils import uwb_test_utils 17 18RESPONDER_STOP_CALLBACK_TIMEOUT = 60 19 20_TEST_CASES = ( 21 "test_ranging_device_tracker_profile_default", 22 "test_ranging_device_tracker_profile_p_sts_default", 23 "test_ranging_nearby_share_profile_default", 24 "test_ranging_nearby_share_profile_p_sts_default", 25 "test_ranging_nearby_share_profile_reconfigure_controlee", 26 # (TODO: ziyiw) Re-enable this test after fix b/360248188 27 # "test_ranging_nearby_share_profile_p_sts_add_controlee", 28 "test_ranging_nearby_share_profile_add_remove_controlee", 29 "test_ranging_device_tracker_profile_reconfigure_ranging_interval", 30 "test_ranging_nearby_share_profile_reconfigure_ranging_interval", 31 "test_ranging_device_tracker_profile_no_aoa_report", 32 "test_ranging_nearby_share_profile_hopping_mode_disabled", 33 "test_ranging_rr_ss_twr_deferred_device_tracker_profile", 34 "test_ranging_rr_ss_twr_deferred_nearby_share_profile", 35 "test_stop_initiator_ranging_device_tracker_profile", 36 "test_stop_initiator_ranging_nearby_share_profile", 37 "test_stop_responder_ranging_device_tracker_profile", 38 "test_stop_responder_ranging_nearby_share_profile", 39 # (TODO: gmoturu) Re-enable tests after adding fix - b/339139695 40 # "test_ranging_device_tracker_profile_with_airplane_mode_toggle", 41 # "test_ranging_nearby_share_profile_with_airplane_mode_toggle", 42 "test_ranging_nearby_share_profile_move_to_bg_and_fg", 43 "test_ranging_nearby_share_profile_verify_app_in_bg_stops_session", 44 "test_ranging_nearby_share_profile_bg_fails", 45 "test_ranging_nearby_share_profile_no_valid_reports_stops_session", 46 "test_ranging_device_tracker_profile_max_sessions_reject", 47) 48 49 50class RangingTest(uwb_base_test.UwbBaseTest): 51 """Tests for UWB Ranging APIs. 52 53 Attributes: 54 android_devices: list of android device objects. 55 """ 56 57 def __init__(self, configs: config_parser.TestRunConfig): 58 """Init method for the test class. 59 60 Args: 61 configs: A config_parser.TestRunConfig object. 62 """ 63 super().__init__(configs) 64 self.tests = _TEST_CASES 65 66 def setup_class(self): 67 super().setup_class() 68 self.uwb_devices = [ 69 uwb_ranging_decorator.UwbRangingDecorator(ad) 70 for ad in self.android_devices 71 ] 72 self.initiator, self.responder = self.uwb_devices 73 self.device_addresses = self.user_params.get("device_addresses", 74 [[1, 2], [3, 4]]) 75 self.initiator_addr, self.responder_addr = self.device_addresses 76 self.new_responder_addr = [4, 5] 77 self.p_sts_sub_session_id = 11 78 self.p_sts_sub_session_key = [ 79 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8] 80 self.block_stride_length = random.randint(1, 10) 81 82 def setup_test(self): 83 super().setup_test() 84 for uwb_device in self.uwb_devices: 85 try: 86 uwb_device.close_ranging() 87 except TimeoutError: 88 uwb_device.log.warn("Failed to cleanup ranging sessions") 89 for uwb_device in self.uwb_devices: 90 uwb_test_utils.set_airplane_mode(uwb_device.ad, False) 91 self._reset_snippet_fg_bg_state(uwb_device) 92 93 def teardown_test(self): 94 super().teardown_test() 95 self.responder.close_all_ranging_sessions() 96 self.initiator.close_all_ranging_sessions() 97 98 ### Helper Methods ### 99 100 def _verify_one_to_one_ranging( 101 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 102 responder: uwb_ranging_decorator.UwbRangingDecorator, 103 initiator_params: uwb_ranging_params.UwbRangingParams, 104 responder_params: uwb_ranging_params.UwbRangingParams, 105 peer_addr: List[int], 106 session: int = 0): 107 """Verifies ranging between two uwb devices. 108 109 Args: 110 initiator: uwb device object. 111 responder: uwb device object. 112 initiator_params: ranging params for initiator. 113 responder_params: ranging params for responder. 114 peer_addr: address of uwb device. 115 session: Session key to use. 116 """ 117 initiator.open_fira_ranging(initiator_params, session=session) 118 responder.open_fira_ranging(responder_params, session=session) 119 initiator.start_fira_ranging(session=session) 120 responder.start_fira_ranging(session=session) 121 uwb_test_utils.verify_peer_found(initiator, peer_addr, session=session) 122 123 def _verify_one_to_one_ranging_reconfigured_controlee_params( 124 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 125 responder: uwb_ranging_decorator.UwbRangingDecorator, 126 initiator_params: uwb_ranging_params.UwbRangingParams, 127 responder_params: uwb_ranging_params.UwbRangingParams, 128 peer_addr: List[int], 129 sub_session_id: Optional[int] = None, 130 sub_session_key: Optional[List[int]] = None): 131 """Verifies ranging between two uwb devices with reconfigured params. 132 133 Args: 134 initiator: The uwb device object. 135 responder: The uwb device object. 136 initiator_params: The ranging params for initiator. 137 responder_params: The ranging params for responder. 138 peer_addr: The new address of uwb device. 139 sub_session_id: Sub session id for p-sts with individual controlee keys. 140 sub_session_key: Sub session key for p-sts with individual controlee keys. 141 """ 142 initiator.open_fira_ranging(initiator_params) 143 initiator.start_fira_ranging() 144 145 # change responder addr and verify peer cannot be found 146 responder_params.update(device_address=peer_addr) 147 if sub_session_id is not None: 148 responder_params.update(sub_session_id=sub_session_id) 149 if sub_session_key is not None: 150 responder_params.update(sub_session_key=sub_session_key) 151 responder.open_fira_ranging(responder_params) 152 responder.start_fira_ranging() 153 try: 154 uwb_test_utils.verify_peer_found(initiator, peer_addr) 155 asserts.fail("Peer found without reconfiguring initiator.") 156 except signals.TestFailure: 157 self.initiator.log.info("Peer %s not found as expected", peer_addr) 158 159 # reconfigure initiator with new peer addr and verify peer found 160 sub_session_id_list = None 161 sub_session_key_list = None 162 if sub_session_id is not None: 163 sub_session_id_list = [sub_session_id] 164 if sub_session_key is not None: 165 sub_session_key_list = sub_session_key 166 action = uwb_ranging_params.FiraParamEnums.MULTICAST_LIST_UPDATE_ACTION_ADD 167 if sub_session_id is not None and sub_session_key is not None: 168 action = uwb_ranging_params.FiraParamEnums.P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_16_BYTE 169 reconfigure_params = uwb_ranging_params.UwbRangingReconfigureParams( 170 action=action, 171 address_list=[peer_addr], sub_session_id_list=sub_session_id_list, 172 sub_session_key_list=sub_session_key_list) 173 initiator.reconfigure_fira_ranging(reconfigure_params) 174 uwb_test_utils.verify_peer_found(initiator, peer_addr) 175 176 def _verify_one_to_one_ranging_add_remove_controlee( 177 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 178 responder: uwb_ranging_decorator.UwbRangingDecorator, 179 initiator_params: uwb_ranging_params.UwbRangingParams, 180 responder_params: uwb_ranging_params.UwbRangingParams, 181 peer_addr: List[int], 182 sub_session_id: Optional[int] = None, 183 sub_session_key: Optional[List[int]] = None): 184 """Verifies ranging between two uwb devices with dynamically added controlee. 185 186 Args: 187 initiator: The uwb device object. 188 responder: The uwb device object. 189 initiator_params: The ranging params for initiator. 190 responder_params: The ranging params for responder. 191 peer_addr: The new address of uwb device. 192 sub_session_id: Sub session id for p-sts with individual controlee keys. 193 sub_session_key: Sub session key for p-sts with individual controlee keys. 194 """ 195 initiator.open_fira_ranging(initiator_params) 196 initiator.start_fira_ranging() 197 198 # change responder addr and verify peer cannot be found 199 responder_params.update(device_address=peer_addr) 200 if sub_session_id is not None: 201 responder_params.update(sub_session_id=sub_session_id) 202 if sub_session_key is not None: 203 responder_params.update(sub_session_key=sub_session_key) 204 responder.open_fira_ranging(responder_params) 205 responder.start_fira_ranging() 206 try: 207 uwb_test_utils.verify_peer_found(initiator, peer_addr) 208 asserts.fail("Peer found without reconfiguring initiator.") 209 except signals.TestFailure: 210 self.initiator.log.info("Peer %s not found as expected", peer_addr) 211 212 # reconfigure initiator with new peer addr and verify peer found 213 sub_session_id_list = None 214 sub_session_key_list = None 215 if sub_session_id is not None: 216 sub_session_id_list = [sub_session_id] 217 if sub_session_key is not None: 218 sub_session_key_list = sub_session_key 219 action = uwb_ranging_params.FiraParamEnums.MULTICAST_LIST_UPDATE_ACTION_ADD 220 if sub_session_id is not None and sub_session_key is not None: 221 action = uwb_ranging_params.FiraParamEnums.P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_16_BYTE 222 controlee_params = uwb_ranging_params.UwbRangingControleeParams( 223 action=action, 224 address_list=[peer_addr], 225 sub_session_id_list=sub_session_id_list, 226 sub_session_key_list=sub_session_key_list) 227 initiator.add_controlee_fira_ranging(controlee_params) 228 uwb_test_utils.verify_peer_found(initiator, peer_addr) 229 controlee_params = uwb_ranging_params.UwbRangingControleeParams( 230 action=uwb_ranging_params.FiraParamEnums 231 .MULTICAST_LIST_UPDATE_ACTION_DELETE, 232 address_list=[peer_addr]) 233 initiator.remove_controlee_fira_ranging(controlee_params) 234 try: 235 uwb_test_utils.verify_peer_found(initiator, peer_addr) 236 asserts.fail("Peer found after removing responder.") 237 except signals.TestFailure: 238 self.initiator.log.info("Peer %s not found as expected", peer_addr) 239 240 def _verify_stop_initiator_callback( 241 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 242 responder: uwb_ranging_decorator.UwbRangingDecorator, 243 initiator_params: uwb_ranging_params.UwbRangingParams, 244 responder_params: uwb_ranging_params.UwbRangingParams, 245 peer_addr: List[int]): 246 """Verifies stop callback on initiator. 247 248 Args: 249 initiator: uwb device object. 250 responder: uwb device object. 251 initiator_params: ranging params for initiator. 252 responder_params: ranging params for responder. 253 peer_addr: address of uwb device. 254 """ 255 256 # Verify ranging 257 self._verify_one_to_one_ranging(initiator, responder, initiator_params, 258 responder_params, peer_addr) 259 260 # Verify Stopped callbacks 261 initiator.stop_ranging() 262 responder.verify_callback_received( 263 "Stopped", timeout=RESPONDER_STOP_CALLBACK_TIMEOUT) 264 265 # Restart and verify ranging 266 initiator.start_fira_ranging() 267 responder.start_fira_ranging() 268 uwb_test_utils.verify_peer_found(initiator, peer_addr) 269 270 def _verify_stop_responder_callback( 271 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 272 responder: uwb_ranging_decorator.UwbRangingDecorator, 273 initiator_params: uwb_ranging_params.UwbRangingParams, 274 responder_params: uwb_ranging_params.UwbRangingParams, 275 peer_addr: List[int]): 276 """Verifies stop callback on responder. 277 278 Args: 279 initiator: uwb device object. 280 responder: uwb device object. 281 initiator_params: ranging params for initiator. 282 responder_params: ranging params for responder. 283 peer_addr: address of uwb device. 284 """ 285 286 # Verify ranging 287 self._verify_one_to_one_ranging(initiator, responder, initiator_params, 288 responder_params, peer_addr) 289 290 # Verify Stopped callbacks 291 responder.stop_ranging() 292 293 # Restart and verify ranging 294 responder.start_fira_ranging() 295 uwb_test_utils.verify_peer_found(initiator, peer_addr) 296 297 def _is_bg_ranging_supported( 298 self, device: uwb_ranging_decorator.UwbRangingDecorator): 299 """Checks if device supports bg ranging. 300 301 Args: 302 device: uwb device object. 303 """ 304 return device.ad.uwb.getSpecificationInfo()["fira"]["background_ranging_support"] 305 306 def _get_uci_version( 307 self, device: uwb_ranging_decorator.UwbRangingDecorator): 308 """Gets uci version from device. 309 310 Args: 311 device: uwb device object. 312 """ 313 return device.ad.uwb.getSpecificationInfo()["fira"]["uci_version"] 314 315 def _verify_one_to_one_ranging_airplane_mode_toggle( 316 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 317 responder: uwb_ranging_decorator.UwbRangingDecorator, 318 initiator_params: uwb_ranging_params.UwbRangingParams, 319 responder_params: uwb_ranging_params.UwbRangingParams, 320 peer_addr: List[int]): 321 """Verifies ranging with airplane mode toggle. 322 323 Args: 324 initiator: uwb device object. 325 responder: uwb device object. 326 initiator_params: ranging params for initiator. 327 responder_params: ranging params for responder. 328 peer_addr: address of uwb device. 329 330 """ 331 332 # Verify ranging before APM toggle 333 self._verify_one_to_one_ranging(initiator, responder, initiator_params, 334 responder_params, peer_addr) 335 336 # Enable APM on initiator and verify callbacks 337 initiator.clear_ranging_session_callback_events() 338 responder.clear_ranging_session_callback_events() 339 callback = "uwb_state_%s" % random.randint(1, 100) 340 handler = initiator.ad.uwb.registerUwbAdapterStateCallback(callback) 341 uwb_test_utils.set_airplane_mode(initiator.ad, True) 342 uwb_test_utils.verify_uwb_state_callback(initiator.ad, "Disabled", handler) 343 initiator.verify_callback_received("Closed") 344 responder.verify_callback_received( 345 "Stopped", timeout=RESPONDER_STOP_CALLBACK_TIMEOUT) 346 347 # Disable APM, restart and verify ranging 348 handler.getAll("UwbAdapterStateCallback") 349 uwb_test_utils.set_airplane_mode(initiator.ad, False) 350 uwb_test_utils.verify_uwb_state_callback(initiator.ad, "Inactive", handler) 351 initiator.ad.uwb.unregisterUwbAdapterStateCallback(callback) 352 initiator.open_fira_ranging(initiator_params) 353 initiator.start_fira_ranging() 354 responder.start_fira_ranging() 355 uwb_test_utils.verify_peer_found(initiator, peer_addr) 356 357 # Enable APM on responder and verify callbacks 358 responder.clear_ranging_session_callback_events() 359 callback = "uwb_state_%s" % random.randint(1, 100) 360 handler = responder.ad.uwb.registerUwbAdapterStateCallback(callback) 361 uwb_test_utils.set_airplane_mode(responder.ad, True) 362 uwb_test_utils.verify_uwb_state_callback(responder.ad, "Disabled", handler) 363 responder.verify_callback_received("Closed") 364 365 # Disable APM, restart and verify ranging 366 handler.getAll("UwbAdapterStateCallback") 367 uwb_test_utils.set_airplane_mode(responder.ad, False) 368 uwb_test_utils.verify_uwb_state_callback(responder.ad, "Inactive", handler) 369 responder.ad.uwb.unregisterUwbAdapterStateCallback(callback) 370 responder.open_fira_ranging(responder_params) 371 responder.start_fira_ranging() 372 uwb_test_utils.verify_peer_found(initiator, peer_addr) 373 374 def _verify_one_to_one_ranging_reconfigure_ranging_interval( 375 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 376 block_stride_length: int, peer_addr: List[int]): 377 """Verifies ranging with reconfigured ranging interval. 378 379 Args: 380 initiator: The uwb device object. 381 block_stride_length: The new block stride length to reconfigure. 382 peer_addr: address of the responder. 383 """ 384 initiator.log.info("Reconfigure block stride length to: %s" % 385 block_stride_length) 386 reconfigure_params = uwb_ranging_params.UwbRangingReconfigureParams( 387 block_stride_length=block_stride_length) 388 initiator.reconfigure_fira_ranging(reconfigure_params) 389 uwb_test_utils.verify_peer_found(initiator, peer_addr) 390 391 def _verify_add_controlee_when_opened_ranging_with_no_controlee( 392 self, initiator: uwb_ranging_decorator.UwbRangingDecorator, 393 responder: uwb_ranging_decorator.UwbRangingDecorator, 394 initiator_params: uwb_ranging_params.UwbRangingParams, 395 responder_params: uwb_ranging_params.UwbRangingParams, 396 peer_addr: List[int], 397 sub_session_id: Optional[int] = None, 398 sub_session_key: Optional[List[int]] = None): 399 """Verifies ranging between two uwb devices with dynamically added controlee. 400 401 Args: 402 initiator: The uwb device object. 403 responder: The uwb device object. 404 initiator_params: The ranging params for initiator. 405 responder_params: The ranging params for responder. 406 peer_addr: The new address of uwb device. 407 sub_session_id: Sub session id for p-sts with individual controlee keys. 408 sub_session_key: Sub session key for p-sts with individual controlee keys. 409 """ 410 initiator.open_fira_ranging(initiator_params) 411 412 if sub_session_id is not None: 413 initiator_params.update(sub_session_id=sub_session_id) 414 responder_params.update(sub_session_id=sub_session_id) 415 if sub_session_key is not None: 416 initiator_params.update(sub_session_key=sub_session_key) 417 responder_params.update(sub_session_key=sub_session_key) 418 responder.open_fira_ranging(responder_params) 419 responder.start_fira_ranging() 420 421 # reconfigure initiator with new peer addr and verify peer found 422 sub_session_id_list = None 423 sub_session_key_list = None 424 if sub_session_id is not None: 425 sub_session_id_list = [sub_session_id] 426 if sub_session_key is not None: 427 sub_session_key_list = sub_session_key 428 action = uwb_ranging_params.FiraParamEnums.MULTICAST_LIST_UPDATE_ACTION_ADD 429 if sub_session_id is not None and sub_session_key is not None: 430 action = uwb_ranging_params.FiraParamEnums.P_STS_MULTICAST_LIST_UPDATE_ACTION_ADD_16_BYTE 431 controlee_params = uwb_ranging_params.UwbRangingControleeParams( 432 action=action, 433 address_list=[peer_addr], 434 sub_session_id_list=sub_session_id_list, 435 sub_session_key_list=sub_session_key_list) 436 initiator.add_controlee_fira_ranging(controlee_params) 437 438 initiator.start_fira_ranging() 439 uwb_test_utils.verify_peer_found(initiator, peer_addr) 440 441 @staticmethod 442 def _reset_snippet_fg_bg_state( 443 device: uwb_ranging_decorator.UwbRangingDecorator, 444 ): 445 """Resets snippet app foreground/background state. 446 447 Args: 448 device: The uwb device object. 449 """ 450 device.ad.adb.shell( 451 ["cmd", "uwb", "simulate-app-state-change", "com.google.snippet.uwb"] 452 ) 453 454 @staticmethod 455 def _move_snippet_to_bg(device: uwb_ranging_decorator.UwbRangingDecorator): 456 """Simulates moving snippet app to background. 457 458 Args: 459 device: The uwb device object. 460 """ 461 device.ad.adb.shell([ 462 "cmd", 463 "uwb", 464 "simulate-app-state-change", 465 "com.google.snippet.uwb", 466 "background", 467 ]) 468 469 @staticmethod 470 def _move_snippet_to_fg(device: uwb_ranging_decorator.UwbRangingDecorator): 471 """Simulates moving snippet app to foreground. 472 473 Args: 474 device: The uwb device object. 475 """ 476 device.ad.adb.shell([ 477 "cmd", 478 "uwb", 479 "simulate-app-state-change", 480 "com.google.snippet.uwb", 481 "foreground", 482 ]) 483 484 ### Test Cases ### 485 486 def test_ranging_device_tracker_profile_default(self): 487 """Verifies ranging with device tracker profile default values.""" 488 initiator_params = uwb_ranging_params.UwbRangingParams( 489 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 490 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 491 device_address=self.initiator_addr, 492 destination_addresses=[self.responder_addr], 493 multi_node_mode=uwb_ranging_params.FiraParamEnums 494 .MULTI_NODE_MODE_UNICAST, 495 ranging_interval_ms=240, 496 slots_per_ranging_round=6, 497 in_band_termination_attempt_count=3, 498 ) 499 responder_params = uwb_ranging_params.UwbRangingParams( 500 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 501 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 502 device_address=self.responder_addr, 503 destination_addresses=[self.initiator_addr], 504 multi_node_mode=uwb_ranging_params.FiraParamEnums 505 .MULTI_NODE_MODE_UNICAST, 506 ranging_interval_ms=240, 507 slots_per_ranging_round=6, 508 in_band_termination_attempt_count=3, 509 ) 510 self._verify_one_to_one_ranging(self.initiator, self.responder, 511 initiator_params, responder_params, 512 self.responder_addr) 513 self.responder.stop_ranging() 514 self.initiator.stop_ranging() 515 516 def test_ranging_device_tracker_profile_p_sts_default(self): 517 """Verifies ranging with device tracker profile default values.""" 518 initiator_params = uwb_ranging_params.UwbRangingParams( 519 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 520 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 521 device_address=self.initiator_addr, 522 destination_addresses=[self.responder_addr], 523 multi_node_mode=uwb_ranging_params.FiraParamEnums 524 .MULTI_NODE_MODE_UNICAST, 525 ranging_interval_ms=240, 526 slots_per_ranging_round=6, 527 in_band_termination_attempt_count=3, 528 sts_config=uwb_ranging_params.FiraParamEnums.STS_CONFIG_PROVISIONED, 529 ) 530 responder_params = uwb_ranging_params.UwbRangingParams( 531 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 532 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 533 device_address=self.responder_addr, 534 destination_addresses=[self.initiator_addr], 535 multi_node_mode=uwb_ranging_params.FiraParamEnums 536 .MULTI_NODE_MODE_UNICAST, 537 ranging_interval_ms=240, 538 slots_per_ranging_round=6, 539 in_band_termination_attempt_count=3, 540 sts_config=uwb_ranging_params.FiraParamEnums.STS_CONFIG_PROVISIONED, 541 ) 542 self._verify_one_to_one_ranging(self.initiator, self.responder, 543 initiator_params, responder_params, 544 self.responder_addr) 545 self.responder.stop_ranging() 546 self.initiator.stop_ranging() 547 548 def test_ranging_nearby_share_profile_default(self): 549 """Verifies ranging for device nearby share with default profile.""" 550 initiator_params = uwb_ranging_params.UwbRangingParams( 551 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 552 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 553 device_address=self.initiator_addr, 554 destination_addresses=[self.responder_addr], 555 ranging_interval_ms=200, 556 slots_per_ranging_round=20, 557 in_band_termination_attempt_count=3, 558 ) 559 responder_params = uwb_ranging_params.UwbRangingParams( 560 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 561 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 562 device_address=self.responder_addr, 563 destination_addresses=[self.initiator_addr], 564 ranging_interval_ms=200, 565 slots_per_ranging_round=20, 566 in_band_termination_attempt_count=3, 567 ) 568 self._verify_one_to_one_ranging(self.initiator, self.responder, 569 initiator_params, responder_params, 570 self.responder_addr) 571 self.responder.stop_ranging() 572 self.initiator.stop_ranging() 573 574 def test_ranging_nearby_share_profile_p_sts_default(self): 575 """Verifies ranging for device nearby share with default profile.""" 576 initiator_params = uwb_ranging_params.UwbRangingParams( 577 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 578 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 579 device_address=self.initiator_addr, 580 destination_addresses=[self.responder_addr], 581 ranging_interval_ms=200, 582 slots_per_ranging_round=20, 583 in_band_termination_attempt_count=3, 584 sts_config=uwb_ranging_params.FiraParamEnums.STS_CONFIG_PROVISIONED, 585 ) 586 responder_params = uwb_ranging_params.UwbRangingParams( 587 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 588 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 589 device_address=self.responder_addr, 590 destination_addresses=[self.initiator_addr], 591 ranging_interval_ms=200, 592 slots_per_ranging_round=20, 593 in_band_termination_attempt_count=3, 594 sts_config=uwb_ranging_params.FiraParamEnums.STS_CONFIG_PROVISIONED, 595 ) 596 self._verify_one_to_one_ranging(self.initiator, self.responder, 597 initiator_params, responder_params, 598 self.responder_addr) 599 self.responder.stop_ranging() 600 self.initiator.stop_ranging() 601 602 def test_ranging_nearby_share_profile_reconfigure_controlee(self): 603 """Verifies ranging for device nearby share with default profile.""" 604 initiator_params = uwb_ranging_params.UwbRangingParams( 605 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 606 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 607 device_address=self.initiator_addr, 608 destination_addresses=[self.responder_addr], 609 ranging_interval_ms=200, 610 slots_per_ranging_round=20, 611 in_band_termination_attempt_count=3, 612 ) 613 responder_params = uwb_ranging_params.UwbRangingParams( 614 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 615 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 616 device_address=self.responder_addr, 617 destination_addresses=[self.initiator_addr], 618 ranging_interval_ms=200, 619 slots_per_ranging_round=20, 620 in_band_termination_attempt_count=3, 621 ) 622 self._verify_one_to_one_ranging_reconfigured_controlee_params( 623 self.initiator, self.responder, initiator_params, responder_params, 624 self.new_responder_addr) 625 self.responder.stop_ranging() 626 self.initiator.stop_ranging() 627 628 def test_ranging_nearby_share_profile_p_sts_add_controlee(self): 629 """Verifies ranging for device nearby share with default profile.""" 630 asserts.skip_if( 631 self._get_uci_version(self.initiator) & 0xFF < 2 632 or self._get_uci_version(self.responder) & 0xFF < 2, 633 f"Provisioned STS individual key case is not supported", 634 ) 635 initiator_params = uwb_ranging_params.UwbRangingParams( 636 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 637 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 638 device_address=self.initiator_addr, 639 destination_addresses=[], 640 ranging_interval_ms=200, 641 slots_per_ranging_round=20, 642 in_band_termination_attempt_count=3, 643 sts_config=uwb_ranging_params.FiraParamEnums 644 .STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY, 645 ) 646 responder_params = uwb_ranging_params.UwbRangingParams( 647 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 648 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 649 device_address=self.responder_addr, 650 destination_addresses=[self.initiator_addr], 651 ranging_interval_ms=200, 652 slots_per_ranging_round=20, 653 in_band_termination_attempt_count=3, 654 sts_config=uwb_ranging_params.FiraParamEnums 655 .STS_CONFIG_PROVISIONED_FOR_CONTROLEE_INDIVIDUAL_KEY, 656 ) 657 self._verify_add_controlee_when_opened_ranging_with_no_controlee( 658 self.initiator, self.responder, initiator_params, responder_params, 659 self.responder_addr, self.p_sts_sub_session_id, 660 self.p_sts_sub_session_key) 661 self.responder.stop_ranging() 662 self.initiator.stop_ranging() 663 664 def test_ranging_nearby_share_profile_add_remove_controlee(self): 665 """Verifies ranging for device nearby share with default profile.""" 666 initiator_params = uwb_ranging_params.UwbRangingParams( 667 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 668 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 669 device_address=self.initiator_addr, 670 destination_addresses=[self.responder_addr], 671 ranging_interval_ms=200, 672 slots_per_ranging_round=20, 673 in_band_termination_attempt_count=3, 674 ) 675 responder_params = uwb_ranging_params.UwbRangingParams( 676 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 677 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 678 device_address=self.responder_addr, 679 destination_addresses=[self.initiator_addr], 680 ranging_interval_ms=200, 681 slots_per_ranging_round=20, 682 in_band_termination_attempt_count=3, 683 ) 684 self._verify_one_to_one_ranging_add_remove_controlee( 685 self.initiator, self.responder, initiator_params, responder_params, 686 self.new_responder_addr) 687 # Verify session is stopped on the responder because removal of controlee from controller 688 # should result in the controlee automatically stopping. 689 try: 690 self.responder.verify_callback_received("Stopped", timeout=60 * 1) 691 except TimeoutError: 692 asserts.fail( 693 "Should receive ranging stop when the controlee is removed from session" 694 ) 695 self.initiator.stop_ranging() 696 697 def test_open_ranging_with_same_session_id_nearby_share(self): 698 """Verifies ranging for device nearby share with same session id.""" 699 initiator_params = uwb_ranging_params.UwbRangingParams( 700 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 701 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 702 device_address=self.initiator_addr, 703 destination_addresses=[self.responder_addr], 704 ranging_interval_ms=200, 705 slots_per_ranging_round=20, 706 in_band_termination_attempt_count=3, 707 ) 708 responder_params = uwb_ranging_params.UwbRangingParams( 709 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 710 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 711 device_address=self.responder_addr, 712 destination_addresses=[self.initiator_addr], 713 ranging_interval_ms=200, 714 slots_per_ranging_round=20, 715 in_band_termination_attempt_count=3, 716 ) 717 self._verify_one_to_one_ranging(self.initiator, self.responder, 718 initiator_params, responder_params, 719 self.responder_addr) 720 self.responder.close_ranging() 721 self.initiator.close_ranging() 722 self._verify_one_to_one_ranging(self.initiator, self.responder, 723 initiator_params, responder_params, 724 self.responder_addr) 725 self.responder.stop_ranging() 726 self.initiator.stop_ranging() 727 728 def test_open_ranging_with_same_session_id_device_tracker(self): 729 """Verifies ranging with device tracker profile with same session id.""" 730 initiator_params = uwb_ranging_params.UwbRangingParams( 731 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 732 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 733 device_address=self.initiator_addr, 734 destination_addresses=[self.responder_addr], 735 multi_node_mode=uwb_ranging_params.FiraParamEnums 736 .MULTI_NODE_MODE_UNICAST, 737 ranging_interval_ms=240, 738 slots_per_ranging_round=6, 739 in_band_termination_attempt_count=3, 740 ) 741 responder_params = uwb_ranging_params.UwbRangingParams( 742 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 743 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 744 device_address=self.responder_addr, 745 destination_addresses=[self.initiator_addr], 746 multi_node_mode=uwb_ranging_params.FiraParamEnums 747 .MULTI_NODE_MODE_UNICAST, 748 ranging_interval_ms=240, 749 slots_per_ranging_round=6, 750 in_band_termination_attempt_count=3, 751 ) 752 self._verify_one_to_one_ranging(self.initiator, self.responder, 753 initiator_params, responder_params, 754 self.responder_addr) 755 self.responder.close_ranging() 756 self.initiator.close_ranging() 757 self._verify_one_to_one_ranging(self.initiator, self.responder, 758 initiator_params, responder_params, 759 self.responder_addr) 760 self.responder.stop_ranging() 761 self.initiator.stop_ranging() 762 763 def test_ranging_nearby_share_reconfigure_ranging_interval(self): 764 """Verifies ranging with default Fira parameters.""" 765 initiator_params = uwb_ranging_params.UwbRangingParams( 766 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 767 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 768 device_address=self.initiator_addr, 769 destination_addresses=[self.responder_addr], 770 ) 771 responder_params = uwb_ranging_params.UwbRangingParams( 772 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 773 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 774 device_address=self.responder_addr, 775 destination_addresses=[self.initiator_addr], 776 ) 777 self._verify_one_to_one_ranging(self.initiator, self.responder, 778 initiator_params, responder_params, 779 self.responder_addr) 780 self._verify_one_to_one_ranging_reconfigure_ranging_interval( 781 self.initiator, self.block_stride_length, self.responder_addr) 782 self.responder.stop_ranging() 783 self.initiator.stop_ranging() 784 785 def test_ranging_device_tracker_profile_reconfigure_ranging_interval(self): 786 """Verifies ranging with device tracker profile default values.""" 787 initiator_params = uwb_ranging_params.UwbRangingParams( 788 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 789 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 790 device_address=self.initiator_addr, 791 destination_addresses=[self.responder_addr], 792 multi_node_mode=uwb_ranging_params.FiraParamEnums 793 .MULTI_NODE_MODE_UNICAST, 794 ranging_interval_ms=240, 795 slots_per_ranging_round=6, 796 in_band_termination_attempt_count=3, 797 ) 798 responder_params = uwb_ranging_params.UwbRangingParams( 799 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 800 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 801 device_address=self.responder_addr, 802 destination_addresses=[self.initiator_addr], 803 multi_node_mode=uwb_ranging_params.FiraParamEnums 804 .MULTI_NODE_MODE_UNICAST, 805 ranging_interval_ms=240, 806 slots_per_ranging_round=6, 807 in_band_termination_attempt_count=3, 808 ) 809 self._verify_one_to_one_ranging(self.initiator, self.responder, 810 initiator_params, responder_params, 811 self.responder_addr) 812 self._verify_one_to_one_ranging_reconfigure_ranging_interval( 813 self.initiator, self.block_stride_length, self.responder_addr) 814 self.responder.stop_ranging() 815 self.initiator.stop_ranging() 816 817 def test_ranging_nearby_share_profile_reconfigure_ranging_interval(self): 818 """Verifies ranging for device nearby share with default profile.""" 819 initiator_params = uwb_ranging_params.UwbRangingParams( 820 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 821 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 822 device_address=self.initiator_addr, 823 destination_addresses=[self.responder_addr], 824 ranging_interval_ms=200, 825 slots_per_ranging_round=20, 826 in_band_termination_attempt_count=3, 827 ) 828 responder_params = uwb_ranging_params.UwbRangingParams( 829 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 830 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 831 device_address=self.responder_addr, 832 destination_addresses=[self.initiator_addr], 833 ranging_interval_ms=200, 834 slots_per_ranging_round=20, 835 in_band_termination_attempt_count=3, 836 ) 837 self._verify_one_to_one_ranging(self.initiator, self.responder, 838 initiator_params, responder_params, 839 self.responder_addr) 840 self._verify_one_to_one_ranging_reconfigure_ranging_interval( 841 self.initiator, self.block_stride_length, self.responder_addr) 842 self.responder.stop_ranging() 843 self.initiator.stop_ranging() 844 845 def test_ranging_device_tracker_profile_ch9_pr12(self): 846 """Verifies ranging with device tracker for channel 9 and preamble 12.""" 847 initiator_params = uwb_ranging_params.UwbRangingParams( 848 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 849 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 850 device_address=self.initiator_addr, 851 destination_addresses=[self.responder_addr], 852 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12, 853 multi_node_mode=uwb_ranging_params.FiraParamEnums 854 .MULTI_NODE_MODE_UNICAST, 855 ranging_interval_ms=240, 856 slots_per_ranging_round=6, 857 in_band_termination_attempt_count=3, 858 ) 859 responder_params = uwb_ranging_params.UwbRangingParams( 860 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 861 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 862 device_address=self.responder_addr, 863 destination_addresses=[self.initiator_addr], 864 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12, 865 multi_node_mode=uwb_ranging_params.FiraParamEnums 866 .MULTI_NODE_MODE_UNICAST, 867 ranging_interval_ms=240, 868 slots_per_ranging_round=6, 869 in_band_termination_attempt_count=3, 870 ) 871 self._verify_one_to_one_ranging(self.initiator, self.responder, 872 initiator_params, responder_params, 873 self.responder_addr) 874 self.responder.stop_ranging() 875 self.initiator.stop_ranging() 876 877 def test_ranging_device_tracker_profile_ch5_pr11(self): 878 """Verifies ranging with device tracker for channel 5 and preamble 11.""" 879 initiator_params = uwb_ranging_params.UwbRangingParams( 880 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 881 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 882 device_address=self.initiator_addr, 883 destination_addresses=[self.responder_addr], 884 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 885 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11, 886 multi_node_mode=uwb_ranging_params.FiraParamEnums 887 .MULTI_NODE_MODE_UNICAST, 888 ranging_interval_ms=240, 889 slots_per_ranging_round=6, 890 in_band_termination_attempt_count=3, 891 ) 892 responder_params = uwb_ranging_params.UwbRangingParams( 893 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 894 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 895 device_address=self.responder_addr, 896 destination_addresses=[self.initiator_addr], 897 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 898 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11, 899 multi_node_mode=uwb_ranging_params.FiraParamEnums 900 .MULTI_NODE_MODE_UNICAST, 901 ranging_interval_ms=240, 902 slots_per_ranging_round=6, 903 in_band_termination_attempt_count=3, 904 ) 905 self._verify_one_to_one_ranging(self.initiator, self.responder, 906 initiator_params, responder_params, 907 self.responder_addr) 908 self.responder.stop_ranging() 909 self.initiator.stop_ranging() 910 911 def test_ranging_device_tracker_profile_ch9_pr11(self): 912 """Verifies device tracking profile with channel 9 and preamble 11.""" 913 initiator_params = uwb_ranging_params.UwbRangingParams( 914 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 915 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 916 device_address=self.initiator_addr, 917 destination_addresses=[self.responder_addr], 918 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11, 919 multi_node_mode=uwb_ranging_params.FiraParamEnums 920 .MULTI_NODE_MODE_UNICAST, 921 ranging_interval_ms=240, 922 slots_per_ranging_round=6, 923 in_band_termination_attempt_count=3, 924 ) 925 responder_params = uwb_ranging_params.UwbRangingParams( 926 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 927 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 928 device_address=self.responder_addr, 929 destination_addresses=[self.initiator_addr], 930 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_11, 931 multi_node_mode=uwb_ranging_params.FiraParamEnums 932 .MULTI_NODE_MODE_UNICAST, 933 ranging_interval_ms=240, 934 slots_per_ranging_round=6, 935 in_band_termination_attempt_count=3, 936 ) 937 self._verify_one_to_one_ranging(self.initiator, self.responder, 938 initiator_params, responder_params, 939 self.responder_addr) 940 self.responder.stop_ranging() 941 self.initiator.stop_ranging() 942 943 def test_ranging_device_tracker_profile_ch5_pr10(self): 944 """Verifies device tracking profile with channel 5 and preamble 10.""" 945 initiator_params = uwb_ranging_params.UwbRangingParams( 946 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 947 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 948 device_address=self.initiator_addr, 949 destination_addresses=[self.responder_addr], 950 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 951 multi_node_mode=uwb_ranging_params.FiraParamEnums 952 .MULTI_NODE_MODE_UNICAST, 953 ranging_interval_ms=240, 954 slots_per_ranging_round=6, 955 in_band_termination_attempt_count=3, 956 ) 957 responder_params = uwb_ranging_params.UwbRangingParams( 958 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 959 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 960 device_address=self.responder_addr, 961 destination_addresses=[self.initiator_addr], 962 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 963 multi_node_mode=uwb_ranging_params.FiraParamEnums 964 .MULTI_NODE_MODE_UNICAST, 965 ranging_interval_ms=240, 966 slots_per_ranging_round=6, 967 in_band_termination_attempt_count=3, 968 ) 969 self._verify_one_to_one_ranging(self.initiator, self.responder, 970 initiator_params, responder_params, 971 self.responder_addr) 972 self.responder.stop_ranging() 973 self.initiator.stop_ranging() 974 975 def test_ranging_device_tracker_profile_ch9_pr9(self): 976 """Verifies ranging with device tracker for channel 9 and preamble 9.""" 977 initiator_params = uwb_ranging_params.UwbRangingParams( 978 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 979 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 980 device_address=self.initiator_addr, 981 destination_addresses=[self.responder_addr], 982 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_9, 983 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9, 984 multi_node_mode=uwb_ranging_params.FiraParamEnums 985 .MULTI_NODE_MODE_UNICAST, 986 ranging_interval_ms=240, 987 slots_per_ranging_round=6, 988 in_band_termination_attempt_count=3, 989 ) 990 responder_params = uwb_ranging_params.UwbRangingParams( 991 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 992 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 993 device_address=self.responder_addr, 994 destination_addresses=[self.initiator_addr], 995 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_9, 996 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9, 997 multi_node_mode=uwb_ranging_params 998 .FiraParamEnums.MULTI_NODE_MODE_UNICAST, 999 ranging_interval_ms=240, 1000 slots_per_ranging_round=6, 1001 in_band_termination_attempt_count=3, 1002 ) 1003 self._verify_one_to_one_ranging(self.initiator, self.responder, 1004 initiator_params, responder_params, 1005 self.responder_addr) 1006 self.responder.stop_ranging() 1007 self.initiator.stop_ranging() 1008 1009 def test_ranging_device_tracker_profile_ch5_pr9(self): 1010 """Verifies ranging with device tracker for channel 5 and preamble 9.""" 1011 initiator_params = uwb_ranging_params.UwbRangingParams( 1012 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1013 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1014 device_address=self.initiator_addr, 1015 destination_addresses=[self.responder_addr], 1016 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 1017 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9, 1018 multi_node_mode=uwb_ranging_params 1019 .FiraParamEnums.MULTI_NODE_MODE_UNICAST, 1020 ranging_interval_ms=240, 1021 slots_per_ranging_round=6, 1022 in_band_termination_attempt_count=3, 1023 ) 1024 responder_params = uwb_ranging_params.UwbRangingParams( 1025 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1026 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1027 device_address=self.responder_addr, 1028 destination_addresses=[self.initiator_addr], 1029 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 1030 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_9, 1031 multi_node_mode=uwb_ranging_params 1032 .FiraParamEnums.MULTI_NODE_MODE_UNICAST, 1033 ranging_interval_ms=240, 1034 slots_per_ranging_round=6, 1035 in_band_termination_attempt_count=3, 1036 ) 1037 self._verify_one_to_one_ranging(self.initiator, self.responder, 1038 initiator_params, responder_params, 1039 self.responder_addr) 1040 self.responder.stop_ranging() 1041 self.initiator.stop_ranging() 1042 1043 def test_ranging_device_tracker_profile_ch5_pr12(self): 1044 """Verifies ranging with device tracker for channel 5 and preamble 12.""" 1045 initiator_params = uwb_ranging_params.UwbRangingParams( 1046 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1047 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1048 device_address=self.initiator_addr, 1049 destination_addresses=[self.responder_addr], 1050 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 1051 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12, 1052 multi_node_mode=uwb_ranging_params 1053 .FiraParamEnums.MULTI_NODE_MODE_UNICAST, 1054 ranging_interval_ms=240, 1055 slots_per_ranging_round=6, 1056 in_band_termination_attempt_count=3, 1057 ) 1058 responder_params = uwb_ranging_params.UwbRangingParams( 1059 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1060 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1061 device_address=self.responder_addr, 1062 destination_addresses=[self.initiator_addr], 1063 channel=uwb_ranging_params.FiraParamEnums.UWB_CHANNEL_5, 1064 preamble=uwb_ranging_params.FiraParamEnums.UWB_PREAMBLE_CODE_INDEX_12, 1065 multi_node_mode=uwb_ranging_params 1066 .FiraParamEnums.MULTI_NODE_MODE_UNICAST, 1067 ranging_interval_ms=240, 1068 slots_per_ranging_round=6, 1069 in_band_termination_attempt_count=3, 1070 ) 1071 self._verify_one_to_one_ranging(self.initiator, self.responder, 1072 initiator_params, responder_params, 1073 self.responder_addr) 1074 self.responder.stop_ranging() 1075 self.initiator.stop_ranging() 1076 1077 def test_ranging_device_tracker_profile_no_aoa_report(self): 1078 """Verifies ranging with device tracker profile with no aoa report.""" 1079 initiator_params = uwb_ranging_params.UwbRangingParams( 1080 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1081 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1082 device_address=self.initiator_addr, 1083 destination_addresses=[self.responder_addr], 1084 aoa_result_request=uwb_ranging_params.FiraParamEnums 1085 .AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT, 1086 multi_node_mode=uwb_ranging_params.FiraParamEnums 1087 .MULTI_NODE_MODE_UNICAST, 1088 ranging_interval_ms=240, 1089 slots_per_ranging_round=6, 1090 in_band_termination_attempt_count=3, 1091 ) 1092 responder_params = uwb_ranging_params.UwbRangingParams( 1093 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1094 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1095 device_address=self.responder_addr, 1096 destination_addresses=[self.initiator_addr], 1097 aoa_result_request=uwb_ranging_params.FiraParamEnums 1098 .AOA_RESULT_REQUEST_MODE_NO_AOA_REPORT, 1099 multi_node_mode=uwb_ranging_params.FiraParamEnums 1100 .MULTI_NODE_MODE_UNICAST, 1101 ranging_interval_ms=240, 1102 slots_per_ranging_round=6, 1103 in_band_termination_attempt_count=3, 1104 ) 1105 self._verify_one_to_one_ranging(self.initiator, self.responder, 1106 initiator_params, responder_params, 1107 self.responder_addr) 1108 try: 1109 self.initiator.get_aoa_azimuth_measurement(self.responder_addr) 1110 asserts.fail("Received AoA measurement.") 1111 except ValueError: 1112 pass 1113 self.responder.stop_ranging() 1114 self.initiator.stop_ranging() 1115 1116 def test_ranging_nearby_share_profile_hopping_mode_disabled(self): 1117 """Verifies ranging with nearby share profile with hopping mode disabled.""" 1118 initiator_params = uwb_ranging_params.UwbRangingParams( 1119 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1120 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1121 device_address=self.initiator_addr, 1122 destination_addresses=[self.responder_addr], 1123 ranging_interval_ms=200, 1124 hopping_mode=uwb_ranging_params.FiraParamEnums.HOPPING_MODE_DISABLE, 1125 slots_per_ranging_round=20, 1126 in_band_termination_attempt_count=3, 1127 ) 1128 responder_params = uwb_ranging_params.UwbRangingParams( 1129 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1130 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1131 device_address=self.responder_addr, 1132 destination_addresses=[self.initiator_addr], 1133 ranging_interval_ms=200, 1134 hopping_mode=uwb_ranging_params.FiraParamEnums.HOPPING_MODE_DISABLE, 1135 slots_per_ranging_round=20, 1136 in_band_termination_attempt_count=3, 1137 ) 1138 self._verify_one_to_one_ranging(self.initiator, self.responder, 1139 initiator_params, responder_params, 1140 self.responder_addr) 1141 self.responder.stop_ranging() 1142 self.initiator.stop_ranging() 1143 1144 def test_ranging_rr_ss_twr_deferred_default_params(self): 1145 """Verifies ranging with default Fira parameters and Ranging Round 1.""" 1146 initiator_params = uwb_ranging_params.UwbRangingParams( 1147 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1148 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1149 device_address=self.initiator_addr, 1150 destination_addresses=[self.responder_addr], 1151 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1152 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1153 ) 1154 responder_params = uwb_ranging_params.UwbRangingParams( 1155 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1156 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1157 device_address=self.responder_addr, 1158 destination_addresses=[self.initiator_addr], 1159 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1160 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1161 ) 1162 self._verify_one_to_one_ranging(self.initiator, self.responder, 1163 initiator_params, responder_params, 1164 self.responder_addr) 1165 self.responder.stop_ranging() 1166 self.initiator.stop_ranging() 1167 1168 def test_ranging_rr_ss_twr_deferred_device_tracker_profile(self): 1169 """Verifies ranging with device tracker profile and ranging round 1.""" 1170 initiator_params = uwb_ranging_params.UwbRangingParams( 1171 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1172 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1173 device_address=self.initiator_addr, 1174 destination_addresses=[self.responder_addr], 1175 multi_node_mode=uwb_ranging_params.FiraParamEnums 1176 .MULTI_NODE_MODE_UNICAST, 1177 ranging_interval_ms=240, 1178 slots_per_ranging_round=6, 1179 in_band_termination_attempt_count=3, 1180 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1181 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1182 ) 1183 responder_params = uwb_ranging_params.UwbRangingParams( 1184 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1185 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1186 device_address=self.responder_addr, 1187 destination_addresses=[self.initiator_addr], 1188 multi_node_mode=uwb_ranging_params.FiraParamEnums 1189 .MULTI_NODE_MODE_UNICAST, 1190 ranging_interval_ms=240, 1191 slots_per_ranging_round=6, 1192 in_band_termination_attempt_count=3, 1193 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1194 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1195 ) 1196 self._verify_one_to_one_ranging(self.initiator, self.responder, 1197 initiator_params, responder_params, 1198 self.responder_addr) 1199 self.responder.stop_ranging() 1200 self.initiator.stop_ranging() 1201 1202 def test_ranging_rr_ss_twr_deferred_nearby_share_profile(self): 1203 """Verifies ranging for nearby share profile and ranging round 1.""" 1204 initiator_params = uwb_ranging_params.UwbRangingParams( 1205 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1206 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1207 device_address=self.initiator_addr, 1208 destination_addresses=[self.responder_addr], 1209 ranging_interval_ms=200, 1210 slots_per_ranging_round=20, 1211 in_band_termination_attempt_count=3, 1212 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1213 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1214 ) 1215 responder_params = uwb_ranging_params.UwbRangingParams( 1216 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1217 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1218 device_address=self.responder_addr, 1219 destination_addresses=[self.initiator_addr], 1220 ranging_interval_ms=200, 1221 slots_per_ranging_round=20, 1222 in_band_termination_attempt_count=3, 1223 ranging_round_usage=uwb_ranging_params.FiraParamEnums 1224 .RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE, 1225 ) 1226 self._verify_one_to_one_ranging(self.initiator, self.responder, 1227 initiator_params, responder_params, 1228 self.responder_addr) 1229 self.responder.stop_ranging() 1230 self.initiator.stop_ranging() 1231 1232 def test_stop_initiator_ranging_device_tracker_profile(self): 1233 """Verifies initiator stop ranging callbacks with device tracker profile.""" 1234 initiator_params = uwb_ranging_params.UwbRangingParams( 1235 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1236 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1237 device_address=self.initiator_addr, 1238 destination_addresses=[self.responder_addr], 1239 multi_node_mode=uwb_ranging_params.FiraParamEnums 1240 .MULTI_NODE_MODE_UNICAST, 1241 ranging_interval_ms=240, 1242 slots_per_ranging_round=6, 1243 in_band_termination_attempt_count=3, 1244 ) 1245 responder_params = uwb_ranging_params.UwbRangingParams( 1246 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1247 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1248 device_address=self.responder_addr, 1249 destination_addresses=[self.initiator_addr], 1250 multi_node_mode=uwb_ranging_params.FiraParamEnums 1251 .MULTI_NODE_MODE_UNICAST, 1252 ranging_interval_ms=240, 1253 slots_per_ranging_round=6, 1254 in_band_termination_attempt_count=3, 1255 ) 1256 self._verify_stop_initiator_callback( 1257 self.initiator, self.responder, initiator_params, responder_params, 1258 self.responder_addr) 1259 self.responder.stop_ranging() 1260 self.initiator.stop_ranging() 1261 1262 def test_stop_initiator_ranging_nearby_share_profile(self): 1263 """Verifies initiator stop ranging callbacks for nearby share profile.""" 1264 initiator_params = uwb_ranging_params.UwbRangingParams( 1265 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1266 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1267 device_address=self.initiator_addr, 1268 destination_addresses=[self.responder_addr], 1269 ranging_interval_ms=200, 1270 slots_per_ranging_round=20, 1271 in_band_termination_attempt_count=3, 1272 ) 1273 responder_params = uwb_ranging_params.UwbRangingParams( 1274 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1275 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1276 device_address=self.responder_addr, 1277 destination_addresses=[self.initiator_addr], 1278 ranging_interval_ms=200, 1279 slots_per_ranging_round=20, 1280 in_band_termination_attempt_count=3, 1281 ) 1282 self._verify_stop_initiator_callback( 1283 self.initiator, self.responder, initiator_params, responder_params, 1284 self.responder_addr) 1285 self.responder.stop_ranging() 1286 self.initiator.stop_ranging() 1287 1288 def test_stop_responder_ranging_device_tracker_profile(self): 1289 """Verifies responder stop ranging callbacks with device tracker profile.""" 1290 initiator_params = uwb_ranging_params.UwbRangingParams( 1291 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1292 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1293 device_address=self.initiator_addr, 1294 destination_addresses=[self.responder_addr], 1295 multi_node_mode=uwb_ranging_params.FiraParamEnums 1296 .MULTI_NODE_MODE_UNICAST, 1297 ranging_interval_ms=240, 1298 slots_per_ranging_round=6, 1299 in_band_termination_attempt_count=3, 1300 ) 1301 responder_params = uwb_ranging_params.UwbRangingParams( 1302 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1303 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1304 device_address=self.responder_addr, 1305 destination_addresses=[self.initiator_addr], 1306 multi_node_mode=uwb_ranging_params.FiraParamEnums 1307 .MULTI_NODE_MODE_UNICAST, 1308 ranging_interval_ms=240, 1309 slots_per_ranging_round=6, 1310 in_band_termination_attempt_count=3, 1311 ) 1312 self._verify_stop_responder_callback( 1313 self.initiator, self.responder, initiator_params, responder_params, 1314 self.responder_addr) 1315 self.responder.stop_ranging() 1316 self.initiator.stop_ranging() 1317 1318 def test_stop_responder_ranging_nearby_share_profile(self): 1319 """Verifies responder stop ranging callbacks for nearby share profile.""" 1320 initiator_params = uwb_ranging_params.UwbRangingParams( 1321 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1322 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1323 device_address=self.initiator_addr, 1324 destination_addresses=[self.responder_addr], 1325 ranging_interval_ms=200, 1326 slots_per_ranging_round=20, 1327 in_band_termination_attempt_count=3, 1328 ) 1329 responder_params = uwb_ranging_params.UwbRangingParams( 1330 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1331 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1332 device_address=self.responder_addr, 1333 destination_addresses=[self.initiator_addr], 1334 ranging_interval_ms=200, 1335 slots_per_ranging_round=20, 1336 in_band_termination_attempt_count=3, 1337 ) 1338 self._verify_stop_responder_callback( 1339 self.initiator, self.responder, initiator_params, responder_params, 1340 self.responder_addr) 1341 self.responder.stop_ranging() 1342 self.initiator.stop_ranging() 1343 1344 def test_ranging_device_tracker_profile_with_airplane_mode_toggle(self): 1345 """Verifies ranging with device tracker profile and airplane mode toggle.""" 1346 initiator_params = uwb_ranging_params.UwbRangingParams( 1347 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1348 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1349 device_address=self.initiator_addr, 1350 destination_addresses=[self.responder_addr], 1351 multi_node_mode=uwb_ranging_params.FiraParamEnums 1352 .MULTI_NODE_MODE_UNICAST, 1353 ranging_interval_ms=240, 1354 slots_per_ranging_round=6, 1355 in_band_termination_attempt_count=3, 1356 ) 1357 responder_params = uwb_ranging_params.UwbRangingParams( 1358 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1359 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1360 device_address=self.responder_addr, 1361 destination_addresses=[self.initiator_addr], 1362 multi_node_mode=uwb_ranging_params.FiraParamEnums 1363 .MULTI_NODE_MODE_UNICAST, 1364 ranging_interval_ms=240, 1365 slots_per_ranging_round=6, 1366 in_band_termination_attempt_count=3, 1367 ) 1368 self._verify_one_to_one_ranging_airplane_mode_toggle( 1369 self.initiator, self.responder, initiator_params, responder_params, 1370 self.responder_addr) 1371 self.responder.stop_ranging() 1372 self.initiator.stop_ranging() 1373 1374 def test_ranging_nearby_share_profile_with_airplane_mode_toggle(self): 1375 """Verifies ranging for nearby share profile and APM toggle.""" 1376 initiator_params = uwb_ranging_params.UwbRangingParams( 1377 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1378 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1379 device_address=self.initiator_addr, 1380 destination_addresses=[self.responder_addr], 1381 ranging_interval_ms=200, 1382 slots_per_ranging_round=20, 1383 in_band_termination_attempt_count=3, 1384 ) 1385 responder_params = uwb_ranging_params.UwbRangingParams( 1386 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1387 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1388 device_address=self.responder_addr, 1389 destination_addresses=[self.initiator_addr], 1390 ranging_interval_ms=200, 1391 slots_per_ranging_round=20, 1392 in_band_termination_attempt_count=3, 1393 ) 1394 self._verify_one_to_one_ranging_airplane_mode_toggle( 1395 self.initiator, self.responder, initiator_params, responder_params, 1396 self.responder_addr) 1397 self.responder.stop_ranging() 1398 self.initiator.stop_ranging() 1399 1400 def test_ranging_nearby_share_profile_move_to_bg_and_fg(self): 1401 """Verifies ranging with app moving background and foreground. 1402 1403 Steps: 1404 1. Verifies ranging with default Fira parameters. 1405 2. Move app to background. 1406 3. Ensures the app does not receive range data notifications 1407 4. Move app to foreground. 1408 5. Ensures the app starts receiving range data notifications 1409 """ 1410 initiator_params = uwb_ranging_params.UwbRangingParams( 1411 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1412 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1413 device_address=self.initiator_addr, 1414 destination_addresses=[self.responder_addr], 1415 ranging_interval_ms=200, 1416 slots_per_ranging_round=20, 1417 in_band_termination_attempt_count=3, 1418 ) 1419 responder_params = uwb_ranging_params.UwbRangingParams( 1420 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1421 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1422 device_address=self.responder_addr, 1423 destination_addresses=[self.initiator_addr], 1424 ranging_interval_ms=200, 1425 slots_per_ranging_round=20, 1426 in_band_termination_attempt_count=3, 1427 ) 1428 self._verify_one_to_one_ranging( 1429 self.initiator, 1430 self.responder, 1431 initiator_params, 1432 responder_params, 1433 self.responder_addr, 1434 ) 1435 1436 self._move_snippet_to_bg(self.initiator) 1437 time.sleep(0.75) 1438 self.initiator.clear_ranging_session_callback_events() 1439 try: 1440 self.initiator.verify_callback_received("ReportReceived") 1441 asserts.fail( 1442 "Should not receive ranging reports when the app is in background" 1443 ) 1444 except TimeoutError: 1445 # Expect to get a timeout error 1446 self.initiator.log.info("Did not get any ranging reports as expected") 1447 1448 self._move_snippet_to_fg(self.initiator) 1449 self.initiator.clear_ranging_session_callback_events() 1450 try: 1451 self.initiator.verify_callback_received("ReportReceived") 1452 except TimeoutError: 1453 asserts.fail( 1454 "Should receive ranging reports when the app is in foreground" 1455 ) 1456 self.responder.stop_ranging() 1457 self.initiator.stop_ranging() 1458 1459 def test_ranging_nearby_share_profile_verify_app_in_bg_stops_session(self): 1460 """Verifies stop session callback with app staying in the background. 1461 1462 Steps: 1463 1. Verifies ranging with default Fira parameters. 1464 2. Move app to background. 1465 3. Ensures the app does not receive range data notifications 1466 4. Remain in background. 1467 5. Ensures the session is stopped within 4 mins. 1468 """ 1469 asserts.skip_if( 1470 self._is_bg_ranging_supported(self.initiator), 1471 f"Bg ranging is supported on {self.initiator}", 1472 ) 1473 initiator_params = uwb_ranging_params.UwbRangingParams( 1474 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1475 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1476 device_address=self.initiator_addr, 1477 destination_addresses=[self.responder_addr], 1478 ranging_interval_ms=200, 1479 slots_per_ranging_round=20, 1480 in_band_termination_attempt_count=3, 1481 ) 1482 responder_params = uwb_ranging_params.UwbRangingParams( 1483 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1484 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1485 device_address=self.responder_addr, 1486 destination_addresses=[self.initiator_addr], 1487 ranging_interval_ms=200, 1488 slots_per_ranging_round=20, 1489 in_band_termination_attempt_count=3, 1490 ) 1491 self._verify_one_to_one_ranging( 1492 self.initiator, 1493 self.responder, 1494 initiator_params, 1495 responder_params, 1496 self.responder_addr, 1497 ) 1498 1499 self._move_snippet_to_bg(self.initiator) 1500 time.sleep(0.75) 1501 self.initiator.clear_ranging_session_callback_events() 1502 try: 1503 self.initiator.verify_callback_received("ReportReceived") 1504 asserts.fail( 1505 "Should not receive ranging reports when the app is in background" 1506 ) 1507 except TimeoutError: 1508 # Expect to get a timeout error 1509 self.initiator.log.info("Did not get any ranging reports as expected") 1510 1511 # Verify session is stopped in the next 4 minutes. 1512 try: 1513 self.initiator.verify_callback_received("Stopped", timeout=60 * 4) 1514 except TimeoutError: 1515 asserts.fail( 1516 "Should receive ranging stop when the app is in background" 1517 ) 1518 1519 def test_ranging_nearby_share_profile_bg_fails(self): 1520 """Verifies opening a ranging session fails if app is in background. 1521 1522 Steps: 1523 1. Move app to background. 1524 2. Ensures the app cannot open session. 1525 """ 1526 asserts.skip_if( 1527 self._is_bg_ranging_supported(self.initiator), 1528 f"Bg ranging is supported on {self.initiator}", 1529 ) 1530 initiator_params = uwb_ranging_params.UwbRangingParams( 1531 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1532 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1533 device_address=self.initiator_addr, 1534 destination_addresses=[self.responder_addr], 1535 ranging_interval_ms=200, 1536 slots_per_ranging_round=20, 1537 in_band_termination_attempt_count=3, 1538 ) 1539 self._move_snippet_to_bg(self.initiator) 1540 self.initiator.open_fira_ranging(initiator_params, expect_to_succeed=False) 1541 1542 def test_ranging_nearby_share_profile_no_valid_reports_stops_session(self): 1543 """Verifies ranging reports not received if peer not available. 1544 1545 Steps: 1546 1. Verifies ranging with default Fira parameters. 1547 2. Reboot the responder to terminate session and cause report errors. 1548 3. Ensures the session is stopped within 2 mins. 1549 """ 1550 initiator_params = uwb_ranging_params.UwbRangingParams( 1551 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1552 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1553 device_address=self.initiator_addr, 1554 destination_addresses=[self.responder_addr], 1555 ranging_interval_ms=200, 1556 slots_per_ranging_round=20, 1557 in_band_termination_attempt_count=3, 1558 ) 1559 responder_params = uwb_ranging_params.UwbRangingParams( 1560 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1561 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1562 device_address=self.responder_addr, 1563 destination_addresses=[self.initiator_addr], 1564 ranging_interval_ms=200, 1565 slots_per_ranging_round=20, 1566 in_band_termination_attempt_count=3, 1567 ) 1568 self._verify_one_to_one_ranging(self.initiator, self.responder, 1569 initiator_params, responder_params, 1570 self.responder_addr) 1571 1572 # Reboot responder and ensure peer is no longer seen in ranging reports 1573 def reboot_responder(): 1574 self.responder.ad.reboot() 1575 self.responder.clear_all_ranging_sessions() 1576 uwb_test_utils.initialize_uwb_country_code_if_not_set(self.responder.ad) 1577 1578 # create a thread to reboot the responder and not block the main test. 1579 thread = threading.Thread(target=reboot_responder) 1580 thread.start() 1581 1582 time.sleep(0.75) 1583 self.initiator.clear_ranging_session_callback_events() 1584 try: 1585 uwb_test_utils.verify_peer_found(self.initiator, self.responder_addr) 1586 asserts.fail("Peer found even though it was rebooted.") 1587 except signals.TestFailure: 1588 self.initiator.log.info("Peer %s not found as expected", 1589 self.responder_addr) 1590 1591 # Wait for 2 mins to stop the session. 1592 try: 1593 self.initiator.verify_callback_received("Stopped", timeout=60*2) 1594 except TimeoutError: 1595 asserts.fail( 1596 "Should receive ranging stop when peer is no longer present") 1597 1598 # Ensure the responder is back after reboot. 1599 thread.join() 1600 1601 def test_ranging_device_tracker_profile_max_sessions_reject(self): 1602 """Verifies opening session fails after max sessions opened. 1603 1604 Steps: 1605 1. Retrieves the max # of FIRA ranging sessions supported - X. 1606 2. Starts X sessions between the 2 devices are successful. 1607 3. Ensure that X + 1 session is rejected. 1608 """ 1609 initiator_max_fira_ranging_sessions = ( 1610 self.initiator.ad.uwb 1611 .getSpecificationInfo()["fira"]["max_ranging_session_number"]) 1612 responder_max_fira_ranging_sessions = ( 1613 self.responder.ad.uwb 1614 .getSpecificationInfo()["fira"]["max_ranging_session_number"]) 1615 max_fira_ranging_sessions = min(initiator_max_fira_ranging_sessions, 1616 responder_max_fira_ranging_sessions) 1617 initiator_params = uwb_ranging_params.UwbRangingParams( 1618 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_INITIATOR, 1619 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLLER, 1620 device_address=self.initiator_addr, 1621 destination_addresses=[self.responder_addr], 1622 multi_node_mode=uwb_ranging_params.FiraParamEnums 1623 .MULTI_NODE_MODE_UNICAST, 1624 ranging_interval_ms=240, 1625 slots_per_ranging_round=6, 1626 in_band_termination_attempt_count=3, 1627 ) 1628 responder_params = uwb_ranging_params.UwbRangingParams( 1629 device_role=uwb_ranging_params.FiraParamEnums.DEVICE_ROLE_RESPONDER, 1630 device_type=uwb_ranging_params.FiraParamEnums.DEVICE_TYPE_CONTROLEE, 1631 device_address=self.responder_addr, 1632 destination_addresses=[self.initiator_addr], 1633 multi_node_mode=uwb_ranging_params.FiraParamEnums 1634 .MULTI_NODE_MODE_UNICAST, 1635 ranging_interval_ms=240, 1636 slots_per_ranging_round=6, 1637 in_band_termination_attempt_count=3, 1638 ) 1639 for i in range(max_fira_ranging_sessions): 1640 initiator_params.update(session_id=10+i) 1641 responder_params.update(session_id=10+i) 1642 self._verify_one_to_one_ranging(self.initiator, self.responder, 1643 initiator_params, responder_params, 1644 self.responder_addr, session=i) 1645 # This should fail. 1646 if max_fira_ranging_sessions == initiator_max_fira_ranging_sessions: 1647 initiator_params.update(session_id=10+max_fira_ranging_sessions) 1648 self.initiator.open_fira_ranging(initiator_params, 1649 session=max_fira_ranging_sessions, 1650 expect_to_succeed=False) 1651 if max_fira_ranging_sessions == responder_max_fira_ranging_sessions: 1652 responder_params.update(session_id=10+max_fira_ranging_sessions) 1653 self.responder.open_fira_ranging(responder_params, 1654 session=max_fira_ranging_sessions, 1655 expect_to_succeed=False) 1656 1657 for i in range(max_fira_ranging_sessions): 1658 self.responder.stop_ranging(session=i) 1659 self.initiator.stop_ranging(session=i) 1660 1661 1662if __name__ == "__main__": 1663 if "--" in sys.argv: 1664 index = sys.argv.index("--") 1665 sys.argv = sys.argv[:1] + sys.argv[index + 1:] 1666 suite_runner.run_suite([RangingTest]) 1667