BAP Part 4 — Audio Configurations, GAP & Security

BAP Part 4 — Audio Configurations, GAP & Security
All 14 unicast and broadcast audio topology configurations, connection procedures, and security requirements
11
Unicast Configs
3
Broadcast Configs
SM1 L2
Min Security

What Was Missing in Parts 1–3

The first three parts covered roles, the LC3 codec, and the streaming procedures. But the spec also defines 14 standardized audio topology configurations — numbered from 1 to 14 — that tell you exactly which CISes, ASEs, and channel allocations are needed for every common real-world use case (mono earbud, stereo earbuds, stereo call headset, bilateral hearing aids, etc.).

This part also covers GAP connection requirements — advertising intervals, scan windows, connection intervals for fast discovery and stream setup — and security requirements, which mandate encryption and bonding before any GATT operation on PACS, ASCS, or BASS.

Key Terms

Audio Configuration 1–14 Sink ASE / Source ASE Audio_Channel_Allocation Unidirectional CIS Bidirectional CIS General Discoverable Mode Connection Interval Security Mode 1 Level 2 LE Secure Connections Bonding CTKD

Part A — Unicast Audio Configurations (1–11)

The spec defines 11 unicast audio configurations. They cover every combination of: how many servers are involved, how many CISes, which directions audio flows, and how many channels each ASE carries. The key variables are:

Num Servers
1 server (one earbud) or 2 servers (left + right earbud independently)
CIS direction
Unidirectional (audio one way only) or Bidirectional (call audio — mic + speaker)
Channels per ASE
1 channel per ASE (one LC3 codec frame) or 2 channels per ASE (two frames multiplexed)

Config Servers CISes Audio Direction Channels Typical Use Case Requirement
1 1 1 uni Client → Server (Sink) 1 Mono earbud receiving audio Mandatory
2 1 1 uni Server → Client (Source) 1 Mono microphone sending audio Mandatory
3 1 1 bi Both directions (Sink + Source) 1+1 Mono call headset Cond.
4 1 1 uni Client → Server (Sink) 2 Stereo in one earbud (FL+FR multiplexed) Cond.
5 1 1 bi Both (2-ch Sink + 1-ch Source) 2+1 Stereo headset with mono mic Cond.
6(i) 1 2 uni Client → Server (2 Sink ASEs) 1+1 Stereo on 1 server, separate CIS per channel Cond.
6(ii) 2 2 uni Client → Server 1 (FL) + Server 2 (FR) 1 each True wireless stereo earbuds (most common) Mandatory*
7(i) 1 2 uni Both directions (separate CISes) 1+1 Headset, call, separate CIS each way Cond.
7(ii) 2 2 uni Server 1 Sink, Server 2 Source 1 each TWS earbuds, call, right ear mic Cond.
8(i) 1 1 bi + 1 uni 2-ch Sink + 1-ch Source 2+1 Stereo headset + mono mic (2 CISes) Cond.
8(ii) 2 1 bi + 1 uni Srv1 bi-dir + Srv2 Sink 1+1+1 TWS + call, one ear has mic Cond.
9(i) 1 2 uni Server → Client (2 Source ASEs) 1+1 Stereo mic on one device Cond.
9(ii) 2 2 uni Server 1 Source + Server 2 Source 1 each Two mics (e.g. bilateral HA TX to phone) Cond.
10 1 1 uni Server → Client (Source) 2 Stereo mic, multiplexed in one CIS Cond.
11(i) 1 2 bi 2-ch Sink + 2-ch Source 4 total Full stereo call, both directions Cond.
11(ii) 2 2 bi Both servers: Sink + Source each 1+1 each TWS stereo call, both ears have mic Cond.

* Config 6(ii) is mandatory for the Unicast Client and mandatory for each Unicast Server that supports the Audio Sink role with >1 Audio Location.

The Most Important Configurations Explained

Configuration 1 — Mono Sink (mandatory)

One client, one server, one unidirectional CIS, one channel. Phone sends audio to a mono earbud. This is the baseline configuration every device must support.

Unicast Client
(Audio Source)
1 CIS (unidirectional)
1 Sink ASE, 1 channel
Unicast Server
(Audio Sink)
Audio_Channel_Allocation in Codec_Specific_Configuration: optional. If present, any single bit (any one location). No Sink Audio Locations requirement.

Configuration 6(ii) — True Wireless Stereo (mandatory for TWS devices)

This is the standard TWS earbud configuration. One client connects to two servers (left and right earbud independently). Each server gets one CIS carrying one channel. The two servers use different Audio Locations — one is Front Left, the other is Front Right.

Unicast Client
(Phone)
CIS 1 → FL
Server 1 (Left Earbud)
Sink ASE, Audio_Channel_Allocation = FL
CIS 2 → FR
Server 2 (Right Earbud)
Sink ASE, Audio_Channel_Allocation = FR
Key requirement: The two servers must have different Sink Audio Locations. Both expose a Sink PAC and one Sink ASE each. The Unicast Client uses a single CIG with two CISes — one per server — and sets the same Presentation_Delay for both, achieving synchronized stereo playback.

