zephyr/doc/connectivity/bluetooth/api/shell/bap.rst
Emil Gydesen 5b888c361d Bluetooth: BAP: Shell: Remove use of broadcast sink scan API
The broadcast sink scan API is no longer used by the BAP
shell, which handles everything related to PA sync and scan
itself now.

It has also been made easier to sync to a broadcast
source by simply using create_broadcast_sink.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2023-08-14 13:34:26 +00:00

492 lines
14 KiB
ReStructuredText

.. _bluetooth_shell_audio:
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
********
.. code-block:: console
bap --help
Subcommands:
init
select_broadcast :<stream>
create_broadcast :[preset <preset_name>] [enc <broadcast_code>]
start_broadcast :
stop_broadcast :
delete_broadcast :
broadcast_scan :<on, off>
create_broadcast_sink :0x<broadcast_id>
sync_broadcast :0x<bis_index> [[[0x<bis_index>] 0x<bis_index>] ...]
stop_broadcast_sink :Stops broadcast sink
term_broadcast_sink :
discover :[dir: sink, source]
config :<direction: sink, source> <index> [loc <loc_bits>] [preset <preset_name>]
stream_qos :interval [framing] [latency] [pd] [sdu] [phy] [rtn]
qos :Send QoS configure for Unicast Group
enable :[context]
stop
print_ase_info :Print ASE info for default connection
metadata :[context]
start
disable
release
list
select_unicast :<stream>
preset :<sink, source, broadcast> [preset]
send :Send to Audio Stream [data]
start_sine :Start sending a LC3 encoded sine wave
stop_sine :Stop sending a LC3 encoded sine wave
set_location :<direction: sink, source> <location bitmask>
set_context :<direction: sink, source><context bitmask> <type:
supported, available>
.. csv-table:: State Machine Transitions
:header: "Command", "Depends", "Allowed States", "Next States"
:widths: auto
"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:
.. code-block:: console
uart:~$ bt init
uart:~$ bap init
uart:~$ bt connect <address>
uart:~$ gatt exchange-mtu
uart:~$ bap discover sink
uart:~$ bap config sink 0
uart:~$ bap qos
uart:~$ bap enable
Or using connect command:
.. code-block:: console
uart:~$ bt init
uart:~$ bap init
uart:~$ bt connect <address>
uart:~$ gatt exchange-mtu
uart:~$ bap discover sink
uart:~$ bap connect sink 0
Disconnect and release:
.. code-block:: console
uart:~$ bap disable
uart:~$ bap release
Example Peripheral
******************
Listen:
.. code-block:: console
uart:~$ bt init
uart:~$ bap init
uart:~$ bt advertise on
Server initiated disable and release:
.. code-block:: console
uart:~$ bap disable
uart:~$ bap release
Example Broadcast Source
************************
Create and establish a broadcast source stream:
.. code-block:: console
uart:~$ bap init
uart:~$ bap create_broadcast
uart:~$ bap start_broadcast
Stop and release a broadcast source stream:
.. code-block:: console
uart:~$ bap stop_broadcast
uart:~$ bap delete_broadcast
Example Broadcast Sink
**********************
Scan for and establish a broadcast sink stream.
The command :code:`bap create_broadcast_sink 0xEF6716` will either use existing periodic advertising
sync (if exist) or start scanning and sync to the periodic advertising before syncing to the BIG.
.. code-block:: console
uart:~$ bap init
uart:~$ bap broadcast_scan on
Found broadcaster with ID 0xEF6716 and addr 3D:A5:F9:35:0B:19 (random) and sid 0x00
uart:~$ bap create_broadcast_sink 0xEF6716
Attempting to PA sync to the broadcaster
PA synced to broadcast with broadcast ID 0xEF6716
Attempting to sync to the BIG
Received BASE from sink 0x20031fac:
Presentation delay: 40000
Subgroup count: 2
Subgroup[0]:
codec cfg id 0x06 cid 0x0000 vid 0x0000
data_count 4
data #0: type 0x01 len 1
00000000: 03 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x03 len 4
00000000: 01 00 00 00 |.... |
data #3: type 0x04 len 2
00000000: 28 00 |(. |
meta_count 4
meta #0: type 0x02 len 2
00000000: 01 00 |.. |
BIS[0] index 0x01
Subgroup[1]:
codec cfg id 0x06 cid 0x0000 vid 0x0000
data_count 4
data #0: type 0x01 len 1
00000000: 03 |. |
data #1: type 0x02 len 1
00000000: 01 |. |
data #2: type 0x03 len 4
00000000: 01 00 00 00 |.... |
data #3: type 0x04 len 2
00000000: 28 00 |(. |
meta_count 4
meta #0: type 0x02 len 2
00000000: 01 00 |.. |
BIS[1] index 0x01
[0]: 0x01
[1]: 0x01
Possible indexes: 0x01 0x01
uart:~$ bap sync_broadcast 0x01
Stop and release a broadcast sink stream:
.. code-block:: console
uart:~$ bap stop_broadcast_sink
uart:~$ bap term_broadcast_sink
Init
****
The :code:`init` command register local PAC records which are necessary to be
able to configure stream and properly manage capabilities in use.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"none","any","none"
.. code-block:: console
uart:~$ bap init
Discover PAC(s) and ASE(s)
**************************
Once connected the :code:`discover` command discover PAC records and ASE
characteristics representing remote endpoints.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"init","any","any"
.. note::
Use command :code:`gatt exchange-mtu` to make sure the MTU is configured
properly.
.. code-block:: console
uart:~$ gatt exchange-mtu
Exchange pending
Exchange successful
uart:~$ bap discover [type: sink, source]
uart:~$ bap 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 :code:`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.
.. code-block:: console
uart:~$ bap preset <sink, source, broadcast> [preset]
uart:~$ bap preset sink
16_2_1
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: 01 00 00 |... |
data #3: type 0x04 len 2
00000000: 28 |( |
meta #0: type 0x02 len 2
00000000: 06 |. |
QoS: interval 10000 framing 0x00 phy 0x02 sdu 40 rtn 2 latency 10 pd 40000
uart:~$ bap preset sink 32_2_1
32_2_1
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: 01 00 00 |... |
data #3: type 0x04 len 2
00000000: 50 |P |
meta #0: type 0x02 len 2
00000000: 06 |. |
QoS: interval 10000 framing 0x00 phy 0x02 sdu 80 rtn 2 latency 10 pd 40000
Configure Codec
***************
The :code:`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.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"discover","idle/codec-configured/qos-configured","codec-configured"
.. code-block:: console
uart:~$ bap config <direction: sink, source> <index> [loc <loc_bits>] [preset <preset_name>]
uart:~$ bap 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 Stream QoS
********************
The :code:`stream_qos` Sets a new stream QoS.
.. code-block:: console
uart:~$ bap stream_qos <interval> [framing] [latency] [pd] [sdu] [phy] [rtn]
uart:~$ bap stream_qos 10
Configure QoS
*************
The :code:`qos` command attempts to configure the stream QoS using the preset
configuration, each individual QoS parameter can be set with use optional
parameters.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"config","qos-configured/codec-configured","qos-configured"
.. code-block:: console
uart:~$ bap qos
Enable
******
The :code:`enable` command attempts to enable the stream previously configured,
if the remote peer accepts then the ISO connection procedure is also initiated.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"qos","qos-configured","enabling"
.. code-block:: console
uart:~$ bap enable [context]
uart:~$ bap enable Media
Start
*****
The :code:`start` command is only necessary when acting as a sink as it
indicates to the source the stack is ready to start receiving data.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"enable","enabling","streaming"
.. code-block:: console
uart:~$ bap start
Disable
*******
The :code:`disable` command attempts to disable the stream previously enabled,
if the remote peer accepts then the ISO disconnection procedure is also
initiated.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"enable","enabling/streaming","disabling"
.. code-block:: console
uart:~$ bap disable
Stop
****
The :code:`stop` command is only necessary when acting as a sink as it indicates
to the source the stack is ready to stop receiving data.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"disable","disabling","qos-configure/idle"
.. code-block:: console
uart:~$ bap stop
Release
*******
The :code:`release` command releases the current stream and its configuration.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"config","any","releasing/codec-configure/idle"
.. code-block:: console
uart:~$ bap release
List
****
The :code:`list` command list the available streams.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"none","any","none"
.. code-block:: console
uart:~$ bap list
*0: ase 0x01 dir 0x01 state 0x01
Select Unicast
**************
The :code:`select_unicast` command set a unicast stream as default.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"none","any","none"
.. code-block:: console
uart:~$ bap select <ase>
uart:~$ bap select 0x01
Default stream: 1
To select a broadcast stream:
.. code-block:: console
uart:~$ bap select 0x01 broadcast
Default stream: 1 (broadcast)
Send
****
The :code:`send` command sends data over BAP Stream.
.. csv-table:: State Machine Transitions
:header: "Depends", "Allowed States", "Next States"
:widths: auto
"enable","streaming","none"
.. code-block:: console
uart:~$ bap send [count]
uart:~$ bap send
Audio sending...