From ca461c47da69c5bb82f62a5669ca325b47bb347c Mon Sep 17 00:00:00 2001 From: Paul Obernesser Date: Mon, 8 Dec 2025 16:18:40 +0100 Subject: [PATCH] add PBP qualification tests and rename QoS profiles - Rename AuracastQosHigh/Mid/Low to AuracastQosDefault/Fast for clarity - Add Public Broadcast Profile (PBP) service data to advertising with dynamic feature calculation based on encryption and sample rate - Add PBP/PBS/STR test cases (BV-01-C through BV-06-C) for standard and high quality streaming with various configurations - Update all existing test cases and main scripts to use new QoS profile names --- src/auracast/auracast_config.py | 17 +++----- src/auracast/multicast.py | 34 ++++++++++++--- src/auracast/multicast_control.py | 2 +- src/auracast/multicast_script.py | 2 +- src/qualification/BAP/BSRC/SCC/test_scc.py | 4 +- src/qualification/BAP/BSRC/STR/test_str.py | 5 ++- src/qualification/CAP/BST/test_bst.py | 4 +- src/qualification/GAP/BIS/BBM/test_bbm.py | 4 +- src/qualification/PBP/PBS/STR/test_bv01c.py | 45 ++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv02c.py | 45 ++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv03c.py | 45 ++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv04c.py | 45 ++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv05c.py | 46 +++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv06c.py | 45 ++++++++++++++++++++ src/qualification/PBP/PBS/STR/test_bv07c.py | 46 +++++++++++++++++++++ 15 files changed, 362 insertions(+), 27 deletions(-) create mode 100644 src/qualification/PBP/PBS/STR/test_bv01c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv02c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv03c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv04c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv05c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv06c.py create mode 100644 src/qualification/PBP/PBS/STR/test_bv07c.py diff --git a/src/auracast/auracast_config.py b/src/auracast/auracast_config.py index d751ebe..ca73302 100644 --- a/src/auracast/auracast_config.py +++ b/src/auracast/auracast_config.py @@ -7,24 +7,19 @@ class AuracastQoSConfig(BaseModel): number_of_retransmissions: int max_transport_latency_ms: int -class AuracastQosHigh(AuracastQoSConfig): +class AuracastQosDefault(AuracastQoSConfig): iso_int_multiple_10ms: int = 1 number_of_retransmissions:int = 4 #4 max_transport_latency_ms:int = 43 #varies from the default value in bumble (was 65) -class AuracastQosMid(AuracastQoSConfig): - iso_int_multiple_10ms: int = 2 - number_of_retransmissions:int = 3 - max_transport_latency_ms:int = 65 - -class AuracastQosLow(AuracastQoSConfig): - iso_int_multiple_10ms: int = 3 - number_of_retransmissions:int = 2 #4 - max_transport_latency_ms:int = 65 #varies from the default value in bumble (was 65) +class AuracastQosFast(AuracastQoSConfig): + iso_int_multiple_10ms: int = 1 + number_of_retransmissions:int = 2 + max_transport_latency_ms:int = 22 class AuracastGlobalConfig(BaseModel): - qos_config: AuracastQoSConfig = AuracastQosHigh() + qos_config: AuracastQoSConfig = AuracastQosDefault() debug: bool = False device_name: str = 'Auracaster' transport: str = '' diff --git a/src/auracast/multicast.py b/src/auracast/multicast.py index 1fff98f..7a88ae4 100644 --- a/src/auracast/multicast.py +++ b/src/auracast/multicast.py @@ -346,6 +346,32 @@ async def init_broadcast( ) ) bigs[f'big{i}']['broadcast_audio_announcement'] = bap.BroadcastAudioAnnouncement(conf.id) + + # Build advertising data types list + advertising_data_types = [ + (core.AdvertisingData.BROADCAST_NAME, conf.name.encode()), + ] + + # [PBP] Add Public Broadcast Profile Service Data (UUID 0x1856) + # Required for PTS Qualification (PBP/PBS/STR) + # Dynamically calculate PBP features based on stream configuration + pbp_features = 0x00 + + # Bit 0: Encryption (set if broadcast_code is configured) + if conf.code is not None: + pbp_features |= 0x01 + + # Bit 1 vs Bit 2: Quality based on sample rate + if global_config.auracast_sampling_rate_hz in [16000, 24000]: + pbp_features |= 0x02 # Standard Quality + elif global_config.auracast_sampling_rate_hz == 48000: + pbp_features |= 0x04 # High Quality + + pbp_service_data = struct.pack('