From 31b387f2699b280a75d45929f720cea1b5f90e62 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Wed, 21 Feb 2024 18:21:32 +0200 Subject: [PATCH] bluez5: add per-device option for BAP unicast stream group ID Add some option to set manually group IDs of unicast streams of devices. Intel controllers don't appear to support more than one group at a time, but in principle this can be done. --- doc/dox/config/pipewire-devices.7.md | 4 ++++ spa/plugins/bluez5/bluez5-dbus.c | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/dox/config/pipewire-devices.7.md b/doc/dox/config/pipewire-devices.7.md index cc38aeedb..5a0821b12 100644 --- a/doc/dox/config/pipewire-devices.7.md +++ b/doc/dox/config/pipewire-devices.7.md @@ -413,6 +413,10 @@ PipeWire Opus Pro Audio encoding mode: audio, voip, lowdelay @PAR@ device-param bluez5.a2dp.opus.pro.bidi.application = "audio" PipeWire Opus Pro Audio duplex encoding mode: audio, voip, lowdelay +@PAR@ device-param bluez5.bap.cig = INTEGER +Set CIG ID for BAP unicast streams of the device. +Default: "auto" (automatic). + ## Node properties @PAR@ device-param bluez5.media-source-role diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c index 613ea3773..44b004c1a 100644 --- a/spa/plugins/bluez5/bluez5-dbus.c +++ b/spa/plugins/bluez5/bluez5-dbus.c @@ -980,6 +980,7 @@ static DBusHandlerResult endpoint_select_properties(DBusConnection *conn, DBusMe struct bap_codec_qos qos; DBusMessageIter entry, variant, qos_dict; const char *entry_key = "QoS"; + uint8_t cig = 0xff; spa_zero(qos); @@ -990,10 +991,18 @@ static DBusHandlerResult endpoint_select_properties(DBusConnection *conn, DBusMe goto error_invalid; } + if (ep->device->settings) { + const char *str = spa_dict_lookup(ep->device->settings, "bluez5.bap.cig"); + uint32_t value; + + if (spa_atou32(str, &value, 0)) + cig = value; + } + spa_log_debug(monitor->log, "select qos: interval:%d framing:%d phy:%d sdu:%d " - "rtn:%d latency:%d delay:%d target_latency:%d", + "rtn:%d latency:%d delay:%d target_latency:%d cig:%u", qos.interval, qos.framing, qos.phy, qos.sdu, qos.retransmission, - qos.latency, (int)qos.delay, qos.target_latency); + qos.latency, (int)qos.delay, qos.target_latency, cig); dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &entry_key); @@ -1015,6 +1024,9 @@ static DBusHandlerResult endpoint_select_properties(DBusConnection *conn, DBusMe append_basic_variant_dict_entry(&qos_dict, "PresentationDelay", DBUS_TYPE_UINT32, "u", &qos.delay); append_basic_variant_dict_entry(&qos_dict, "TargetLatency", DBUS_TYPE_BYTE, "y", &qos.target_latency); + if (cig < 0xf0) + append_basic_variant_dict_entry(&qos_dict, "CIG", DBUS_TYPE_BYTE, "y", &cig); + dbus_message_iter_close_container(&variant, &qos_dict); dbus_message_iter_close_container(&entry, &variant); dbus_message_iter_close_container(&dict, &entry);