Bluetooth: Audio: Remove bidirectional audio streams

Audio streams as defined by the BAP spec does not
support bidirectional audio streams. This commit
updates the API and implementation to match that.

The use a bidirectional CIS with 2 audio stream will
be added in a future commit.

This removes the _IN_ and _OUT_ and _INOUT_ QOS
values, as well as the direction of the codec QOS
struct.

To keep direction for internal use, the direction
has been added to the endpoint struct.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
Emil Gydesen 2022-02-02 19:52:01 +01:00 committed by Anas Nashif
commit b880637231
12 changed files with 107 additions and 192 deletions

View file

@ -253,7 +253,6 @@ struct bt_audio_base {
/** @def BT_CODEC_QOS
* @brief Helper to declare elements of bt_codec_qos
*
* @param _dir direction
* @param _interval SDU interval (usec)
* @param _framing Framing
* @param _phy Target PHY
@ -262,10 +261,9 @@ struct bt_audio_base {
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS(_dir, _interval, _framing, _phy, _sdu, _rtn, _latency, \
#define BT_CODEC_QOS(_interval, _framing, _phy, _sdu, _rtn, _latency, \
_pd) \
{ \
.dir = _dir, \
.interval = _interval, \
.framing = _framing, \
.phy = _phy, \
@ -275,13 +273,6 @@ struct bt_audio_base {
.pd = _pd, \
}
/** @brief Audio QoS direction */
enum {
BT_CODEC_QOS_IN,
BT_CODEC_QOS_OUT,
BT_CODEC_QOS_INOUT
};
/** @brief Codec QoS Framing */
enum {
BT_CODEC_QOS_UNFRAMED = 0x00,
@ -295,7 +286,7 @@ enum {
BT_CODEC_QOS_CODED = BIT(2),
};
/** @def BT_CODEC_QOS_IN_UNFRAMED
/** @def BT_CODEC_QOS_UNFRAMED
* @brief Helper to declare Input Unframed bt_codec_qos
*
* @param _interval SDU interval (usec)
@ -304,36 +295,11 @@ enum {
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_IN_UNFRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_IN, _interval, BT_CODEC_QOS_UNFRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
#define BT_CODEC_QOS_UNFRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(_interval, BT_CODEC_QOS_UNFRAMED, BT_CODEC_QOS_2M, _sdu, \
_rtn, _latency, _pd)
/** @def BT_CODEC_QOS_OUT_UNFRAMED
* @brief Helper to declare Output Unframed bt_code *
* @param _interval SDU interval (usec)
* @param _sdu Maximum SDU Size
* @param _rtn Retransmission number
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_OUT_UNFRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, _interval, BT_CODEC_QOS_UNFRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_QOS_INOUT_UNFRAMED
* @brief Helper to declare Input/Output Unframed bt_codec_qos
*
* @param _interval SDU interval (usec)
* @param _sdu Maximum SDU Size
* @param _rtn Retransmission number
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_INOUT_UNFRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_INOUT, _interval, BT_CODEC_QOS_UNFRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_QOS_IN_FRAMED
/** @def BT_CODEC_QOS_FRAMED
* @brief Helper to declare Input Framed bt_codec_qos
*
* @param _interval SDU interval (usec)
@ -342,45 +308,12 @@ enum {
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_IN_FRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_IN, _interval, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_QOS_OUT_FRAMED
* @brief Helper to declare Output Framed bt_codec_qos
*
* @param _interval SDU interval (usec)
* @param _sdu Maximum SDU Size
* @param _rtn Retransmission number
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_OUT_FRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, _interval, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_QOS_INOUT_FRAMED
* @brief Helper to declare Output Framed bt_codec_qos
*
* @param _interval SDU interval (usec)
* @param _sdu Maximum SDU Size
* @param _rtn Retransmission number
* @param _latency Maximum Transport Latency (msec)
* @param _pd Presentation Delay (usec)
*/
#define BT_CODEC_QOS_INOUT_FRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(BT_CODEC_QOS_INOUT, _interval, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
#define BT_CODEC_QOS_FRAMED(_interval, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(_interval, BT_CODEC_QOS_FRAMED, BT_CODEC_QOS_2M, _sdu, \
_rtn, _latency, _pd)
/** @brief Codec QoS structure. */
struct bt_codec_qos {
/** QoS direction
*
* This shall be set to BT_CODEC_QOS_OUT for broadcast sources, and
* shall be set to BT_CODEC_QOS_IN for broadcast sinks.
*/
uint8_t dir;
/** QoS PHY */
uint8_t phy;
@ -485,402 +418,402 @@ struct bt_audio_lc3_preset {
#define BT_AUDIO_LC3_UNICAST_PRESET_8_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(26u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(26u, 2u, 8u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_8_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(30u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(30u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_16_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(30u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(30u, 2u, 8u, 40000u) \
)
/** Mandatory to support as both unicast client and server */
#define BT_AUDIO_LC3_UNICAST_PRESET_16_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(40u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(40u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_24_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(45u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(45u, 2u, 8u, 40000u) \
)
/** Mandatory to support as unicast server */
#define BT_AUDIO_LC3_UNICAST_PRESET_24_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(60u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(60u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_32_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(60u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(60u, 2u, 8u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_32_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(80u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(80u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_441_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_1, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 97u, 5u, 24u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_441_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_2, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 130u, 5u, 31u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_1, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(75u, 5u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(75u, 5u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_2, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(100u, 5u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(100u, 5u, 20u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_3_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_3, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(90u, 5u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(90u, 5u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_4_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_4, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(120u, 5u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(120u, 5u, 20u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_5_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_5, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(117u, 5u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(117u, 5u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_6_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_6, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(155u, 5u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(155u, 5u, 20u, 40000u) \
)
/* Following presets are for unicast high reliability audio data */
#define BT_AUDIO_LC3_UNICAST_PRESET_8_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(26u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(26u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_8_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(30u, 13u, 95u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(30u, 13u, 95u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_16_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(30u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(30u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_16_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(40u, 13u, 95u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(40u, 13u, 95u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_24_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(45u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(45u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_24_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(60u, 13u, 95u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(60u, 13u, 95u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_32_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(60u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(60u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_32_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(80u, 13u, 95u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(80u, 13u, 95u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_441_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_1, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 97u, 13u, 80u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_441_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_2, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 130u, 13u, 85u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_1, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(75u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(75u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_2, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(100u, 13u, 95u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(100u, 13u, 95u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_3_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_3, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(90u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(90u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_4_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_4, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(120u, 13u, 100u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(120u, 13u, 100u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_5_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_5, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(117u, 13u, 75u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(117u, 13u, 75u, 40000u) \
)
#define BT_AUDIO_LC3_UNICAST_PRESET_48_6_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_6, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(155u, 13u, 100u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(155u, 13u, 100u, 40000u) \
)
/* LC3 Broadcast presets defined by table 6.4 in the BAP v1.0 specification */
#define BT_AUDIO_LC3_BROADCAST_PRESET_8_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(26u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(26u, 2u, 8u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_8_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(30u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(30u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_16_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(30u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(30u, 2u, 8u, 40000u) \
)
/** Mandatory to support as both broadcast source and sink */
#define BT_AUDIO_LC3_BROADCAST_PRESET_16_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(40u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(40u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_24_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(45u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(45u, 2u, 8u, 40000u) \
)
/** Mandatory to support as broadcast sink */
#define BT_AUDIO_LC3_BROADCAST_PRESET_24_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(60u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(60u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_32_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(60u, 2u, 8u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(60u, 2u, 8u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_32_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(80u, 2u, 10u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(80u, 2u, 10u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_441_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_1, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 97u, 4u, 24u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_441_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_2, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 130u, 4u, 31u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_1_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_1, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(75u, 4u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(75u, 4u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_2_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_2, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(100u, 4u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(100u, 4u, 20u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_3_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_3, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(90u, 4u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(90u, 4u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_4_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_4, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(120u, 4u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(120u, 4u, 20u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_5_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_5, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(117u, 4u, 15u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(117u, 4u, 15u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_6_1 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_6, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(155u, 4u, 20u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(155u, 4u, 20u, 40000u) \
)
/* Following presets are for broadcast high reliability audio data */
#define BT_AUDIO_LC3_BROADCAST_PRESET_8_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(26u, 4u, 45u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(26u, 4u, 45u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_8_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_8_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(30u, 4u, 60u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(30u, 4u, 60u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_16_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(30u, 4u, 45u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(30u, 4u, 45u, 40000u) \
)
/** Mandatory to support as both broadcast source and sink */
#define BT_AUDIO_LC3_BROADCAST_PRESET_16_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_16_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(40u, 4u, 60u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(40u, 4u, 60u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_24_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(45u, 4u, 45u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(45u, 4u, 45u, 40000u) \
)
/** Mandatory to support as broadcast sink */
#define BT_AUDIO_LC3_BROADCAST_PRESET_24_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_24_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(60u, 4u, 60u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(60u, 4u, 60u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_32_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_1, \
BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(60u, 4u, 45u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(60u, 4u, 45u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_32_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_32_2, \
BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(80u, 4u, 60u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(80u, 4u, 60u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_441_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_1, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(8163u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 97u, 4u, 54u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_441_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_441_2, \
BT_CODEC_QOS(BT_CODEC_QOS_OUT, 10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS(10884u, BT_CODEC_QOS_FRAMED, \
BT_CODEC_QOS_2M, 130u, 4u, 60u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_1_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_1, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(75u, 4u, 50u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(75u, 4u, 50u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_2_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_2, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(100u, 4u, 65u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(100u, 4u, 65u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_3_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_3, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(90u, 4u, 50u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(90u, 4u, 50u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_4_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_4, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(120u, 4u, 65u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(120u, 4u, 65u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_5_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_5, \
BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(117u, 4u, 50u, 40000u) \
BT_CODEC_LC3_QOS_7_5_UNFRAMED(117u, 4u, 50u, 40000u) \
)
#define BT_AUDIO_LC3_BROADCAST_PRESET_48_6_2 \
BT_AUDIO_LC3_PRESET( \
BT_CODEC_LC3_CONFIG_48_6, \
BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(155u, 4u, 65u, 40000u) \
BT_CODEC_LC3_QOS_10_UNFRAMED(155u, 4u, 65u, 40000u) \
)
/** @brief Audio stream structure.

View file

@ -372,45 +372,25 @@ struct bt_codec_lc3_frame_len {
/** @def BT_CODEC_LC3_QOS_7_5
* @brief Helper to declare LC3 codec QoS for 7.5ms interval
*/
#define BT_CODEC_LC3_QOS_7_5(_dir, _framing, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(_dir, 7500u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
#define BT_CODEC_LC3_QOS_7_5(_framing, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(7500u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
_latency, _pd)
/** @def BT_CODEC_LC3_QOS_7_5_IN_UNFRAMED
/** @def BT_CODEC_LC3_QOS_7_5_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 7.5ms interval unframed input
*/
#define BT_CODEC_LC3_QOS_7_5_IN_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_IN_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 7.5ms interval unframed output
*/
#define BT_CODEC_LC3_QOS_7_5_OUT_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_OUT_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 7.5ms interval unframed in/out
*/
#define BT_CODEC_LC3_QOS_7_5_INOUT_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_INOUT_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
#define BT_CODEC_LC3_QOS_7_5_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_LC3_QOS_10
* @brief Helper to declare LC3 codec QoS for 10ms frame internal
*/
#define BT_CODEC_LC3_QOS_10(_dir, _framing, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(_dir, 10000u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
#define BT_CODEC_LC3_QOS_10(_framing, _sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS(10000u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
_latency, _pd)
/** @def BT_CODEC_LC3_QOS_10_IN_UNFRAMED
/** @def BT_CODEC_LC3_QOS_10_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 10ms interval unframed input
*/
#define BT_CODEC_LC3_QOS_10_IN_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_IN_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_LC3_QOS_10_OUT_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 10ms interval unframed output
*/
#define BT_CODEC_LC3_QOS_10_OUT_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_OUT_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
/** @def BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED
* @brief Helper to declare LC3 codec QoS for 10ms interval unframed in/out
*/
#define BT_CODEC_LC3_QOS_10_INOUT_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_INOUT_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
#define BT_CODEC_LC3_QOS_10_UNFRAMED(_sdu, _rtn, _latency, _pd) \
BT_CODEC_QOS_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
#ifdef __cplusplus
}

View file

@ -93,9 +93,9 @@ static void print_codec(const struct bt_codec *codec)
static void print_qos(struct bt_codec_qos *qos)
{
printk("QoS: dir 0x%02x interval %u framing 0x%02x phy 0x%02x sdu %u "
printk("QoS: interval %u framing 0x%02x phy 0x%02x sdu %u "
"rtn %u latency %u pd %u\n",
qos->dir, qos->interval, qos->framing, qos->phy, qos->sdu,
qos->interval, qos->framing, qos->phy, qos->sdu,
qos->rtn, qos->latency, qos->pd);
}

View file

@ -724,6 +724,7 @@ void ascs_ep_init(struct bt_audio_ep *ep, uint8_t id)
ep->iso.qos = &ep->iso_qos;
ep->iso.qos->rx = &ep->iso_rx;
ep->iso.qos->tx = &ep->iso_tx;
ep->dir = ASE_DIR(id);
}
static void ase_init(struct bt_ascs_ase *ase, uint8_t id)

View file

@ -771,6 +771,7 @@ static void broadcast_sink_ep_init(struct bt_audio_ep *ep)
ep->iso.qos = &ep->iso_qos;
ep->iso.qos->rx = &ep->iso_rx;
ep->iso.qos->tx = &ep->iso_tx;
ep->dir = BT_AUDIO_SINK;
}
static struct bt_audio_ep *broadcast_sink_new_ep(uint8_t index)
@ -823,9 +824,8 @@ static int bt_audio_broadcast_sink_setup_stream(uint8_t index,
*/
stream->iso->qos->rx = &sink_chan_io_qos;
stream->iso->qos->tx = NULL;
codec_qos.dir = BT_CODEC_QOS_IN;
stream->qos = &codec_qos;
err = bt_audio_codec_qos_to_iso_qos(stream->iso->qos, &codec_qos);
err = bt_audio_codec_qos_to_iso_qos(stream, &codec_qos);
if (err) {
BT_ERR("Unable to convert codec QoS to ISO QoS");
return err;

View file

@ -172,6 +172,7 @@ static void broadcast_source_ep_init(struct bt_audio_ep *ep)
ep->iso.qos = &ep->iso_qos;
ep->iso.qos->rx = &ep->iso_rx;
ep->iso.qos->tx = &ep->iso_tx;
ep->dir = BT_AUDIO_SOURCE;
}
static struct bt_audio_ep *broadcast_source_new_ep(uint8_t index)
@ -219,7 +220,7 @@ static int bt_audio_broadcast_source_setup_stream(uint8_t index,
bt_audio_stream_attach(NULL, stream, ep, codec);
stream->qos = qos;
err = bt_audio_codec_qos_to_iso_qos(stream->iso->qos, qos);
err = bt_audio_codec_qos_to_iso_qos(stream, qos);
if (err) {
BT_ERR("Unable to convert codec QoS to ISO QoS");
return err;

View file

@ -33,6 +33,7 @@ struct bt_audio_broadcast_sink;
struct bt_audio_ep {
uint8_t type;
uint8_t dir;
uint16_t handle;
uint16_t cp_handle;
uint8_t cig_id;

View file

@ -126,21 +126,19 @@ done:
return -ENOSPC;
}
int bt_audio_codec_qos_to_iso_qos(struct bt_iso_chan_qos *qos,
struct bt_codec_qos *codec)
int bt_audio_codec_qos_to_iso_qos(struct bt_audio_stream *stream,
const struct bt_codec_qos *codec)
{
struct bt_iso_chan_qos *qos = stream->iso->qos;
struct bt_iso_chan_io_qos *io;
switch (codec->dir) {
case BT_CODEC_QOS_IN:
switch (stream->ep->dir) {
case BT_AUDIO_SINK:
io = qos->rx;
break;
case BT_CODEC_QOS_OUT:
case BT_AUDIO_SOURCE:
io = qos->tx;
break;
case BT_CODEC_QOS_INOUT:
io = qos->rx = qos->tx;
break;
default:
return -EINVAL;
}
@ -546,7 +544,7 @@ int bt_audio_stream_qos(struct bt_conn *conn,
return -EINVAL;
}
err = bt_audio_codec_qos_to_iso_qos(stream->iso->qos, qos);
err = bt_audio_codec_qos_to_iso_qos(stream, qos);
if (err) {
BT_DBG("Unable to convert codec QoS to ISO QoS: %d",
err);

View file

@ -45,8 +45,8 @@ void bt_audio_stream_attach(struct bt_conn *conn, struct bt_audio_stream *stream
struct bt_audio_ep *ep,
struct bt_codec *codec);
int bt_audio_codec_qos_to_iso_qos(struct bt_iso_chan_qos *qos,
struct bt_codec_qos *codec);
int bt_audio_codec_qos_to_iso_qos(struct bt_audio_stream *stream,
const struct bt_codec_qos *codec);
void bt_audio_stream_detach(struct bt_audio_stream *stream);

View file

@ -130,7 +130,7 @@ static struct bt_iso_chan_ops unicast_client_iso_ops = {
};
static void unicast_client_ep_init(struct bt_audio_ep *ep, uint8_t type,
uint16_t handle, uint8_t id)
uint16_t handle, uint8_t id, uint8_t dir)
{
BT_DBG("ep %p type 0x%02x handle 0x%04x id 0x%02x", ep, type, handle,
id);
@ -143,6 +143,7 @@ static void unicast_client_ep_init(struct bt_audio_ep *ep, uint8_t type,
ep->iso.qos = &ep->iso_qos;
ep->iso.qos->rx = &ep->iso_rx;
ep->iso.qos->tx = &ep->iso_tx;
ep->dir = dir;
}
static struct bt_audio_ep *unicast_client_ep_find(struct bt_conn *conn,
@ -201,7 +202,7 @@ static struct bt_audio_ep *unicast_client_ep_new(struct bt_conn *conn,
if (!ep->handle) {
unicast_client_ep_init(ep, BT_AUDIO_EP_REMOTE, handle,
0x00);
0x00, dir);
return ep;
}
}

View file

@ -239,9 +239,9 @@ static void set_stream(struct bt_audio_stream *stream)
#if defined(CONFIG_BT_AUDIO_UNICAST)
static void print_qos(struct bt_codec_qos *qos)
{
shell_print(ctx_shell, "QoS: dir 0x%02x interval %u framing 0x%02x "
shell_print(ctx_shell, "QoS: interval %u framing 0x%02x "
"phy 0x%02x sdu %u rtn %u latency %u pd %u",
qos->dir, qos->interval, qos->framing, qos->phy, qos->sdu,
qos->interval, qos->framing, qos->phy, qos->sdu,
qos->rtn, qos->latency, qos->pd);
}

View file

@ -42,8 +42,8 @@ void print_codec(const struct bt_codec *codec)
void print_qos(const struct bt_codec_qos *qos)
{
printk("QoS: dir 0x%02x interval %u framing 0x%02x phy 0x%02x sdu %u "
printk("QoS: interval %u framing 0x%02x phy 0x%02x sdu %u "
"rtn %u latency %u pd %u\n",
qos->dir, qos->interval, qos->framing, qos->phy, qos->sdu,
qos->interval, qos->framing, qos->phy, qos->sdu,
qos->rtn, qos->latency, qos->pd);
}