# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License.
import asyncio import hci_packets as hci import link_layer_packets as ll import unittest from hci_packets import ErrorCode from py.bluetooth import Address from py.controller import ControllerTest, generate_rpa
ifnot controller.le_features.ll_privacy:
self.skipTest("LL privacy not supported")
# 1. Upper Tester sends an HCI_LE_Set_Random_Address to the IUT with a # random static address.
controller.send_cmd(hci.LeSetRandomAddress(random_address=local_random_address))
# 4. Upper Tester enables active scanning with filtering policy set to # ‘Accept all advertising packets (0x00)’ in the IUT.
controller.send_cmd(
hci.LeSetScanParameters(
le_scan_type=hci.LeScanType.ACTIVE,
le_scan_interval=LL_scanner_scanInterval_MAX,
le_scan_window=LL_scanner_scanWindow_MAX,
own_address_type=hci.OwnAddressType.RESOLVABLE_OR_RANDOM_ADDRESS,
scanning_filter_policy=hci.LeScanningFilterPolicy.ACCEPT_ALL))
# 5. The Lower Tester sends an ADV_SCAN_IND packet each advertising # event using the selected advertising channel only. Repeat for at # least 20 advertising intervals or until step 7 occurs.
controller.send_ll(ll.LeLegacyAdvertisingPdu(
source_address=peer_resolvable_address,
advertising_address_type=ll.AddressType.RANDOM,
advertising_type=ll.LegacyAdvertisingType.ADV_SCAN_IND,
advertising_data=[1, 2, 3]),
rssi=-16)
# 6. Lower Tester receives a SCAN_REQ packet T_IFS after any of the # ADV_SCAN_IND packets. The ScanA field in the SCAN_REQ packet shall # use the same resolvable private address.
scan_req = await self.expect_ll(
ll.LeScan(source_address=self.Any,
destination_address=peer_resolvable_address,
advertising_address_type=ll.AddressType.RANDOM,
scanning_address_type=ll.AddressType.RANDOM)) # TODO check that source_address is resolvable by lower tester.
self.assertTrue(scan_req.source_address.is_resolvable())
# 8. Interleave with step 6: Upper Tester receives an # HCI_LE_Advertising_Report containing the information used in the # ADV_SCAN_IND packets.
await self.expect_evt(
hci.LeAdvertisingReport(responses=[
hci.LeAdvertisingResponse(event_type=hci.AdvertisingEventType.ADV_SCAN_IND,
address_type=hci.AddressType.PUBLIC_DEVICE_ADDRESS,
address=peer_identity_address,
advertising_data=[1, 2, 3],
rssi=0xf0)
]))
# 7. Lower Tester sends a SCAN_RSP packet T_IFS after the SCAN_REQ # packet. The AdvA field in the SCAN_RSP packet should use the # resolvable private address that was used in the SCAN_REQ packet.
controller.send_ll(ll.LeScanResponse(source_address=peer_resolvable_address,
advertising_address_type=ll.AddressType.RANDOM,
scan_response_data=[4, 5, 6]),
rssi=-16)
# 9. Interleave with step 7: Upper Tester receives an # HCI_LE_Advertising_Report event containing the scan response # information.
await self.expect_evt(hci.LeAdvertisingReport(responses=[
hci.LeAdvertisingResponse(event_type=hci.AdvertisingEventType.SCAN_RESPONSE,
address_type=hci.AddressType.PUBLIC_DEVICE_ADDRESS,
address=peer_identity_address,
advertising_data=[4, 5, 6],
rssi=0xf0)
]),
timeout=3)
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-27)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.