Configuration 3 — Mono Call Headset (bidirectional, 1 CIS)

One bidirectional CIS. The server is both an Audio Sink (receives phone audio) and an Audio Source (microphone). This is a phone call through a mono Bluetooth headset. The single CIS carries audio in both directions simultaneously.

Unicast Client
1 bidirectional CIS
⟵⟶
Sink ASE + Source ASE
Unicast Server
Audio Sink + Audio Source

Configuration 11(i) — Full Stereo Call on One Device

Two bidirectional CISes to one server. The server has two Sink ASEs (FL + FR audio in) and two Source ASEs (FL + FR mic out). This is the richest configuration — for example, a gaming headset that receives stereo game audio and sends stereo microphone capture back to the phone.

Part B — Broadcast Audio Configurations (12–14)

Broadcast configurations are simpler — there is no CIS, no ASE. The Broadcast Source configures the BASE structure to define how BISes carry channels.

Config 12 — Single Channel, One BIS (mandatory)

One BIS, one audio channel. A mono broadcast. Audio_Channel_Allocation is optional — if absent, the channel has no assigned spatial location. Every Broadcast Source and Sink must support this.

Config 13 — Stereo, Two BISes (mandatory for multi-location sinks)

Two BISes, each carrying one channel with different Audio_Channel_Allocation (e.g. BIS 1 = FL, BIS 2 = FR). A Broadcast Sink with two Audio Locations must support this. A sink that only supports mono can subscribe to just one BIS and receive one channel.

Config 14 — Stereo in One BIS (optional)

Two channels multiplexed into a single BIS (two LC3 frames per SDU). The Audio_Channel_Allocation LTV at BIS level has two bits set (FL and FR). The Broadcast Sink must support Audio_Channel_Counts ≥ 2 and two Sink Audio Locations to use this.

Config 13 — Stereo Broadcast (most common for headphones)

Broadcast Source
(TV / Phone)
BIS 1 — FL channel
⟶⟶⟶
BIS 2 — FR channel
⟶⟶⟶
(one BIG, two BIS)
Broadcast Sink A (Stereo headphones)
Subscribes to BIS 1 (FL) + BIS 2 (FR) — both Sink Audio Locations present
Broadcast Sink B (Mono hearing aid)
Subscribes to BIS 1 only (FL) — ignores BIS 2

Part C — GAP Connection Requirements

BAP defines specific GAP procedures and parameter values that devices must follow. These matter a lot in practice — wrong advertising intervals cause slow pairing; wrong connection intervals slow down GATT discovery and stream setup.

Peripheral (Unicast Server / Broadcast Sink / Scan Delegator)

When a Peripheral is ready for a new connection (non-bonded scenario), it must enter General or Limited Discoverable mode. It must use Extended Advertising PDUs and include the ASCS/PACS/BASS Service UUIDs in the advertising data so that scanning Centrals can identify it as a BAP device.

Advertising Phase Advertising Interval When
Fast (quicker connection) 20 ms – 30 ms First 30 seconds after starting advertising
Reduced power 150 ms After 30 seconds with no connection
Limited Discoverable Mode timeout: If a Peripheral enters Limited Discoverable mode and no connection is established within 180 seconds, it must exit that mode. This is a GAP requirement (TGAP(lim_adv_timeout)). Devices typically then switch to General Discoverable mode or stop advertising entirely.

Central (Unicast Client / Broadcast Assistant)

A Central scans for Peripherals using General or Limited Discovery. It uses the General Connection Establishment procedure (not the Auto procedure) when it wants to filter devices based on the Announcement Type in the Service Data AD type.

Scan Phase Scan Interval Scan Window
Fast (quicker connection) 30 ms – 60 ms 30 ms
Reduced power 1.28 s 11.25 ms

Connection Intervals — Short During Setup, Relaxed After

This is a detail often missed but critical for stream setup speed. During service discovery and stream configuration, the connection interval must be short so GATT operations complete fast. After setup, it can be relaxed to save power.

During Setup (GATT + stream config)
Min interval 7.5 ms or 10 ms
Max interval 30 ms
Needed for fast GATT writes/notifications and CIS setup
After Setup (during streaming)
Range 50 ms – 70 ms
Relaxed interval saves LE ACL power during audio streaming (audio goes over CIS, not ACL)

Bonded Device Reconnection

After bonding, a Central must start encryption immediately after each reconnection to verify the bond. If encryption fails (the bond no longer exists on the server side), the Central must re-bond and redo service discovery before using any BAP services. This is important for your implementation — never skip the encryption step even if you think the bond is valid.

Part D — Security Requirements

Security is non-negotiable in BAP. Every GATT characteristic in PACS, ASCS, and BASS requires authentication and encryption before it can be accessed.

