docs: Bluetooth: Add additional notes to BAP related services
Some of the services have some unique points worth knowing as both a contributor and an application developer. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
parent
d2dfb8e8d7
commit
9b66515ce0
|
@ -264,12 +264,74 @@ defines multiple roles:
|
|||
* Unicast Server
|
||||
* Broadcast Source
|
||||
* Broadcast Sink
|
||||
* Scan Delegator (not yet implemented)
|
||||
* Broadcast assistant (not yet implemented)
|
||||
* Scan Delegator
|
||||
* Broadcast Assistant
|
||||
|
||||
Each role can be enabled individually, and it is possible to support more than
|
||||
one role.
|
||||
|
||||
Notes about the stream control services
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
There are 3 services primarily used by stream control using the Basic Audio Profile.
|
||||
|
||||
Audio Stream Control Service (ASCS)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
ASCS is a service used exclusively for setting up unicast streams,
|
||||
and is located on the BAP Unicast Server device.
|
||||
The service exposes one or more endpoints that can either be a sink or source endpoint,
|
||||
from the perspective of the Unicast Server.
|
||||
That means a sink endpoint is always audio from the Unicast Client to the Unicast Server,
|
||||
and a source endpoint is always from the Unicast Server to the Unicast Client.
|
||||
|
||||
Unlike most other GATT services,
|
||||
ASCS require that each characteristic in the service has unique data per client.
|
||||
This means that if a Unicast Server is connected to multiple Unicast Clients,
|
||||
the Unicast Clients are not able to see or control the endpoints configured by the other clients.
|
||||
For example if a person's smartphone is streaming audio to a headset,
|
||||
then the same person will not be able to see or control that stream from their smartwatch.
|
||||
|
||||
Broadcast Audio Scan Service (BASS)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
BASS is a service that is exclusively used by the Scan Delegator and Broadcast Assistant.
|
||||
The main purpose of the service is to offload scanning from low power peripherals to e.g. phones
|
||||
and PCs.
|
||||
Unlike ASCS where the data is required to be unique per client,
|
||||
the data in BASS (called receive states) are (usually) shared among all connected clients.
|
||||
That means it is possible for a person to tell their headphones to synchronize to a
|
||||
Broadcast Source using their phone,
|
||||
and then later tell their headphones to stop synchronizing using their smartwatch.
|
||||
|
||||
A Broadcast Assistant can be any device,
|
||||
and may only support this one role without any audio capabilities.
|
||||
This allows legacy devices that do not support periodic advertisements or isochronous channels to
|
||||
still provide an interface and scan offloading for peripherals.
|
||||
The Bluetooth SIG have provided a guide on how to develop such legacy Broadcast Assistants that can
|
||||
be found at
|
||||
https://www.bluetooth.com/bluetooth-resources/developing-auracast-receivers-with-an-assistant-application-for-legacy-smartphones/.
|
||||
An important note about this guide is that many operating systems (especially on phones),
|
||||
do not allow generic usage of the BASS UUID,
|
||||
effectively making it impossible to implement your own Broadcast Assistant,
|
||||
because you cannot access the BASS.
|
||||
|
||||
Published Audio Capabilities Service (PACS)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
PACS is used to expose a device's audio capabilities in Published Audio Capabilities (PAC) records.
|
||||
PACS is used by nearly all roles,
|
||||
where the Unicast Client and Broadcast Assistant will act as PACS clients,
|
||||
and Unicast Server and Broadcast Sink will act as PACS servers.
|
||||
These records contain information about the codec, and which values are supported by each codec.
|
||||
The values for the LC3 codec are defined by the Bluetooth Assigned numbers
|
||||
(https://www.bluetooth.com/specifications/assigned-numbers/), and the values for other codecs such
|
||||
as SBC are left undefined/implementation specific for BAP.
|
||||
|
||||
PACS also usually share the same data between each connected client,
|
||||
but by using functions such as :c:func:`bt_pacs_conn_set_available_contexts_for_conn`,
|
||||
it is possible to set specific values for specific clients.
|
||||
|
||||
The API reference for stream control can be found in
|
||||
:ref:`Bluetooth Audio <bluetooth_audio>`.
|
||||
|
||||
|
|
Loading…
Reference in a new issue