| .. _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>`. |