Bluetooth: Basic Audio Profile
This document describes how to run basic audio profile functionality which includes:
Capabilities and Endpoint discovery
Audio Stream Endpoint procedures
Commands
audio --help
Subcommands:
init
select_broadcast :<stream>
create_broadcast :[codec] [preset]
start_broadcast :
stop_broadcast :
delete_broadcast :
broadcast_scan :<on, off>
accept_broadcast :0x<broadcast_id>
sync_broadcast :0x<bis_bitfield>
stop_broadcast_sink :Stops broadcast sink
term_broadcast_sink :
discover :[type: sink, source]
preset :[preset]
config :<direction: sink, source> <index> [codec] [preset]
qos :[preset] [interval] [framing] [latency] [pd] [sdu] [phy]
[rtn]
enable
metadata :[context]
start
disable
stop
release
list
connect :<direction: sink, source> <index> [codec] [preset]
select_unicast :<stream>
send :Send to Audio Stream [data]
Command |
Depends |
Allowed States |
Next States |
---|---|---|---|
init |
none |
any |
none |
discover |
init |
any |
any |
config |
discover |
idle/codec-configured/qos-configured |
codec-configured |
qos |
config |
codec-configured/qos-configured |
qos-configured |
enable |
qos |
qos-configured |
enabling |
[start] |
enable |
enabling |
streaming |
disable |
enable |
enabling/streaming |
disabling |
[stop] |
disable |
disabling |
qos-configure/idle |
release |
config |
any |
releasing/codec-configure/idle |
list |
none |
any |
none |
select_unicast |
none |
any |
none |
connect |
discover |
idle/codec-configured/qos-configured |
codec-configured |
send |
enable |
streaming |
none |
Example Central
Connect and establish a stream:
uart:~$ bt init
uart:~$ audio init
uart:~$ bt connect <address>
uart:~$ gatt exchange-mtu
uart:~$ audio discover sink
uart:~$ audio config sink 0
uart:~$ audio qos
uart:~$ audio enable
Or using connect command:
uart:~$ bt init
uart:~$ audio init
uart:~$ bt connect <address>
uart:~$ gatt exchange-mtu
uart:~$ audio discover sink
uart:~$ audio connect sink 0
Disconnect and release:
uart:~$ audio disable
uart:~$ audio release
Example Peripheral
Listen:
uart:~$ bt init
uart:~$ audio init
uart:~$ bt advertise on
Server initiated disable and release:
uart:~$ audio disable
uart:~$ audio release
Example Broadcast Source
Create and establish a broadcast source stream:
uart:~$ audio init
uart:~$ audio create_broadcast
uart:~$ audio start_broadcast
Stop and release a broadcast source stream:
uart:~$ audio stop_broadcast
uart:~$ audio delete_broadcast
Example Broadcast Sink
Scan for and establish a broadcast sink stream:
uart:~$ audio init
uart:~$ audio broadcast_scan on
Found broadcaster with ID 0xB91CD4
uart:~$ audio accept_broadcast 0xB91CD4
PA syncing to broadcaster
Broadcast scan was terminated: 0
PA synced to broadcaster with ID 0xB91CD4 as sink 0x2000d09c
Sink 0x2000d09c is set as default
Sink 0x2000d09c is ready to sync without encryption
Received BASE from sink 0x2000d09c:
Subgroup[0]:
codec 0x06 cid 0x0000 vid 0x0000 count 4
data #0: type 0x01 len 1
data #1: type 0x02 len 1
data #2: type 0x03 len 4
00000000: 00 00 00 |... |
data #3: type 0x04 len 2
00000000: 28 |( |
meta #0: type 0x02 len 2
BIS[0] index 0x01
[0]: 0x01
Possible indexes: 0x01
audio sync_broadcast 0x01
Stop and release a broadcast sink stream:
uart:~$ audio stop_broadcast_sink
uart:~$ audio term_broadcast_sink
Init
The init
command register local PAC records which are necessary to be
able to configure stream and properly manage capabilities in use.
Depends |
Allowed States |
Next States |
---|---|---|
none |
any |
none |
uart:~$ audio init
Discover PAC(s) and ASE(s)
Once connected the discover
command discover PAC records and ASE
characteristics representing remote endpoints.
Depends |
Allowed States |
Next States |
---|---|---|
init |
any |
any |
Note
Use command gatt exchange-mtu
to make sure the MTU is configured
properly.
uart:~$ gatt exchange-mtu
Exchange pending
Exchange successful
uart:~$ audio discover [type: sink, source]
uart:~$ audio discover sink
cap 0x8175940 type 0x01
codec 0x06 cid 0x0000 vid 0x0000 count 4
data #0: type 0x01 len 1
00000000: 3f |? |
data #1: type 0x02 len 1
00000000: 03 |. |
data #2: type 0x03 len 1
00000000: 03 |. |
data #3: type 0x04 len 4
00000000: 1e 00 f0 00 |.... |
meta #0: type 0x01 len 2
00000000: 06 00 |.. |
meta #1: type 0x02 len 2
00000000: ff 03 |.. |
ep 0x81754e0
ep 0x81755d4
Discover complete: err 0
Select preset
The preset
command can be used to either print the default preset
configuration or set a different one, it is worth noting that it doesn’t change
any stream previously configured.
uart:~$ audio preset [preset]
uart:~$ audio preset
16_2_1
codec 0x06 cid 0x0000 vid 0x0000 count 3
data #0: type 0x01 len 1
00000000: 02 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x04 len 2
00000000: 28 00 |(. |
meta #0: type 0x02 len 2
00000000: 02 00 |.. |
QoS: dir 0x02 interval 10000 framing 0x00 phy 0x02 sdu 40 rtn 2 latency 10 pd 40000
Configure Codec
The config
command attempts to configure a stream for the given
direction using a preset codec configuration which can either be passed directly
or in case it is omitted the default preset is used.
Depends |
Allowed States |
Next States |
---|---|---|
discover |
idle/codec-configured/qos-configured |
codec-configured |
uart:~$ audio config <direction: sink, source> <index> [codec] [preset]
uart:~$ audio config sink 0
ASE Codec Config: conn 0x8173800 ep 0x81754e0 cap 0x816a360
codec 0x06 cid 0x0000 vid 0x0000 count 3
data #0: type 0x01 len 1
00000000: 02 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x04 len 2
00000000: 28 00 |(. |
meta #0: type 0x02 len 2
00000000: 02 00 |.. |
ASE Codec Config stream 0x8179e60
Default ase: 1
ASE config: preset 16_2_1
Configure QoS
The qos
command attempts to configure the stream QoS using the preset
configuration, each individual QoS parameter can be set with use optional
parameters.
Depends |
Allowed States |
Next States |
---|---|---|
config |
qos-configured/codec-configured |
qos-configured |
uart:~$ audio qos [preset] [interval] [framing] [latency] [pd] [sdu] [phy] [rtn]
uart:~$ audio qos
ASE config: preset 16_2_1
Enable
The enable
command attempts to enable the stream previously configured,
if the remote peer accepts then the ISO connection procedure is also initiated.
Depends |
Allowed States |
Next States |
---|---|---|
qos |
qos-configured |
enabling |
uart:~$ audio enable
Start [sink only]
The start
command is only necessary when acting as a sink as it
indicates to the source the stack is ready to start receiving data.
Depends |
Allowed States |
Next States |
---|---|---|
enable |
enabling |
streaming |
uart:~$ audio start
Disable
The disable
command attempts to disable the stream previously enabled,
if the remote peer accepts then the ISO disconnection procedure is also
initiated.
Depends |
Allowed States |
Next States |
---|---|---|
enable |
enabling/streaming |
disabling |
uart:~$ audio disable
Stop [sink only]
The stop
command is only necessary when acting as a sink as it indicates
to the source the stack is ready to stop receiving data.
Depends |
Allowed States |
Next States |
---|---|---|
disable |
disabling |
qos-configure/idle |
uart:~$ audio stop
Release
The release
command releases the current stream and its configuration.
Depends |
Allowed States |
Next States |
---|---|---|
config |
any |
releasing/codec-configure/idle |
uart:~$ audio release
List
The list
command list the available streams.
Depends |
Allowed States |
Next States |
---|---|---|
none |
any |
none |
uart:~$ audio list
*0: ase 0x01 dir 0x01 state 0x01
Select Unicast
The select_unicast
command set a unicast stream as default.
Depends |
Allowed States |
Next States |
---|---|---|
none |
any |
none |
uart:~$ audio select <ase>
uart:~$ audio select 0x01
Default stream: 1
To select a broadcast stream:
uart:~$ audio select 0x01 broadcast
Default stream: 1 (broadcast)
Connect
The connect
command combines config, qos and enable commands in one so
it can be used to quickly configure and enable a stream.
Depends |
Allowed States |
Next States |
---|---|---|
discover |
idle/codec-configured/qos-configured |
streaming |
uart:~$ audio connect <direction: sink, source> <index> [codec] [preset]
uart:~$ audio connect sink 0
ASE Codec Config: conn 0x17ca40 ep 0x17f860 cap 0x19f6a0
codec 0x06 cid 0x0000 vid 0x0000 count 3
data #0: type 0x01 len 1
00000000: 02 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x04 len 2
00000000: 28 00 |(. |
meta #0: type 0x02 len 2
00000000: 02 00 |.. |
ASE Codec Config stream 0x1851c0
Default ase: 1
ASE config: preset 16_2_1
ASE Codec Reconfig: stream 0x1851c0 cap 0x19f6a0
codec 0x06 cid 0x0000 vid 0x0000 count 3
data #0: type 0x01 len 1
00000000: 02 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x04 len 2
00000000: 28 00 |(. |
meta #0: type 0x02 len 2
00000000: 02 00 |.. |
QoS: stream 0x1851c0
QoS: dir 0x02 interval 10000 framing 0x00 phy 0x02 sdu 40 rtn 2 latency 10 pd 40000
Start: stream 0x1851c0
Send
The send
command sends data over Audio Stream.
Depends |
Allowed States |
Next States |
---|---|---|
enable |
streaming |
none |
uart:~$ audio send [count]
uart:~$ audio send
Audio sending...