Role Transport Required Security Mode Encryption Key
Unicast Server / Client LE Security Mode 1, Level 2 128-bit, from LE SC / OOB / CTKD
Broadcast Sink / Scan Delegator LE Security Mode 1, Level 2 128-bit
Broadcast Source (unencrypted stream) LE Broadcast Security Mode 3, Level 1 No encryption
Broadcast Source (encrypted stream) LE Broadcast Security Mode 3, Level 2 Broadcast_Code (16 bytes)
Unicast Server / Client (BR/EDR) BR/EDR Security Mode 4, Level 2 BR/EDR SC or CTKD

What Security Mode 1 Level 2 Actually Means

Authenticated pairing is not strictly required — Level 2 means “encrypted” but not necessarily MITM-protected. You can use “Just Works” pairing and still meet Level 2.
LE Secure Connections mandatory for 128-bit entropy — The spec requires the encryption key to have at least 128 bits of entropy. This rules out legacy pairing (which uses a 56-bit key) and mandates LE Secure Connections or equivalent.
Level 3 is optional but recommended for sensitive audio — Level 3 (authenticated encryption) prevents man-in-the-middle attacks. Hearing aid applications (HAP) typically require Level 3.

Privacy (Resolvable Private Addresses)

The Privacy feature (using Resolvable Private Addresses, RPAs) is recommended for all Peripheral and Central roles. The device rotates its BLE address periodically so it cannot be tracked. Devices using Privacy must distribute their Identity Address (IA) and Identity Resolving Key (IRK) during bonding so bonded peers can resolve the address.

For Broadcast Sources, the recommendation from Section 6.1.3 applies instead: keep the advertising address stable for the lifetime of the BIG, or use a non-resolvable private address (not resolvable, because resolvable RPAs require all sinks to know the IRK).

CTKD (Cross-Transport Key Derivation): If a device supports both LE and BR/EDR, it must support CTKD — the ability to derive a link key on one transport from a pairing done on the other. This means pairing once over LE gives the device a BR/EDR link key too, avoiding a double-pairing experience for users.

BlueZ — Checking Encryption and Bond Status

/* Check if a connection is encrypted and bonded
 * using BlueZ D-Bus interface org.bluez.Device1 */

#include <gio/gio.h>

void check_device_security(GDBusConnection *conn,
                             const char *device_path)
{
    GVariant *paired, *trusted, *services_resolved;
    GError   *error = NULL;

    /* Get device properties from org.bluez.Device1 */
    paired = g_dbus_connection_call_sync(conn,
        "org.bluez", device_path,
        "org.freedesktop.DBus.Properties", "Get",
        g_variant_new("(ss)", "org.bluez.Device1", "Paired"),
        NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);

    services_resolved = g_dbus_connection_call_sync(conn,
        "org.bluez", device_path,
        "org.freedesktop.DBus.Properties", "Get",
        g_variant_new("(ss)", "org.bluez.Device1", "ServicesResolved"),
        NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);

    /* BAP requires: Paired=true AND ServicesResolved=true
     * before accessing PACS/ASCS/BASS characteristics.
     * BlueZ handles SM1L2 (encryption) automatically after pairing.
     * Only read/write characteristics after ServicesResolved=true. */
}

/* You can also check via bluetoothctl:
 * [bluetooth]# info AA:BB:CC:DD:EE:FF
 *   Paired: yes
 *   Trusted: yes
 *   Connected: yes
 *   LegacyPairing: no       ← must be "no" (LE Secure Connections)
 *   ServicesResolved: yes   ← safe to access GATT */

Complete Implementation Checklist

Here is a consolidated checklist based on all four parts of this tutorial series:

Area What to implement
Roles At least one of the 6 BAP roles. Broadcast Sink always needs Scan Delegator.
Services PACS Server (Unicast Server + Broadcast Sink), ASCS Server (Unicast Server), BASS Server (Scan Delegator). Client counterparts for each corresponding client role.
Codec LC3 mandatory. Support at least 16_2 (32 kbps) and 24_2 (48 kbps). Expose in PAC records using LTV structures.
QoS Support 16_2_1 and 16_2_2 at minimum. Expose Presentation_Delay range in ASE codec configured state.
Audio Config Config 1 (mandatory). Config 2 (mandatory). Config 6(ii) mandatory for TWS devices.
GAP Extended Advertising with Service UUIDs. Fast adv interval (20-30 ms) first 30s, then 150 ms. Short connection interval (max 30 ms) during setup. Relax to 50-70 ms during streaming.
Security Security Mode 1 Level 2 (LE). LE Secure Connections (128-bit key). Bondable mode mandatory. Encrypt on every reconnection. Privacy (RPA) recommended.

BAP Tutorial Complete

You’ve now covered the full Basic Audio Profile spec across four parts. The natural next step is the Coordinated Audio Profile (CAP), which builds directly on BAP to coordinate audio across multiple devices — like keeping both earbuds in sync when accepting a call or switching sources.

More BLE Audio Posts Bluetooth Classic Series

Leave a Reply

Your email address will not be published. Required fields are marked *