From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v1 2/6] doc: describe the true wireless broadcast assistant test case
Date: Mon, 21 Sep 2026 17:01:19 -0400 [thread overview]
Message-ID: <20260921210123.3690449-3-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20260921210123.3690449-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Assisted-by: opencode:claude-opus-5
---
doc/functional-bap.rst | 122 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 122 insertions(+)
diff --git a/doc/functional-bap.rst b/doc/functional-bap.rst
index 926d9a54a632..87917065e1eb 100644
--- a/doc/functional-bap.rst
+++ b/doc/functional-bap.rst
@@ -537,3 +537,125 @@ test_bap_unicast_set_transport_acquire
are only created once every one of them is active, so the
transports of both members have to be acquired: acquiring only
one leaves the group incomplete and no CIS is created at all.
+
+TRUE WIRELESS BROADCAST ASSISTANT
+=================================
+
+Three hosts, with the Broadcast Source and the Broadcast Assistant
+colocated on host0, and the two sides of a true wireless pair as Scan
+Delegators forming a coordinated set:
+
+.. code-block::
+
+ +------------------------+ +------------------------+
+ | host0 | extended + | host1 |
+ | Broadcast Source | periodic adv | Scan Delegator, left |
+ | + Broadcast Assistant | --------------> | bluetoothctl -a auto |
+ | bluetoothctl -a auto | | broadcast-delegator- |
+ | broadcast-source-2bis | BIS 1, F.Left | left.bt |
+ | BCAA endpoint (0x1852) | ==============> | BAA endpoint (0x1851) |
+ | | | Front Left, rank 1 |
+ | | ACL, BASS, PAST | |
+ | | --------------> | |
+ | | +------------------------+
+ | |
+ | | extended + +------------------------+
+ | | periodic adv | host2 |
+ | | --------------> | Scan Delegator, right |
+ | | | bluetoothctl -a auto |
+ | | BIS 2, F.Right | broadcast-delegator- |
+ | | ==============> | right.bt |
+ | | | BAA endpoint (0x1851) |
+ | | ACL, BASS, PAST | Front Right, rank 2 |
+ | | --------------> | |
+ +------------------------+ +------------------------+
+
+ the two delegators share the same SIRK, so they are resolved into
+ a single set and connecting one connects the other
+
+ the assistant pushes one BIS to each side, and each of them
+ receives the periodic advertising sync over its own connection
+
+ --> advertising is scanned by ==> audio flows towards
+
+This combines the two topologies above: the BIG carries one BIS per
+channel, as in TRUE WIRELESS BROADCAST, while the sides are members of
+a coordinated set, as in COORDINATED SET, so the assistant discovers
+and connects them as one device.
+
+The delegators run `bluetoothd` with the same ``[CSIS]`` configuration
+as the acceptors of the COORDINATED SET section, with ``Rank`` 1 for
+the left one and 2 for the right one, and both advertise the RSI.
+
+``client/scripts/broadcast-source-2bis.bt`` on host0
+ As in TRUE WIRELESS BROADCAST: a BIG with one BIS per channel,
+ encrypted with the broadcast code `bluetoothctl` uses by default.
+ The two local streams are exposed as MediaAssistant objects in
+ the ``local`` state, under the adapter path, i.e.
+ ``/org/bluez/hci0/sid0/bis1`` and ``/org/bluez/hci0/sid0/bis2``.
+
+``client/scripts/broadcast-delegator-left.bt`` on host1
+ Registers a Broadcast Sink endpoint
+ (``00001851-0000-1000-8000-00805f9b34fb``) with LC3 and Front Left
+ as its only location, enables automatic transport selection and
+ acquisition, and advertises with the RSI, so the Broadcast
+ Assistant can discover it as a member of the set and connect.
+
+``client/scripts/broadcast-delegator-right.bt`` on host2
+ As above, with Front Right as its only location and rank 2.
+
+test_bass_past_earbuds_transport_acquire
+----------------------------------------
+
+:Setup: As above.
+
+:Steps:
+ 1. Start `bluetoothctl` with the source script on host0 and the
+ delegator scripts on host1 and host2.
+ 2. Assistant: ``scan on``, wait for both members to be found,
+ ``scan off``, then ``pair`` one of them.
+ 3. Assistant: ``assistant.push /org/bluez/hci0/sid0/bis1``,
+ answering the device prompt with the device path of the left
+ delegator, and ``assistant.push /org/bluez/hci0/sid0/bis2``
+ with the right one.
+
+:Expected:
+ 1. Two ``Acquire successful: fd <fd> MTU <read>:<write>`` on the
+ source, i.e. it is broadcasting both channels, with the local
+ streams exposed as ``[NEW] Assistant <adapter>/sid0/bis1`` and
+ ``<adapter>/sid0/bis2``. On both delegators,
+ ``Advertising object registered``.
+ 2. ``Pairing successful``, the members are resolved into a single
+ set, reported as
+ ``[NEW] DeviceSet /org/bluez/hci0/set_<sirk>``, and the other
+ member is connected and bonded on its own, with the services
+ of both resolved.
+ 3. ``Assistant <path> pushed`` for both pushes.
+ 4. On each delegator a transport is created for the BIS that was
+ pushed to it, and selected and acquired automatically, reaching
+ ``State: broadcasting``, i.e. it synced to the BIG, and then
+ ``State: active``.
+
+:Notes: Only one member is paired: finding a member of a set triggers
+ connecting the remaining ones. Both links still have to be
+ encrypted before the pushes, as the Broadcast Receive State
+ characteristic of each member is read over its own connection,
+ which is why the services of both are waited for.
+
+ Each member gets a push of its own: BASS has no notion of a set,
+ so the assistant adds the source to the Broadcast Receive State
+ of each delegator separately, and each of them receives the
+ periodic advertising sync over its own ACL (PAST).
+
+ A push carries the BIS to sync to, but the location of the member
+ is what decides whether a transport is created for it: pushing
+ the right BIS to the left side leaves it without one, as the
+ Channel Allocation does not match its PAC.
+
+ The broadcast code of the local streams is handed to the
+ delegators by the pushes, so their automatic transport selection
+ does not have to prompt for it on either side.
+
+ As in the BROADCAST ASSISTANT case, the streams are verified on
+ the delegators rather than through the state of the MediaAssistant
+ objects, which stay in the ``local`` state.
--
2.55.0
next prev parent reply other threads:[~2026-09-21 21:01 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-21 21:01 [PATCH BlueZ v1 0/6] Add true wireless BAP broadcast tests Luiz Augusto von Dentz
2026-09-21 21:01 ` [PATCH BlueZ v1 1/6] doc: describe the true wireless broadcast test cases Luiz Augusto von Dentz
2026-09-21 23:47 ` Add true wireless BAP broadcast tests bluez.test.bot
2026-09-21 21:01 ` Luiz Augusto von Dentz [this message]
2026-09-21 21:01 ` [PATCH BlueZ v1 3/6] test: functional: add the true wireless " Luiz Augusto von Dentz
2026-09-21 21:01 ` [PATCH BlueZ v1 4/6] bass: keep the push target per MediaAssistant object Luiz Augusto von Dentz
2026-09-21 21:01 ` [PATCH BlueZ v1 5/6] client: connect a device that is already paired Luiz Augusto von Dentz
2026-09-21 21:01 ` [PATCH BlueZ v1 6/6] test: functional: add the true wireless broadcast assistant test Luiz Augusto von Dentz
2026-09-22 15:00 ` [PATCH BlueZ v1 0/6] Add true wireless BAP broadcast tests patchwork-bot+bluetooth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260921210123.3690449-3-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox