From 708cb6e2e83068f9443a6f75f5f95f6c5d718301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Mon, 4 May 2026 15:31:33 +0200 Subject: [PATCH] bluez5: bap: Add bluez5.bap-server.ascs-announcement property BAP/USR/ADV/BV-04-C test requires to advertise Audio Stream Control Service properties with Targeted Announcement type. --- doc/dox/config/pipewire-props.7.md | 5 +++++ spa/plugins/bluez5/bluez5-dbus.c | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/doc/dox/config/pipewire-props.7.md b/doc/dox/config/pipewire-props.7.md index 44b16f505..c6fb632f6 100644 --- a/doc/dox/config/pipewire-props.7.md +++ b/doc/dox/config/pipewire-props.7.md @@ -1402,6 +1402,11 @@ If not set or set to "balanced", both low-latency and high-reliability QoS confi This property is experimental. Available: low-latency, high-reliability, balanced +@PAR@ device-prop bluez5.bap-server.ascs-announcement = "general" # string +BAP server announcement forced for ASCS advertisement. By default this is set to "general". +This property is experimental. +Available: general, targeted + ## Node properties @PAR@ node-prop bluez5.media-source-role # string diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c index 9e5db3e8f..f35a698cc 100644 --- a/spa/plugins/bluez5/bluez5-dbus.c +++ b/spa/plugins/bluez5/bluez5-dbus.c @@ -134,6 +134,8 @@ struct spa_bt_monitor { struct bap_features bap_features; + uint8_t bap_ascs_announcement; + struct spa_bt_quirks *quirks; #define MAX_SETTINGS 128 @@ -5793,7 +5795,7 @@ static int append_le_service_data(struct spa_bt_monitor *monitor, DBusMessageIte if (!adv) return -1; - adv->announcement_type = BAP_ANNOUNCEMENT_GENERAL; + adv->announcement_type = monitor->bap_ascs_announcement; adv->available_sink_contexts = htobs(monitor->bap_sink_qos.supported_context); adv->available_source_contexts = htobs(monitor->bap_source_qos.supported_context); adv->metadata_length = 4; @@ -7478,6 +7480,17 @@ static void parse_bap_features(struct spa_bt_monitor *this, const struct spa_dic bap_feature_parse(this, gmap_uuid, spa_dict_lookup(info, "bluez5.bap-server-gmap-features")); } +static void parse_ascs_announcement(struct spa_bt_monitor *this, const struct spa_dict *info) +{ + const char *str; + + str = spa_dict_lookup(info, "bluez5.bap-server.ascs-announcement"); + if (spa_streq(str, "targeted")) + this->bap_ascs_announcement = BAP_ANNOUNCEMENT_TARGETED; + else if (spa_streq(str, "general")) + this->bap_ascs_announcement = BAP_ANNOUNCEMENT_GENERAL; +} + static void bap_init_qos(struct spa_bt_monitor *this) { /* BlueZ has default values for phy/rtn/latency/delays */ @@ -7554,6 +7567,7 @@ static void parse_bap_server(struct spa_bt_monitor *this, const struct spa_dict bap_clamp_qos_delay(&this->bap_source_qos); parse_bap_features(this, info); + parse_ascs_announcement(this, info); } static void get_global_settings(struct spa_bt_monitor *this, const struct spa_dict *dict)