blob: 245d1cc66e75053d889769ce5d73cd7522b3c90b [file] [log] [blame]
.. _bluetooth_audio_arch:
Bluetooth Audio Architecture
#############################
.. figure:: img/ble_audio_arch.svg
:align: center
:alt: Bluetooth Audio Architecture
Bluetooth Audio Architecture
Generic Audio Framework (GAF)
*****************************
The Generic Audio Framework (GAF) is considered the middleware of the Bluetooth
LE Audio architecture. The GAF contains the profiles and services that allows
higher layer applications and profiles to set up streams, change volume, control
media and telephony and more. The GAF builds on GATT, GAP and isochronous
channels (ISO).
GAF uses GAP to connect, advertise and synchronize to other devices.
GAF uses GATT to configure streams, associate streams with content
(e.g. media or telephony), control volume and more.
GAF uses ISO for the audio streams themselves, both as unicast (connected)
audio streams or broadcast (unconnected) audio streams.
GAF mandates the use of the LC3 codec, but also supports other codecs.
.. figure:: img/gaf.svg
:align: center
:alt: Generic Audio Framework
Generic Audio Framework
The top-level profiles TMAP and HAP are not part of the GAF, but rather provide
top-level requirements for how to use the GAF.
GAF has been implemented in Zephyr with the following structure.
.. figure:: img/zephyr_gaf.svg
:align: center
:alt: Generic Audio Framework
Zephyr Generic Audio Framework
Currently CAP (and CAS) as well as CCP (and TBS) are not yet implemented in
Zephyr. Similarly the top-level profiles TMAP and HAP are also not yet
implemented.
Using the Bluetooth Audio Stack
===============================
To use any of the profiles in the Bluetooth Audio Stack, including the top-level
profiles outside of GAF, :kconfig:option:`CONFIG_BT_AUDIO` shall be enabled.
This Kconfig option allows the enabling of the individual profiles inside of the
Bluetooth Audio Stack. Each profile can generally be enabled on its own, but
enabling higher-layer profiles (such as CAP, TMAP and HAP) will typically
require enabling some of the lower layer profiles.
It is, however, possible to create a device that uses e.g. only Stream Control
(with just the BAP), without using any of the content control or
rendering/capture control profiles, or vice versa. Using the higher layer
profiles will however typically provide a better user experience and better
interoperability with other devices.
Stream Control (BAP)
--------------------
Stream control is implemented by the Basic Audio Profile. This profile
defines multiple roles:
* Unicast Client
* Unicast Server
* Broadcast Source
* Broadcast Sink
* Scan Delegator (not yet implemented)
* Broadcast assistant (not yet implemented)
Each role can be enabled individually, and it is possible to support more than
one role.
The API reference for stream control can be found in
:ref:`Bluetooth Audio <bluetooth_audio>`.
Rendering and Capture Control
-----------------------------
Rendering and capture control is implemented by the Volume Control Profile
(VCP) and Microphone Input Control Profile (MICP).
The VCP implementation supports the following roles
* Volume Control Service (VCS) Server
* Volume Control Service (VCS) Client
The MICP implementation supports the following roles
* Microphone Input Control Profile (MICP) Microphone Device (server)
* Microphone Input Control Profile (MICP) Microphone Controller (client)
The API reference for volume control can be found in
:ref:`Bluetooth Volume Control <bluetooth_volume>`.
The API reference for microphone input control can be found in
:ref:`Bluetooth Microphone Input Control <bluetooth_microphone>`.
Content Control
---------------
Content control is implemented by the Call Control Profile (CCP) and
Media Control Profile (MCP).
The CCP implementation is not yet implemented in Zephyr.
The MCP implementation supports the following roles
* Media Control Service (MCS) Server via the Media Proxy module
* Media Control Client (MCC)
The API reference for media control can be found in
:ref:`Bluetooth Media Control <bluetooth_media>`.
Coordinated Sets
----------------
Coordinated Sets is implemented by the Coordinated Sets Identification Profile
(CSIP).
The CSIP implementation supports the following roles
* Coordinated Set Identification Service (CSIP) Set Member
* Coordinated Set Identification Service (CSIP) Set Coordinator
The API reference for media control can be found in
:ref:`Bluetooth Coordinated Sets <bluetooth_coordinated_sets>`.