2024-03-13 19:45:58

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 1/6] client/player: Split unicast and broadcast presets

From: Luiz Augusto von Dentz <[email protected]>

Although their name matches unicast and broadcast are not actually the
same when it comes to RTN and Max Latency, so this splits their settings
into 2 presets tables and fix the values for broadcast.
---
client/player.c | 115 +++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 110 insertions(+), 5 deletions(-)

diff --git a/client/player.c b/client/player.c
index a40bf66e3967..cb771447bf4b 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1403,7 +1403,7 @@ static struct codec_preset sbc_presets[] = {
.target_latency = 0x03, \
}

-static struct codec_preset lc3_presets[] = {
+static struct codec_preset lc3_ucast_presets[] = {
/* Table 4.43: QoS configuration support setting requirements */
LC3_PRESET("8_1_1",
LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
@@ -1565,6 +1565,111 @@ static struct codec_preset lc3_presets[] = {
LC3_10_UNFRAMED(2 * 120u, 1u, 20u, 10000u)),
};

+static struct codec_preset lc3_bcast_presets[] = {
+ /* Table 6.4: Broadcast Audio Stream configuration support requirements
+ * for the Broadcast Source and Broadcast Sink
+ */
+ LC3_PRESET("8_1_1",
+ LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_7_5_UNFRAMED(26u, 2u, 8u, 40000u)),
+ LC3_PRESET("8_2_1",
+ LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_10_UNFRAMED(30u, 2u, 10u, 40000u)),
+ LC3_PRESET("16_1_1",
+ LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_7_5_UNFRAMED(30u, 2u, 8u, 40000u)),
+ LC3_PRESET("16_2_1",
+ LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_10_UNFRAMED(40u, 2u, 10u, 40000u)),
+ LC3_PRESET("24_1_1",
+ LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_7_5_UNFRAMED(45u, 2u, 8u, 40000u)),
+ LC3_PRESET("24_2_1",
+ LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_10_UNFRAMED(60u, 2u, 10u, 40000u)),
+ LC3_PRESET("32_1_1",
+ LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_7_5_UNFRAMED(60u, 2u, 8u, 40000u)),
+ LC3_PRESET("32_2_1",
+ LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_10_UNFRAMED(80u, 2u, 10u, 40000u)),
+ LC3_PRESET("44_1_1",
+ LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ QOS_FRAMED_2M(8163u, 98u, 4u, 24u, 40000u)),
+ LC3_PRESET("44_2_1",
+ LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ QOS_FRAMED_2M(10884u, 130u, 4u, 31u, 40000u)),
+ LC3_PRESET("48_1_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_7_5_UNFRAMED(75u, 4u, 15u, 40000u)),
+ LC3_PRESET("48_2_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_10_UNFRAMED(100u, 4u, 20u, 40000u)),
+ LC3_PRESET("48_3_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_7_5_UNFRAMED(90u, 4u, 15u, 40000u)),
+ LC3_PRESET("48_4_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_10_UNFRAMED(120u, 4u, 20u, 40000u)),
+ LC3_PRESET("48_5_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_7_5_UNFRAMED(117u, 4u, 15u, 40000u)),
+ LC3_PRESET("48_6_1",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_10_UNFRAMED(155u, 4u, 20u, 40000u)),
+ /* Broadcast Audio Stream configuration settings for high-reliability
+ * audio data.
+ */
+ LC3_PRESET_HR("8_1_2",
+ LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_7_5_UNFRAMED(26u, 4u, 45u, 40000u)),
+ LC3_PRESET_HR("8_2_2",
+ LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_10_UNFRAMED(30u, 4u, 60u, 40000u)),
+ LC3_PRESET_HR("16_1_2",
+ LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_7_5_UNFRAMED(30u, 4u, 45u, 40000u)),
+ LC3_PRESET_HR("16_2_2",
+ LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_10_UNFRAMED(40u, 4u, 60u, 40000u)),
+ LC3_PRESET_HR("24_1_2",
+ LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_7_5_UNFRAMED(45u, 4u, 45u, 40000u)),
+ LC3_PRESET_HR("24_2_2",
+ LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_10_UNFRAMED(60u, 4u, 60u, 40000u)),
+ LC3_PRESET_HR("32_1_2",
+ LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_7_5_UNFRAMED(60u, 4u, 45u, 40000u)),
+ LC3_PRESET_HR("32_2_2",
+ LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_10_UNFRAMED(80u, 4u, 60u, 40000u)),
+ LC3_PRESET_HR("44_1_2",
+ LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ QOS_FRAMED_2M(8163u, 4u, 13u, 54u, 40000u)),
+ LC3_PRESET_HR("44_2_2",
+ LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ QOS_FRAMED_2M(10884u, 130u, 4u, 60u, 40000u)),
+ LC3_PRESET_HR("48_1_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_7_5_UNFRAMED(75u, 4u, 50u, 40000u)),
+ LC3_PRESET_HR("48_2_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_10_UNFRAMED(100u, 4u, 65u, 40000u)),
+ LC3_PRESET_HR("48_3_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_7_5_UNFRAMED(90u, 4u, 50u, 40000u)),
+ LC3_PRESET_HR("48_4_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_10_UNFRAMED(120u, 4u, 65u, 40000u)),
+ LC3_PRESET_HR("48_5_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_7_5_UNFRAMED(117u, 4u, 50u, 40000u)),
+ LC3_PRESET_HR("48_6_2",
+ LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_10_UNFRAMED(155u, 4u, 65u, 40000u)),
+};
+
static void print_ltv(const char *str, void *user_data)
{
const char *label = user_data;
@@ -1615,10 +1720,10 @@ static struct preset {
} presets[] = {
PRESET(A2DP_SOURCE_UUID, A2DP_CODEC_SBC, sbc_presets, 6),
PRESET(A2DP_SINK_UUID, A2DP_CODEC_SBC, sbc_presets, 6),
- PRESET(PAC_SINK_UUID, LC3_ID, lc3_presets, 3),
- PRESET(PAC_SOURCE_UUID, LC3_ID, lc3_presets, 3),
- PRESET(BCAA_SERVICE_UUID, LC3_ID, lc3_presets, 3),
- PRESET(BAA_SERVICE_UUID, LC3_ID, lc3_presets, 3),
+ PRESET(PAC_SINK_UUID, LC3_ID, lc3_ucast_presets, 3),
+ PRESET(PAC_SOURCE_UUID, LC3_ID, lc3_ucast_presets, 3),
+ PRESET(BCAA_SERVICE_UUID, LC3_ID, lc3_bcast_presets, 3),
+ PRESET(BAA_SERVICE_UUID, LC3_ID, lc3_bcast_presets, 3),
};

static void parse_vendor_codec(const char *codec, uint16_t *vid, uint16_t *cid)
--
2.43.0



2024-03-13 19:46:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 3/6] shared/lc3: Add definition for broadcast configurations

From: Luiz Augusto von Dentz <[email protected]>

This adds defines for broadcast settings as they don't really match
unicast when it comes to RTN and Latency.
---
src/shared/bap-defs.h | 97 ++++++++++
src/shared/bap.h | 84 +-------
src/shared/lc3.h | 434 ++++++++++++++++++++++++++++++++++++++----
3 files changed, 500 insertions(+), 115 deletions(-)
create mode 100644 src/shared/bap-defs.h

diff --git a/src/shared/bap-defs.h b/src/shared/bap-defs.h
new file mode 100644
index 000000000000..2467e816ffa9
--- /dev/null
+++ b/src/shared/bap-defs.h
@@ -0,0 +1,97 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2022 Intel Corporation. All rights reserved.
+ * Copyright 2023-2024 NXP
+ *
+ */
+
+#ifndef SRC_SHARED_BAP_DEFS_H_
+#define SRC_SHARED_BAP_DEFS_H_
+
+#ifndef __packed
+#define __packed __attribute__((packed))
+#endif
+
+#define BT_BAP_SINK 0x01
+#define BT_BAP_SOURCE 0x02
+#define BT_BAP_BCAST_SOURCE 0x03
+#define BT_BAP_BCAST_SINK 0x04
+
+#define BT_BAP_STREAM_TYPE_UCAST 0x01
+#define BT_BAP_STREAM_TYPE_BCAST 0x02
+
+#define BT_BAP_STREAM_STATE_IDLE 0x00
+#define BT_BAP_STREAM_STATE_CONFIG 0x01
+#define BT_BAP_STREAM_STATE_QOS 0x02
+#define BT_BAP_STREAM_STATE_ENABLING 0x03
+#define BT_BAP_STREAM_STATE_STREAMING 0x04
+#define BT_BAP_STREAM_STATE_DISABLING 0x05
+#define BT_BAP_STREAM_STATE_RELEASING 0x06
+
+#define BT_BAP_CONFIG_LATENCY_LOW 0x01
+#define BT_BAP_CONFIG_LATENCY_BALANCED 0x02
+#define BT_BAP_CONFIG_LATENCY_HIGH 0x03
+
+#define BT_BAP_CONFIG_PHY_1M 0x01
+#define BT_BAP_CONFIG_PHY_2M 0x02
+#define BT_BAP_CONFIG_PHY_CODEC 0x03
+
+struct bt_bap_codec {
+ uint8_t id;
+ uint16_t cid;
+ uint16_t vid;
+} __packed;
+
+struct bt_ltv {
+ uint8_t len;
+ uint8_t type;
+ uint8_t value[];
+} __packed;
+
+struct bt_bap_io_qos {
+ uint32_t interval; /* Frame interval */
+ uint16_t latency; /* Transport Latency */
+ uint16_t sdu; /* Maximum SDU Size */
+ uint8_t phy; /* PHY */
+ uint8_t rtn; /* Retransmission Effort */
+};
+
+struct bt_bap_ucast_qos {
+ uint8_t cig_id;
+ uint8_t cis_id;
+ uint8_t framing; /* Frame framing */
+ uint32_t delay; /* Presentation Delay */
+ uint8_t target_latency; /* Target Latency */
+ struct bt_bap_io_qos io_qos;
+};
+
+struct bt_bap_bcast_qos {
+ uint8_t big;
+ uint8_t bis;
+ uint8_t sync_factor;
+ uint8_t packing;
+ uint8_t framing;
+ uint8_t encryption;
+ struct iovec *bcode;
+ uint8_t options;
+ uint16_t skip;
+ uint16_t sync_timeout;
+ uint8_t sync_cte_type;
+ uint8_t mse;
+ uint16_t timeout;
+ uint8_t pa_sync;
+ struct bt_bap_io_qos io_qos;
+ uint32_t delay; /* Presentation Delay */
+};
+
+struct bt_bap_qos {
+ union {
+ struct bt_bap_ucast_qos ucast;
+ struct bt_bap_bcast_qos bcast;
+ };
+};
+
+#endif /* SRC_SHARED_BAP_DEFS_H_ */
diff --git a/src/shared/bap.h b/src/shared/bap.h
index b2826719f84f..9839e324905a 100644
--- a/src/shared/bap.h
+++ b/src/shared/bap.h
@@ -10,94 +10,12 @@

#include <stdbool.h>
#include <inttypes.h>
-
-#ifndef __packed
-#define __packed __attribute__((packed))
-#endif
-
-#define BT_BAP_SINK 0x01
-#define BT_BAP_SOURCE 0x02
-#define BT_BAP_BCAST_SOURCE 0x03
-#define BT_BAP_BCAST_SINK 0x04
-
-#define BT_BAP_STREAM_TYPE_UCAST 0x01
-#define BT_BAP_STREAM_TYPE_BCAST 0x02
-
-#define BT_BAP_STREAM_STATE_IDLE 0x00
-#define BT_BAP_STREAM_STATE_CONFIG 0x01
-#define BT_BAP_STREAM_STATE_QOS 0x02
-#define BT_BAP_STREAM_STATE_ENABLING 0x03
-#define BT_BAP_STREAM_STATE_STREAMING 0x04
-#define BT_BAP_STREAM_STATE_DISABLING 0x05
-#define BT_BAP_STREAM_STATE_RELEASING 0x06
-
-#define BT_BAP_CONFIG_LATENCY_LOW 0x01
-#define BT_BAP_CONFIG_LATENCY_BALANCED 0x02
-#define BT_BAP_CONFIG_LATENCY_HIGH 0x03
-
-#define BT_BAP_CONFIG_PHY_1M 0x01
-#define BT_BAP_CONFIG_PHY_2M 0x02
-#define BT_BAP_CONFIG_PHY_CODEC 0x03
+#include "src/shared/bap-defs.h"

struct bt_bap;
struct bt_bap_pac;
struct bt_bap_stream;

-struct bt_bap_codec {
- uint8_t id;
- uint16_t cid;
- uint16_t vid;
-} __packed;
-
-struct bt_ltv {
- uint8_t len;
- uint8_t type;
- uint8_t value[0];
-} __packed;
-
-struct bt_bap_io_qos {
- uint32_t interval; /* Frame interval */
- uint16_t latency; /* Transport Latency */
- uint16_t sdu; /* Maximum SDU Size */
- uint8_t phy; /* PHY */
- uint8_t rtn; /* Retransmission Effort */
-};
-
-struct bt_bap_ucast_qos {
- uint8_t cig_id;
- uint8_t cis_id;
- uint8_t framing; /* Frame framing */
- uint32_t delay; /* Presentation Delay */
- uint8_t target_latency; /* Target Latency */
- struct bt_bap_io_qos io_qos;
-};
-
-struct bt_bap_bcast_qos {
- uint8_t big;
- uint8_t bis;
- uint8_t sync_factor;
- uint8_t packing;
- uint8_t framing;
- uint8_t encryption;
- struct iovec *bcode;
- uint8_t options;
- uint16_t skip;
- uint16_t sync_timeout;
- uint8_t sync_cte_type;
- uint8_t mse;
- uint16_t timeout;
- uint8_t pa_sync;
- struct bt_bap_io_qos io_qos;
- uint32_t delay; /* Presentation Delay */
-};
-
-struct bt_bap_qos {
- union {
- struct bt_bap_ucast_qos ucast;
- struct bt_bap_bcast_qos bcast;
- };
-};
-
typedef void (*bt_bap_ready_func_t)(struct bt_bap *bap, void *user_data);
typedef void (*bt_bap_destroy_func_t)(void *user_data);
typedef void (*bt_bap_debug_func_t)(const char *str, void *user_data);
diff --git a/src/shared/lc3.h b/src/shared/lc3.h
index 1db46217b76e..d74412719306 100644
--- a/src/shared/lc3.h
+++ b/src/shared/lc3.h
@@ -8,6 +8,8 @@
*
*/

+#include "src/shared/bap-defs.h"
+
#define LC3_ID 0x06

#define LC3_BASE 0x01
@@ -280,6 +282,7 @@
{ \
.ucast.cig_id = 0x00, \
.ucast.cis_id = 0x00, \
+ .ucast.framing = _frame, \
.ucast.delay = _pd, \
.ucast.target_latency = _t_lat, \
.ucast.io_qos.interval = _interval, \
@@ -304,7 +307,7 @@
#define LC3_QOS_8_1_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_8_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_8_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_1, \
LC3_QOS_8_1_1_RTN)
#define LC3_QOS_8_1_1 LC3_QOS_8_1_1_AC(1)

@@ -314,7 +317,7 @@
#define LC3_QOS_8_1_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_8_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_8_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_1, \
LC3_QOS_8_1_2_RTN)
#define LC3_QOS_8_1_2 LC3_QOS_8_1_2_AC(1)

@@ -324,7 +327,7 @@
#define LC3_QOS_8_2_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_8_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_8_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_2, \
LC3_QOS_8_2_1_RTN)
#define LC3_QOS_8_2_1 LC3_QOS_8_2_1_AC(1)

@@ -334,7 +337,7 @@
#define LC3_QOS_8_2_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_8_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_8_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_2, \
LC3_QOS_8_2_2_RTN)
#define LC3_QOS_8_2_2 LC3_QOS_8_2_2_AC(1)

@@ -344,7 +347,7 @@
#define LC3_QOS_16_1_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_16_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_16_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_1, \
LC3_QOS_16_1_1_RTN)
#define LC3_QOS_16_1_1 LC3_QOS_16_1_1_AC(1)

@@ -354,17 +357,25 @@
#define LC3_QOS_16_1_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_16_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_16_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_1, \
LC3_QOS_16_1_2_RTN)
#define LC3_QOS_16_1_2 LC3_QOS_16_1_2_AC(1)

+#define LC3_QOS_16_1_GS_LATENCY 15u
+#define LC3_QOS_16_1_GS_RTN 1u
+#define LC3_QOS_16_1_GS \
+ LC3_QOS_UCAST_7_5_UNFRAMED(60000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_16_1_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_16_1, \
+ LC3_QOS_16_1_GS_RTN)
+
#define LC3_QOS_16_2_1_LATENCY 10u
#define LC3_QOS_16_2_1_RTN 2u

#define LC3_QOS_16_2_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_16_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_16_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_2, \
LC3_QOS_16_2_1_RTN)
#define LC3_QOS_16_2_1 LC3_QOS_16_2_1_AC(1)

@@ -374,17 +385,26 @@
#define LC3_QOS_16_2_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_16_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_16_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_2, \
LC3_QOS_16_2_2_RTN)
#define LC3_QOS_16_2_2 LC3_QOS_16_2_2_AC(1)

+#define LC3_QOS_16_2_GS_LATENCY 20u
+#define LC3_QOS_16_2_GS_RTN 1u
+#define LC3_QOS_16_2_GS \
+ LC3_QOS_UCAST_10_UNFRAMED(60000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_16_2_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_16_2, \
+ LC3_QOS_16_2_GS_RTN)
+
#define LC3_QOS_24_1_1_LATENCY 8u
#define LC3_QOS_24_1_1_RTN 2u

#define LC3_QOS_24_1_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_24_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_24_1, 2u)
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_1, \
+ LC3_QOS_24_1_1_RTN)
#define LC3_QOS_24_1_1 LC3_QOS_24_1_1_AC(1)

#define LC3_QOS_24_1_2_LATENCY 75u
@@ -393,7 +413,7 @@
#define LC3_QOS_24_1_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_24_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_24_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_1, \
LC3_QOS_24_1_2_RTN)
#define LC3_QOS_24_1_2 LC3_QOS_24_1_2_AC(1)

@@ -403,7 +423,7 @@
#define LC3_QOS_24_2_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_24_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_24_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_2, \
LC3_QOS_24_2_1_RTN)
#define LC3_QOS_24_2_1 LC3_QOS_24_2_1_AC(1)

@@ -413,7 +433,7 @@
#define LC3_QOS_24_2_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_24_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_24_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_2, \
LC3_QOS_24_2_2_RTN)
#define LC3_QOS_24_2_2 LC3_QOS_24_2_2_AC(1)

@@ -423,7 +443,7 @@
#define LC3_QOS_32_1_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_32_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_32_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_1, \
LC3_QOS_32_1_1_RTN)
#define LC3_QOS_32_1_1 LC3_QOS_32_1_1_AC(1)

@@ -433,17 +453,34 @@
#define LC3_QOS_32_1_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_32_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_32_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_1, \
LC3_QOS_32_1_2_RTN)
#define LC3_QOS_32_1_2 LC3_QOS_32_1_2_AC(1)

+#define LC3_QOS_32_1_GS_LATENCY 15u
+#define LC3_QOS_32_1_GS_RTN 1u
+#define LC3_QOS_32_1_GS \
+ LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_32_1_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_32_1, \
+ LC3_QOS_32_1_GS_RTN)
+
+#define LC3_QOS_32_1_GR_LATENCY 15u
+#define LC3_QOS_32_1_GR_RTN 1u
+#define LC3_QOS_32_1_GR_AC(_ac) \
+ LC3_QOS_UCAST_7_5_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_32_1_GS_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_1, \
+ LC3_QOS_32_1_GS_RTN)
+#define LC3_QOS_32_1_GR LC3_QOS_32_1_GR_AC(1)
+
#define LC3_QOS_32_2_1_LATENCY 10u
#define LC3_QOS_32_2_1_RTN 2u

#define LC3_QOS_32_2_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_32_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_32_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_2, \
LC3_QOS_32_2_1_RTN)
#define LC3_QOS_32_2_1 LC3_QOS_32_2_1_AC(1)

@@ -453,10 +490,27 @@
#define LC3_QOS_32_2_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_32_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_32_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_2, \
LC3_QOS_32_2_2_RTN)
#define LC3_QOS_32_2_2 LC3_QOS_32_2_2_AC(1)

+#define LC3_QOS_32_2_GS_LATENCY 20u
+#define LC3_QOS_32_2_GS_RTN 1u
+#define LC3_QOS_32_2_GS \
+ LC3_QOS_UCAST_10_UNFRAMED(60000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_32_2_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_32_2, \
+ LC3_QOS_32_2_GS_RTN)
+
+#define LC3_QOS_32_2_GR_LATENCY 20u
+#define LC3_QOS_32_2_GR_RTN 1u
+#define LC3_QOS_32_2_GR_AC(_ac) \
+ LC3_QOS_UCAST_10_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_32_2_GR_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_2, \
+ LC3_QOS_32_2_GR_RTN)
+#define LC3_QOS_32_2_GR LC3_QOS_32_2_GR_AC(1)
+
#define LC3_QOS_44_1_INTERVAL 8163u
#define LC3_QOS_44_1_1_LATENCY 24u
#define LC3_QOS_44_1_1_RTN 5u
@@ -465,7 +519,7 @@
LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_44_1_INTERVAL, \
LC3_QOS_44_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_44_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_1, \
LC3_QOS_44_1_1_RTN)
#define LC3_QOS_44_1_1 LC3_QOS_44_1_1_AC(1)

@@ -476,7 +530,7 @@
LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_44_1_INTERVAL, \
LC3_QOS_44_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_44_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_1, \
LC3_QOS_44_1_2_RTN)
#define LC3_QOS_44_1_2 LC3_QOS_44_1_2_AC(1)

@@ -488,7 +542,7 @@
LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_44_2_INTERVAL, \
LC3_QOS_44_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_44_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_2, \
LC3_QOS_44_2_1_RTN)
#define LC3_QOS_44_2_1 LC3_QOS_44_2_1_AC(1)

@@ -499,7 +553,7 @@
LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_44_2_INTERVAL, \
LC3_QOS_44_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_44_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_2, \
LC3_QOS_44_2_2_RTN)
#define LC3_QOS_44_2_2 LC3_QOS_44_2_2_AC(1)

@@ -509,7 +563,7 @@
#define LC3_QOS_48_1_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_1_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_1,\
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_1,\
LC3_QOS_48_1_1_RTN)
#define LC3_QOS_48_1_1 LC3_QOS_48_1_1_AC(1)

@@ -519,17 +573,36 @@
#define LC3_QOS_48_1_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_1_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_1, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_1, \
LC3_QOS_48_1_2_RTN)
#define LC3_QOS_48_1_2 LC3_QOS_48_1_2_AC(1)

+#define LC3_QOS_48_1_GS_LATENCY 15u
+#define LC3_QOS_48_1_GS_RTN 1u
+
+#define LC3_QOS_48_1_GS \
+ LC3_QOS_UCAST_7_5_UNFRAMED(60000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_48_1_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_48_1, \
+ LC3_QOS_48_1_GS_RTN)
+
+#define LC3_QOS_48_1_GR_LATENCY 15u
+#define LC3_QOS_48_1_GR_RTN 1u
+
+#define LC3_QOS_48_1_GR_AC(_ac) \
+ LC3_QOS_UCAST_7_5_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_48_1_GR_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_1, \
+ LC3_QOS_48_1_GR_RTN)
+#define LC3_QOS_48_1_GR LC3_QOS_48_1_GR_AC(1)
+
#define LC3_QOS_48_2_1_LATENCY 20u
#define LC3_QOS_48_2_1_RTN 5u

#define LC3_QOS_48_2_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_2_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_2, \
LC3_QOS_48_2_1_RTN)
#define LC3_QOS_48_2_1 LC3_QOS_48_2_1_AC(1)

@@ -539,17 +612,36 @@
#define LC3_QOS_48_2_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_2_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_2, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_2, \
LC3_QOS_48_2_2_RTN)
#define LC3_QOS_48_2_2 LC3_QOS_48_2_2_AC(1)

+#define LC3_QOS_48_2_GS_LATENCY 20u
+#define LC3_QOS_48_2_GS_RTN 1u
+
+#define LC3_QOS_48_2_GS \
+ LC3_QOS_UCAST_10_UNFRAMED(60000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
+ LC3_QOS_48_2_GS_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_48_2, \
+ LC3_QOS_48_2_GS_RTN)
+
+#define LC3_QOS_48_2_GR_LATENCY 20u
+#define LC3_QOS_48_2_GR_RTN 1u
+
+#define LC3_QOS_48_2_GR_AC(_ac) \
+ LC3_QOS_UCAST_10_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_48_2_GR_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_2, \
+ LC3_QOS_48_2_GR_RTN)
+#define LC3_QOS_48_2_GR LC3_QOS_48_2_GR_AC(1)
+
#define LC3_QOS_48_3_1_LATENCY 15u
#define LC3_QOS_48_3_1_RTN 5u

#define LC3_QOS_48_3_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_3_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_3, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_3, \
LC3_QOS_48_3_1_RTN)
#define LC3_QOS_48_3_1 LC3_QOS_48_3_1_AC(1)

@@ -559,17 +651,27 @@
#define LC3_QOS_48_3_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_3_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_3, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_3, \
LC3_QOS_48_3_2_RTN)
#define LC3_QOS_48_3_2 LC3_QOS_48_3_2_AC(1)

+#define LC3_QOS_48_3_GR_LATENCY 15u
+#define LC3_QOS_48_3_GR_RTN 1u
+
+#define LC3_QOS_48_3_GR_AC(_ac) \
+ LC3_QOS_UCAST_7_5_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_48_3_GR_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_3, \
+ LC3_QOS_48_3_GR_RTN)
+#define LC3_QOS_48_3_GR LC3_QOS_48_3_GR_AC(1)
+
#define LC3_QOS_48_4_1_LATENCY 20u
#define LC3_QOS_48_4_1_RTN 5u

#define LC3_QOS_48_4_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_4_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_4, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_4, \
LC3_QOS_48_4_1_RTN)
#define LC3_QOS_48_4_1 LC3_QOS_48_4_1_AC(1)

@@ -579,17 +681,27 @@
#define LC3_QOS_48_4_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_4_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_4, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_4, \
LC3_QOS_48_4_2_RTN)
#define LC3_QOS_48_4_2 LC3_QOS_48_4_2_AC(1)

+#define LC3_QOS_48_4_GR_LATENCY 20u
+#define LC3_QOS_48_4_GR_RTN 1u
+
+#define LC3_QOS_48_4_GR_AC(_ac) \
+ LC3_QOS_UCAST_10_UNFRAMED(10000u, BT_BAP_CONFIG_LATENCY_LOW, \
+ LC3_QOS_48_4_GR_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_4, \
+ LC3_QOS_48_4_GR_RTN)
+#define LC3_QOS_48_4_GR LC3_QOS_48_4_GR_AC(1)
+
#define LC3_QOS_48_5_1_LATENCY 15u
#define LC3_QOS_48_5_1_RTN 5u

#define LC3_QOS_48_5_1_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_5_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_5, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_5, \
LC3_QOS_48_5_1_RTN)
#define LC3_QOS_48_5_1 LC3_QOS_48_5_1_AC(1)

@@ -599,7 +711,7 @@
#define LC3_QOS_48_5_2_AC(_ac) \
LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_5_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_5, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_5, \
LC3_QOS_48_5_2_RTN)
#define LC3_QOS_48_5_2 LC3_QOS_48_5_2_AC(1)

@@ -609,7 +721,7 @@
#define LC3_QOS_48_6_1_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_6_1_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_6, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_6, \
LC3_QOS_48_6_1_RTN)
#define LC3_QOS_48_6_1 LC3_QOS_48_6_1_AC(1)

@@ -619,6 +731,264 @@
#define LC3_QOS_48_6_2_AC(_ac) \
LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
LC3_QOS_48_6_2_LATENCY, \
- _ac * LC3_CONFIG_FRAME_LEN_48_6, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_6, \
LC3_QOS_48_6_2_RTN)
#define LC3_QOS_48_6_2 LC3_QOS_48_6_2_AC(1)
+
+#define LC3_QOS_BCAST(_frame, _pd, _interval, _lat, _sdu, _rtn) \
+{ \
+ .bcast.big = 0x00, \
+ .bcast.bis = 0x00, \
+ .bcast.framing = _frame, \
+ .bcast.delay = _pd, \
+ .bcast.io_qos.interval = _interval, \
+ .bcast.io_qos.latency = _lat, \
+ .bcast.io_qos.sdu = _sdu, \
+ .bcast.io_qos.phy = BT_BAP_CONFIG_PHY_2M, \
+ .bcast.io_qos.rtn = _rtn, \
+}
+
+#define LC3_QOS_BCAST_7_5_UNFRAMED(_pd, _lat, _sdu, _rtn) \
+ LC3_QOS_BCAST(LC3_QOS_UNFRAMED, _pd, 7500u, _lat, _sdu, _rtn)
+
+#define LC3_QOS_BCAST_10_UNFRAMED(_pd, _lat, _sdu, _rtn) \
+ LC3_QOS_BCAST(LC3_QOS_UNFRAMED, _pd, 10000u, _lat, _sdu, _rtn)
+
+#define LC3_QOS_BCAST_FRAMED(_pd, _interval, _lat, _sdu, _rtn) \
+ LC3_QOS_BCAST(LC3_QOS_FRAMED, _pd, _interval, _lat, _sdu, _rtn)
+
+#define LC3_QOS_8_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_8_1_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_1, \
+ LC3_QOS_8_1_1_RTN)
+#define LC3_QOS_8_1_1_B LC3_QOS_8_1_1_B_AC(1)
+
+#define LC3_QOS_8_1_2_B_LATENCY 75u
+#define LC3_QOS_8_1_2_B_RTN 4u
+#define LC3_QOS_8_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_8_1_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_1, \
+ LC3_QOS_8_1_2_B_RTN)
+#define LC3_QOS_48_1_2_B LC3_QOS_48_1_2_B_AC(1)
+
+#define LC3_QOS_8_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_8_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_2, \
+ LC3_QOS_8_2_1_RTN)
+#define LC3_QOS_8_2_1_B LC3_QOS_8_2_1_B_AC(1)
+
+#define LC3_QOS_8_2_2_B_LATENCY 60u
+#define LC3_QOS_8_2_2_B_RTN 4u
+#define LC3_QOS_8_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_8_2_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_8_2, \
+ LC3_QOS_8_2_2_B_RTN)
+#define LC3_QOS_8_2_2_B LC3_QOS_8_2_2_B_AC(1)
+
+#define LC3_QOS_16_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_16_1_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_1, \
+ LC3_QOS_16_1_1_RTN)
+#define LC3_QOS_16_1_1_B LC3_QOS_16_1_1_B_AC(1)
+
+#define LC3_QOS_16_1_2_B_LATENCY 45u
+#define LC3_QOS_16_1_2_B_RTN 4u
+#define LC3_QOS_16_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_16_1_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_1, \
+ LC3_QOS_16_1_2_B_RTN)
+#define LC3_QOS_16_1_2_B LC3_QOS_16_1_2_B_AC(1)
+
+#define LC3_QOS_16_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_16_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_2, \
+ LC3_QOS_16_2_1_RTN)
+#define LC3_QOS_16_2_1_B LC3_QOS_16_2_1_B_AC(1)
+
+#define LC3_QOS_16_2_2_B_LATENCY 60u
+#define LC3_QOS_16_2_2_B_RTN 4u
+#define LC3_QOS_16_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_16_2_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_16_2, \
+ LC3_QOS_16_2_2_B_RTN)
+#define LC3_QOS_16_2_2_B LC3_QOS_16_2_2_B_AC(1)
+
+#define LC3_QOS_24_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_24_1_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_1, \
+ LC3_QOS_24_1_1_RTN)
+#define LC3_QOS_24_1_1_B LC3_QOS_24_1_1_B_AC(1)
+
+#define LC3_QOS_24_1_2_B_LATENCY 45u
+#define LC3_QOS_24_1_2_B_RTN 4u
+#define LC3_QOS_24_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_24_1_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_1, \
+ LC3_QOS_24_1_2_B_RTN)
+#define LC3_QOS_24_1_2_B LC3_QOS_24_1_2_B_AC(1)
+
+#define LC3_QOS_24_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_24_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_2, \
+ LC3_QOS_24_2_1_RTN)
+#define LC3_QOS_24_2_1_B LC3_QOS_24_2_1_B_AC(1)
+
+#define LC3_QOS_24_2_2_B_LATENCY 60u
+#define LC3_QOS_24_2_2_B_RTN 4u
+#define LC3_QOS_24_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_24_2_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_24_2, \
+ LC3_QOS_24_2_2_B_RTN)
+#define LC3_QOS_24_2_2_B LC3_QOS_24_2_2_B_AC(1)
+
+#define LC3_QOS_32_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_32_1_1_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_32_1, \
+ LC3_QOS_32_1_1_RTN)
+#define LC3_QOS_32_1_1_B LC3_QOS_32_1_1_B_AC(1)
+
+#define LC3_QOS_32_1_2_B_LATENCY 45u
+#define LC3_QOS_32_1_2_B_RTN 4u
+#define LC3_QOS_32_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_32_1_2_B_LATENCY, \
+ LC3_CONFIG_FRAME_LEN_32_1, \
+ LC3_QOS_32_1_2_B_RTN)
+#define LC3_QOS_32_1_2_B LC3_QOS_32_1_2_B_AC(1)
+
+#define LC3_QOS_32_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_32_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_2, \
+ LC3_QOS_32_2_1_RTN)
+#define LC3_QOS_32_2_1_B LC3_QOS_32_2_1_B_AC(1)
+
+#define LC3_QOS_32_2_2_B_LATENCY 60u
+#define LC3_QOS_32_2_2_B_RTN 4u
+#define LC3_QOS_32_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_32_2_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_32_2, \
+ LC3_QOS_32_2_2_B_RTN)
+#define LC3_QOS_32_2_2_B LC3_QOS_32_2_2_B_AC(1)
+
+#define LC3_QOS_44_1_1_B_RTN 4u
+#define LC3_QOS_44_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_FRAMED(40000u, LC3_QOS_44_1_INTERVAL, \
+ LC3_QOS_44_1_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_1, \
+ LC3_QOS_44_1_1_B_RTN)
+#define LC3_QOS_44_1_1_B LC3_QOS_44_1_1_B_AC(1)
+
+#define LC3_QOS_44_1_2_B_LATENCY 54u
+#define LC3_QOS_44_1_2_B_RTN 4u
+#define LC3_QOS_44_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_FRAMED(40000u, LC3_QOS_44_1_INTERVAL, \
+ LC3_QOS_44_1_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_1, \
+ LC3_QOS_44_1_2_B_RTN)
+#define LC3_QOS_44_1_2_B LC3_QOS_44_1_2_B_AC(1)
+
+#define LC3_QOS_44_2_1_B_RTN 4u
+#define LC3_QOS_44_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_FRAMED(40000u, LC3_QOS_44_2_INTERVAL, \
+ LC3_QOS_44_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_2, \
+ LC3_QOS_44_2_1_B_RTN)
+#define LC3_QOS_44_2_1_B LC3_QOS_44_2_1_B_AC(1)
+
+#define LC3_QOS_44_2_2_B_LATENCY 60u
+#define LC3_QOS_44_2_2_B_RTN 4u
+#define LC3_QOS_44_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_FRAMED(40000u, LC3_QOS_44_2_INTERVAL, \
+ LC3_QOS_44_2_2_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_44_2, \
+ LC3_QOS_44_2_2_RTN)
+#define LC3_QOS_44_2_2_B LC3_QOS_44_2_2_B_AC(1)
+
+#define LC3_QOS_48_1_1_B_RTN 4u
+#define LC3_QOS_48_1_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_1_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_1,\
+ LC3_QOS_48_1_1_B_RTN)
+#define LC3_QOS_48_1_1_B LC3_QOS_48_1_1_B_AC(1)
+
+#define LC3_QOS_48_1_2_B_LATENCY 50u
+#define LC3_QOS_48_1_2_B_RTN 4u
+#define LC3_QOS_48_1_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_1_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_1, \
+ LC3_QOS_48_1_2_B_RTN)
+#define LC3_QOS_48_1_2_B LC3_QOS_48_1_2_B_AC(1)
+
+#define LC3_QOS_48_2_1_B_RTN 4u
+#define LC3_QOS_48_2_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_2_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_2, \
+ LC3_QOS_48_2_1_B_RTN)
+#define LC3_QOS_48_2_1_B LC3_QOS_48_2_1_B_AC(1)
+
+#define LC3_QOS_48_2_2_B_LATENCY 65u
+#define LC3_QOS_48_2_2_B_RTN 4u
+#define LC3_QOS_48_2_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_2_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_2, \
+ LC3_QOS_48_2_2_B_RTN)
+#define LC3_QOS_48_2_2_B LC3_QOS_48_2_2_B_AC(1)
+
+#define LC3_QOS_48_3_1_B_RTN 4u
+#define LC3_QOS_48_3_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_3_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_3, \
+ LC3_QOS_48_3_1_B_RTN)
+#define LC3_QOS_48_3_1_B LC3_QOS_48_3_1_B_AC(1)
+
+#define LC3_QOS_48_3_2_B_LATENCY 50u
+#define LC3_QOS_48_3_2_B_RTN 4u
+#define LC3_QOS_48_3_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_3_2_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_3, \
+ LC3_QOS_48_3_2_RTN)
+#define LC3_QOS_48_3_2_B LC3_QOS_48_3_2_B_AC(1)
+
+#define LC3_QOS_48_4_1_B_RTN 4u
+#define LC3_QOS_48_4_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_4_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_4, \
+ LC3_QOS_48_4_1_B_RTN)
+#define LC3_QOS_48_4_1_B LC3_QOS_48_4_1_B_AC(1)
+
+#define LC3_QOS_48_4_2_B_LATENCY 65u
+#define LC3_QOS_48_4_2_B_RTN 4u
+#define LC3_QOS_48_4_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_4_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_4, \
+ LC3_QOS_48_4_2_B_RTN)
+#define LC3_QOS_48_4_2_B LC3_QOS_48_4_2_B_AC(1)
+
+#define LC3_QOS_48_5_1_B_RTN 4u
+#define LC3_QOS_48_5_1_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_5_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_5, \
+ LC3_QOS_48_5_1_B_RTN)
+#define LC3_QOS_48_5_1_B LC3_QOS_48_5_1_B_AC(1)
+
+#define LC3_QOS_48_5_2_B_LATENCY 50u
+#define LC3_QOS_48_5_2_B_RTN 4u
+#define LC3_QOS_48_5_2_B_AC(_ac) \
+ LC3_QOS_BCAST_7_5_UNFRAMED(40000u, LC3_QOS_48_5_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_5, \
+ LC3_QOS_48_5_2_B_RTN)
+#define LC3_QOS_48_5_2_B LC3_QOS_48_5_2_B_AC(1)
+
+#define LC3_QOS_48_6_1_B_RTN 5u
+#define LC3_QOS_48_6_1_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_6_1_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_6, \
+ LC3_QOS_48_6_1_B_RTN)
+#define LC3_QOS_48_6_1_B LC3_QOS_48_6_1_B_AC(1)
+
+#define LC3_QOS_48_6_2_B_LATENCY 65u
+#define LC3_QOS_48_6_2_B_RTN 4u
+#define LC3_QOS_48_6_2_B_AC(_ac) \
+ LC3_QOS_BCAST_10_UNFRAMED(40000u, LC3_QOS_48_6_2_B_LATENCY, \
+ (_ac) * LC3_CONFIG_FRAME_LEN_48_6, \
+ LC3_QOS_48_6_2_B_RTN)
+#define LC3_QOS_48_6_2_B LC3_QOS_48_6_2_B_AC(1)
--
2.43.0


2024-03-13 19:46:08

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 5/6] client/player: Cleanup broadcast QoS

From: Luiz Augusto von Dentz <[email protected]>

There is no need to setup broadcast QoS related to PA/BIG as the kernel
already sets these settings.
---
client/player.c | 89 +++++++++++++++++++------------------------------
1 file changed, 35 insertions(+), 54 deletions(-)

diff --git a/client/player.c b/client/player.c
index 381c5d568103..d26ff9d3a9df 100644
--- a/client/player.c
+++ b/client/player.c
@@ -94,14 +94,6 @@ struct avdtp_media_codec_capability {
#error "Unknown byte order"
#endif

-/* BAP Broadcast parameters */
-#define BCAST_SYNC_FACTOR 24 /* PA params */
-#define BCAST_OPTIONS 0x00 /* PA Create Sync */
-#define BCAST_SKIP 0x0000 /* PA Create Sync */
-#define BCAST_SYNC_TIMEOUT 0x4000 /* PA Create Sync */
-#define BCAST_SYNC_CTE_TYPE 0x00 /* PA Create Sync */
-#define BCAST_MSE 0x00 /* BIG Create Sync */
-#define BCAST_TIMEOUT 0x4000 /* BIG Create Sync */
#define BCAST_CODE {0x01, 0x02, 0x68, 0x05, 0x53, 0xf1, 0x41, 0x5a, \
0xa2, 0x65, 0xbb, 0xaf, 0xc6, 0xea, 0x03, 0xb8}

@@ -1745,13 +1737,6 @@ struct endpoint_config {
struct iovec *meta; /* Metadata LTVs*/
uint8_t target_latency;
struct bt_bap_qos qos; /* BAP QOS configuration parameters */
- uint8_t sync_factor; /* PA parameter */
- uint8_t options; /* PA create sync parameter */
- uint16_t skip; /* PA create sync parameter */
- uint16_t sync_timeout; /* PA create sync parameter */
- uint8_t sync_cte_type; /* PA create sync parameter */
- uint8_t mse; /* BIG create sync parameter */
- uint16_t timeout; /* BIG create sync parameter */
};

static void append_io_qos(DBusMessageIter *iter, struct bt_bap_io_qos *qos)
@@ -1831,40 +1816,47 @@ static void append_bcast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
&cfg->ep->iso_stream);
}

- bt_shell_printf("SyncFactor %u\n", cfg->sync_factor);
+ if (qos->sync_factor) {
+ bt_shell_printf("SyncFactor %u\n", qos->sync_factor);
+ g_dbus_dict_append_entry(iter, "SyncFactor", DBUS_TYPE_BYTE,
+ &qos->sync_factor);
+ }

- g_dbus_dict_append_entry(iter, "SyncFactor", DBUS_TYPE_BYTE,
- &cfg->sync_factor);
+ if (qos->options) {
+ bt_shell_printf("Options %u\n", qos->options);
+ g_dbus_dict_append_entry(iter, "Options", DBUS_TYPE_BYTE,
+ &qos->options);
+ }

- bt_shell_printf("Options %u\n", cfg->options);
+ if (qos->skip) {
+ bt_shell_printf("Skip %u\n", qos->skip);
+ g_dbus_dict_append_entry(iter, "Skip", DBUS_TYPE_UINT16,
+ &qos->skip);
+ }

- g_dbus_dict_append_entry(iter, "Options", DBUS_TYPE_BYTE,
- &cfg->options);
+ if (qos->sync_timeout) {
+ bt_shell_printf("SyncTimeout %u\n", qos->sync_timeout);
+ g_dbus_dict_append_entry(iter, "SyncTimeout", DBUS_TYPE_UINT16,
+ &qos->sync_timeout);
+ }

- bt_shell_printf("Skip %u\n", cfg->skip);
+ if (qos->sync_cte_type) {
+ bt_shell_printf("SyncCteType %u\n", qos->sync_cte_type);
+ g_dbus_dict_append_entry(iter, "SyncCteType", DBUS_TYPE_BYTE,
+ &qos->sync_cte_type);
+ }

- g_dbus_dict_append_entry(iter, "Skip", DBUS_TYPE_UINT16,
- &cfg->skip);
+ if (qos->sync_cte_type) {
+ bt_shell_printf("MSE %u\n", qos->mse);
+ g_dbus_dict_append_entry(iter, "MSE", DBUS_TYPE_BYTE,
+ &qos->mse);
+ }

- bt_shell_printf("SyncTimeout %u\n", cfg->sync_timeout);
-
- g_dbus_dict_append_entry(iter, "SyncTimeout", DBUS_TYPE_UINT16,
- &cfg->sync_timeout);
-
- bt_shell_printf("SyncCteType %u\n", cfg->sync_cte_type);
-
- g_dbus_dict_append_entry(iter, "SyncType", DBUS_TYPE_BYTE,
- &cfg->sync_cte_type);
-
- bt_shell_printf("MSE %u\n", cfg->mse);
-
- g_dbus_dict_append_entry(iter, "MSE", DBUS_TYPE_BYTE,
- &cfg->mse);
-
- bt_shell_printf("Timeout %u\n", cfg->timeout);
-
- g_dbus_dict_append_entry(iter, "Timeout", DBUS_TYPE_UINT16,
- &cfg->timeout);
+ if (qos->timeout) {
+ bt_shell_printf("Timeout %u\n", qos->timeout);
+ g_dbus_dict_append_entry(iter, "Timeout", DBUS_TYPE_UINT16,
+ &qos->timeout);
+ }

if (cfg->ep->bcode->iov_len != 0) {
const char *key = "BCode";
@@ -3673,17 +3665,6 @@ static void endpoint_set_config_bcast(struct endpoint_config *cfg)
iov_append(&cfg->ep->bcode, bcast_code,
sizeof(bcast_code));

- /* Add periodic advertisement parameters */
- cfg->sync_factor = BCAST_SYNC_FACTOR;
- cfg->options = BCAST_OPTIONS;
- cfg->skip = BCAST_SKIP;
- cfg->sync_timeout = BCAST_SYNC_TIMEOUT;
- cfg->sync_cte_type = BCAST_SYNC_CTE_TYPE;
-
- /* Add BIG create sync parameters */
- cfg->mse = BCAST_MSE;
- cfg->timeout = BCAST_TIMEOUT;
-
if ((strcmp(cfg->ep->uuid, BAA_SERVICE_UUID) == 0)) {
/* A broadcast sink endpoint config does not need
* user input.
--
2.43.0


2024-03-13 20:17:15

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 4/6] client/player: Use QOS macros from lc3.h to define presets

From: Luiz Augusto von Dentz <[email protected]>

This makes use of QOS macros for for lc3.h to define preset
configuration and remove existing macros since they were just
duplicates.
---
client/player.c | 424 +++++++++++++++++++-----------------------------
1 file changed, 169 insertions(+), 255 deletions(-)

diff --git a/client/player.c b/client/player.c
index ab8cb7434cdc..381c5d568103 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1232,20 +1232,10 @@ static const struct capabilities {
UTIL_IOV_INIT()),
};

-struct codec_qos {
- uint32_t interval;
- uint8_t framing;
- uint8_t phy;
- uint16_t sdu;
- uint8_t rtn;
- uint16_t latency;
- uint32_t delay;
-};
-
struct codec_preset {
char *name;
const struct iovec data;
- const struct codec_qos qos;
+ struct bt_bap_qos qos;
uint8_t target_latency;
};

@@ -1296,47 +1286,6 @@ static struct codec_preset sbc_presets[] = {
SBC_PRESET("UQ_STEREO_48", UTIL_IOV_INIT(0x11, 0x15, 2, 58)),
};

-#define QOS_CONFIG(_interval, _framing, _phy, _sdu, _rtn, _latency, _delay) \
- { \
- .interval = _interval, \
- .framing = _framing, \
- .phy = _phy, \
- .sdu = _sdu, \
- .rtn = _rtn, \
- .latency = _latency, \
- .delay = _delay, \
- }
-
-#define QOS_UNFRAMED(_interval, _phy, _sdu, _rtn, _latency, _delay) \
- QOS_CONFIG(_interval, 0x00, _phy, _sdu, _rtn, _latency, _delay)
-
-#define QOS_FRAMED(_interval, _phy, _sdu, _rtn, _latency, _delay) \
- QOS_CONFIG(_interval, 0x01, _phy, _sdu, _rtn, _latency, _delay)
-
-#define QOS_UNFRAMED_1M(_interval, _sdu, _rtn, _latency, _delay) \
- QOS_UNFRAMED(_interval, 0x01, _sdu, _rtn, _latency, _delay) \
-
-#define QOS_FRAMED_1M(_interval, _sdu, _rtn, _latency, _delay) \
- QOS_FRAMED(_interval, 0x01, _sdu, _rtn, _latency, _delay) \
-
-#define QOS_UNFRAMED_2M(_interval, _sdu, _rtn, _latency, _delay) \
- QOS_UNFRAMED(_interval, 0x02, _sdu, _rtn, _latency, _delay) \
-
-#define QOS_FRAMED_2M(_interval, _sdu, _rtn, _latency, _delay) \
- QOS_FRAMED(_interval, 0x02, _sdu, _rtn, _latency, _delay) \
-
-#define LC3_7_5_UNFRAMED(_sdu, _rtn, _latency, _delay) \
- QOS_UNFRAMED(7500u, 0x02, _sdu, _rtn, _latency, _delay)
-
-#define LC3_7_5_FRAMED(_sdu, _rtn, _latency, _delay) \
- QOS_FRAMED(7500u, 0x02, _sdu, _rtn, _latency, _delay)
-
-#define LC3_10_UNFRAMED(_sdu, _rtn, _latency, _delay) \
- QOS_UNFRAMED_2M(10000u, _sdu, _rtn, _latency, _delay)
-
-#define LC3_10_FRAMED(_sdu, _rtn, _latency, _delay) \
- QOS_FRAMED_2M(10000u, _sdu, _rtn, _latency, _delay)
-
#define LC3_PRESET_LL(_name, _data, _qos) \
{ \
.name = _name, \
@@ -1361,183 +1310,115 @@ static struct codec_preset sbc_presets[] = {
.target_latency = 0x03, \
}

+#define LC3_PRESET_B(_name, _data, _qos) \
+ { \
+ .name = _name, \
+ .data = _data, \
+ .qos = _qos, \
+ .target_latency = 0x00, \
+ }
+
static struct codec_preset lc3_ucast_presets[] = {
/* Table 4.43: QoS configuration support setting requirements */
- LC3_PRESET("8_1_1", LC3_CONFIG_8_1,
- LC3_7_5_UNFRAMED(26u, 2u, 8u, 40000u)),
- LC3_PRESET("8_2_1", LC3_CONFIG_8_2,
- LC3_10_UNFRAMED(30u, 2u, 10u, 40000u)),
- LC3_PRESET("16_1_1", LC3_CONFIG_16_1,
- LC3_7_5_UNFRAMED(30u, 2u, 8u, 40000u)),
- LC3_PRESET("16_2_1", LC3_CONFIG_16_2,
- LC3_10_UNFRAMED(40u, 2u, 10u, 40000u)),
- LC3_PRESET("24_1_1", LC3_CONFIG_24_1,
- LC3_7_5_UNFRAMED(45u, 2u, 8u, 40000u)),
- LC3_PRESET("24_2_1", LC3_CONFIG_24_2,
- LC3_10_UNFRAMED(60u, 2u, 10u, 40000u)),
- LC3_PRESET("32_1_1", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 2u, 8u, 40000u)),
- LC3_PRESET("32_2_1", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 2u, 10u, 40000u)),
- LC3_PRESET("44_1_1", LC3_CONFIG_44_1,
- QOS_FRAMED_2M(8163u, 98u, 5u, 24u, 40000u)),
- LC3_PRESET("44_2_1", LC3_CONFIG_44_2,
- QOS_FRAMED_2M(10884u, 130u, 5u, 31u, 40000u)),
- LC3_PRESET("48_1_1", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 5u, 15u, 40000u)),
- LC3_PRESET("48_2_1", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 5u, 20u, 40000u)),
- LC3_PRESET("48_3_1", LC3_CONFIG_48_3,
- LC3_7_5_UNFRAMED(90u, 5u, 15u, 40000u)),
- LC3_PRESET("48_4_1", LC3_CONFIG_48_4,
- LC3_10_UNFRAMED(120u, 5u, 20u, 40000u)),
- LC3_PRESET("48_5_1", LC3_CONFIG_48_5,
- LC3_7_5_UNFRAMED(117u, 5u, 15u, 40000u)),
- LC3_PRESET("48_6_1", LC3_CONFIG_48_6,
- LC3_10_UNFRAMED(155u, 5u, 20u, 40000u)),
+ LC3_PRESET("8_1_1", LC3_CONFIG_8_1, LC3_QOS_8_1_1),
+ LC3_PRESET("8_2_1", LC3_CONFIG_8_2, LC3_QOS_8_2_1),
+ LC3_PRESET("16_1_1", LC3_CONFIG_16_1, LC3_QOS_16_1_1),
+ LC3_PRESET("16_2_1", LC3_CONFIG_16_2, LC3_QOS_16_2_1),
+ LC3_PRESET("24_1_1", LC3_CONFIG_24_1, LC3_QOS_24_1_1),
+ LC3_PRESET("24_2_1", LC3_CONFIG_24_2, LC3_QOS_24_2_1),
+ LC3_PRESET("32_1_1", LC3_CONFIG_32_1, LC3_QOS_32_1_1),
+ LC3_PRESET("32_2_1", LC3_CONFIG_32_2, LC3_QOS_32_1_1),
+ LC3_PRESET("44_1_1", LC3_CONFIG_44_1, LC3_QOS_44_1_1),
+ LC3_PRESET("44_2_1", LC3_CONFIG_44_2, LC3_QOS_44_2_1),
+ LC3_PRESET("48_1_1", LC3_CONFIG_48_1, LC3_QOS_48_1_1),
+ LC3_PRESET("48_2_1", LC3_CONFIG_48_2, LC3_QOS_48_2_1),
+ LC3_PRESET("48_3_1", LC3_CONFIG_48_3, LC3_QOS_48_3_1),
+ LC3_PRESET("48_4_1", LC3_CONFIG_48_4, LC3_QOS_48_4_1),
+ LC3_PRESET("48_5_1", LC3_CONFIG_48_5, LC3_QOS_48_5_1),
+ LC3_PRESET("48_6_1", LC3_CONFIG_48_6, LC3_QOS_48_6_1),
/* QoS Configuration settings for high reliability audio data */
- LC3_PRESET_HR("8_1_2", LC3_CONFIG_8_1,
- LC3_7_5_UNFRAMED(26u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("8_2_2", LC3_CONFIG_8_2,
- LC3_10_UNFRAMED(30u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("16_1_2", LC3_CONFIG_16_1,
- LC3_7_5_UNFRAMED(30u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("16_2_2", LC3_CONFIG_16_2,
- LC3_10_UNFRAMED(40u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("24_1_2", LC3_CONFIG_24_1,
- LC3_7_5_UNFRAMED(45u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("24_2_2", LC3_CONFIG_24_2,
- LC3_10_UNFRAMED(60u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("32_1_2", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("32_2_2", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("44_1_2", LC3_CONFIG_44_1,
- QOS_FRAMED_2M(8163u, 98u, 13u, 80u, 40000u)),
- LC3_PRESET_HR("44_2_2", LC3_CONFIG_44_2,
- QOS_FRAMED_2M(10884u, 130u, 13u, 85u, 40000u)),
- LC3_PRESET_HR("48_1_2", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_2_2", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("48_3_2", LC3_CONFIG_48_3,
- LC3_7_5_UNFRAMED(90u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_4_2", LC3_CONFIG_48_4,
- LC3_10_UNFRAMED(120u, 13u, 100u, 40000u)),
- LC3_PRESET_HR("48_5_2", LC3_CONFIG_48_5,
- LC3_7_5_UNFRAMED(117u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_6_2", LC3_CONFIG_48_6,
- LC3_10_UNFRAMED(155u, 13u, 100u, 40000u)),
+ LC3_PRESET_HR("8_1_2", LC3_CONFIG_8_1, LC3_QOS_8_1_2),
+ LC3_PRESET_HR("8_2_2", LC3_CONFIG_8_2, LC3_QOS_8_2_2),
+ LC3_PRESET_HR("16_1_2", LC3_CONFIG_16_1, LC3_QOS_16_1_2),
+ LC3_PRESET_HR("16_2_2", LC3_CONFIG_16_2, LC3_QOS_16_2_2),
+ LC3_PRESET_HR("24_1_2", LC3_CONFIG_24_1, LC3_QOS_24_1_2),
+ LC3_PRESET_HR("24_2_2", LC3_CONFIG_24_2, LC3_QOS_24_2_2),
+ LC3_PRESET_HR("32_1_2", LC3_CONFIG_32_1, LC3_QOS_32_1_2),
+ LC3_PRESET_HR("32_2_2", LC3_CONFIG_32_2, LC3_QOS_32_2_2),
+ LC3_PRESET_HR("44_1_2", LC3_CONFIG_44_1, LC3_QOS_44_1_2),
+ LC3_PRESET_HR("44_2_2", LC3_CONFIG_44_2, LC3_QOS_44_2_2),
+ LC3_PRESET_HR("48_1_2", LC3_CONFIG_48_1, LC3_QOS_48_1_2),
+ LC3_PRESET_HR("48_2_2", LC3_CONFIG_48_2, LC3_QOS_48_2_2),
+ LC3_PRESET_HR("48_3_2", LC3_CONFIG_48_3, LC3_QOS_48_3_2),
+ LC3_PRESET_HR("48_4_2", LC3_CONFIG_48_4, LC3_QOS_48_4_2),
+ LC3_PRESET_HR("48_5_2", LC3_CONFIG_48_5, LC3_QOS_48_5_2),
+ LC3_PRESET_HR("48_6_2", LC3_CONFIG_48_6, LC3_QOS_48_6_2),
/* QoS configuration support setting requirements for the UGG and UGT */
- LC3_PRESET_LL("16_1_gs", LC3_CONFIG_16_1,
- LC3_7_5_UNFRAMED(30u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("16_2_gs", LC3_CONFIG_16_2,
- LC3_10_UNFRAMED(40u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("32_1_gs", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("32_2_gs", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("48_1_gs", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("48_2_gs", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("32_1_gr", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("32_2_gr", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_1_gr", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_2_gr", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_3_gr", LC3_CONFIG_48_3,
- LC3_7_5_UNFRAMED(90u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_4_gr", LC3_CONFIG_48_4,
- LC3_10_UNFRAMED(120u, 1u, 20u, 10000u)),
+ LC3_PRESET_LL("16_1_gs", LC3_CONFIG_16_1, LC3_QOS_16_1_GS),
+ LC3_PRESET_LL("16_2_gs", LC3_CONFIG_16_2, LC3_QOS_16_2_GS),
+ LC3_PRESET_LL("32_1_gs", LC3_CONFIG_32_1, LC3_QOS_32_1_GS),
+ LC3_PRESET_LL("32_2_gs", LC3_CONFIG_32_2, LC3_QOS_32_2_GS),
+ LC3_PRESET_LL("48_1_gs", LC3_CONFIG_48_1, LC3_QOS_48_1_GS),
+ LC3_PRESET_LL("48_2_gs", LC3_CONFIG_48_2, LC3_QOS_48_2_GS),
+ LC3_PRESET_LL("32_1_gr", LC3_CONFIG_32_1, LC3_QOS_32_1_GR),
+ LC3_PRESET_LL("32_2_gr", LC3_CONFIG_32_2, LC3_QOS_32_2_GR),
+ LC3_PRESET_LL("48_1_gr", LC3_CONFIG_48_1, LC3_QOS_48_1_GR),
+ LC3_PRESET_LL("48_2_gr", LC3_CONFIG_48_2, LC3_QOS_48_2_GR),
+ LC3_PRESET_LL("48_3_gr", LC3_CONFIG_48_3, LC3_QOS_48_3_GR),
+ LC3_PRESET_LL("48_4_gr", LC3_CONFIG_48_4, LC3_QOS_48_4_GR),
LC3_PRESET_LL("32_1_gr_l+r", LC3_CONFIG_32_1_AC(2),
- LC3_7_5_UNFRAMED(2 * 60u, 1u, 15u, 10000u)),
+ LC3_QOS_32_1_GR_AC(2)),
LC3_PRESET_LL("32_2_gr_l+r", LC3_CONFIG_32_2_AC(2),
- LC3_10_UNFRAMED(2 * 80u, 1u, 20u, 10000u)),
+ LC3_QOS_32_2_GR_AC(2)),
LC3_PRESET_LL("48_1_gr_l+r", LC3_CONFIG_48_1_AC(2),
- LC3_7_5_UNFRAMED(2 * 75u, 1u, 15u, 10000u)),
+ LC3_QOS_48_1_GR_AC(2)),
LC3_PRESET_LL("48_2_gr_l+r", LC3_CONFIG_48_2_AC(2),
- LC3_10_UNFRAMED(2 * 100u, 1u, 20u, 10000u)),
+ LC3_QOS_48_2_GR_AC(2)),
LC3_PRESET_LL("48_3_gr_l+r", LC3_CONFIG_48_3_AC(2),
- LC3_7_5_UNFRAMED(2 * 90u, 1u, 15u, 10000u)),
+ LC3_QOS_48_3_GR_AC(2)),
LC3_PRESET_LL("48_4_gr_l+r", LC3_CONFIG_48_4_AC(2),
- LC3_10_UNFRAMED(2 * 120u, 1u, 20u, 10000u)),
+ LC3_QOS_48_4_GR_AC(2)),
};

static struct codec_preset lc3_bcast_presets[] = {
/* Table 6.4: Broadcast Audio Stream configuration support requirements
* for the Broadcast Source and Broadcast Sink
*/
- LC3_PRESET("8_1_1", LC3_CONFIG_8_1,
- LC3_7_5_UNFRAMED(26u, 2u, 8u, 40000u)),
- LC3_PRESET("8_2_1", LC3_CONFIG_8_2,
- LC3_10_UNFRAMED(30u, 2u, 10u, 40000u)),
- LC3_PRESET("16_1_1", LC3_CONFIG_16_1,
- LC3_7_5_UNFRAMED(30u, 2u, 8u, 40000u)),
- LC3_PRESET("16_2_1", LC3_CONFIG_16_2,
- LC3_10_UNFRAMED(40u, 2u, 10u, 40000u)),
- LC3_PRESET("24_1_1", LC3_CONFIG_24_1,
- LC3_7_5_UNFRAMED(45u, 2u, 8u, 40000u)),
- LC3_PRESET("24_2_1", LC3_CONFIG_24_2,
- LC3_10_UNFRAMED(60u, 2u, 10u, 40000u)),
- LC3_PRESET("32_1_1", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 2u, 8u, 40000u)),
- LC3_PRESET("32_2_1", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 2u, 10u, 40000u)),
- LC3_PRESET("44_1_1", LC3_CONFIG_44_1,
- QOS_FRAMED_2M(8163u, 98u, 4u, 24u, 40000u)),
- LC3_PRESET("44_2_1", LC3_CONFIG_44_2,
- QOS_FRAMED_2M(10884u, 130u, 4u, 31u, 40000u)),
- LC3_PRESET("48_1_1", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 4u, 15u, 40000u)),
- LC3_PRESET("48_2_1", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 4u, 20u, 40000u)),
- LC3_PRESET("48_3_1", LC3_CONFIG_48_3,
- LC3_7_5_UNFRAMED(90u, 4u, 15u, 40000u)),
- LC3_PRESET("48_4_1", LC3_CONFIG_48_4,
- LC3_10_UNFRAMED(120u, 4u, 20u, 40000u)),
- LC3_PRESET("48_5_1", LC3_CONFIG_48_5,
- LC3_7_5_UNFRAMED(117u, 4u, 15u, 40000u)),
- LC3_PRESET("48_6_1", LC3_CONFIG_48_6,
- LC3_10_UNFRAMED(155u, 4u, 20u, 40000u)),
+ LC3_PRESET_B("8_1_1", LC3_CONFIG_8_1, LC3_QOS_8_1_1_B),
+ LC3_PRESET_B("8_2_1", LC3_CONFIG_8_2, LC3_QOS_8_2_1_B),
+ LC3_PRESET_B("16_1_1", LC3_CONFIG_16_1, LC3_QOS_16_1_1_B),
+ LC3_PRESET_B("16_2_1", LC3_CONFIG_16_2, LC3_QOS_16_2_1_B),
+ LC3_PRESET_B("24_1_1", LC3_CONFIG_24_1, LC3_QOS_24_1_1_B),
+ LC3_PRESET_B("24_2_1", LC3_CONFIG_24_2, LC3_QOS_24_2_1_B),
+ LC3_PRESET_B("32_1_1", LC3_CONFIG_32_1, LC3_QOS_32_1_1_B),
+ LC3_PRESET_B("32_2_1", LC3_CONFIG_32_2, LC3_QOS_32_2_1_B),
+ LC3_PRESET_B("44_1_1", LC3_CONFIG_44_1, LC3_QOS_44_1_1_B),
+ LC3_PRESET_B("44_2_1", LC3_CONFIG_44_2, LC3_QOS_44_2_1_B),
+ LC3_PRESET_B("48_1_1", LC3_CONFIG_48_1, LC3_QOS_48_1_1_B),
+ LC3_PRESET_B("48_2_1", LC3_CONFIG_48_2, LC3_QOS_48_2_1_B),
+ LC3_PRESET_B("48_3_1", LC3_CONFIG_48_3, LC3_QOS_48_3_1_B),
+ LC3_PRESET_B("48_4_1", LC3_CONFIG_48_4, LC3_QOS_48_4_1_B),
+ LC3_PRESET_B("48_5_1", LC3_CONFIG_48_5, LC3_QOS_48_5_1_B),
+ LC3_PRESET_B("48_6_1", LC3_CONFIG_48_6, LC3_QOS_48_6_1_B),
/* Broadcast Audio Stream configuration settings for high-reliability
* audio data.
*/
- LC3_PRESET_HR("8_1_2", LC3_CONFIG_8_1,
- LC3_7_5_UNFRAMED(26u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("8_2_2", LC3_CONFIG_8_2,
- LC3_10_UNFRAMED(30u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("16_1_2", LC3_CONFIG_16_1,
- LC3_7_5_UNFRAMED(30u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("16_2_2", LC3_CONFIG_16_2,
- LC3_10_UNFRAMED(40u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("24_1_2", LC3_CONFIG_24_1,
- LC3_7_5_UNFRAMED(45u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("24_2_2", LC3_CONFIG_24_2,
- LC3_10_UNFRAMED(60u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("32_1_2", LC3_CONFIG_32_1,
- LC3_7_5_UNFRAMED(60u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("32_2_2", LC3_CONFIG_32_2,
- LC3_10_UNFRAMED(80u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("44_1_2", LC3_CONFIG_44_1,
- QOS_FRAMED_2M(8163u, 4u, 13u, 54u, 40000u)),
- LC3_PRESET_HR("44_2_2", LC3_CONFIG_44_2,
- QOS_FRAMED_2M(10884u, 130u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("48_1_2", LC3_CONFIG_48_1,
- LC3_7_5_UNFRAMED(75u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_2_2", LC3_CONFIG_48_2,
- LC3_10_UNFRAMED(100u, 4u, 65u, 40000u)),
- LC3_PRESET_HR("48_3_2", LC3_CONFIG_48_3,
- LC3_7_5_UNFRAMED(90u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_4_2", LC3_CONFIG_48_4,
- LC3_10_UNFRAMED(120u, 4u, 65u, 40000u)),
- LC3_PRESET_HR("48_5_2", LC3_CONFIG_48_5,
- LC3_7_5_UNFRAMED(117u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_6_2", LC3_CONFIG_48_6,
- LC3_10_UNFRAMED(155u, 4u, 65u, 40000u)),
+ LC3_PRESET_B("8_1_2", LC3_CONFIG_8_1, LC3_QOS_8_1_1_B),
+ LC3_PRESET_B("8_2_2", LC3_CONFIG_8_2, LC3_QOS_8_2_2_B),
+ LC3_PRESET_B("16_1_2", LC3_CONFIG_16_1, LC3_QOS_16_1_2_B),
+ LC3_PRESET_B("16_2_2", LC3_CONFIG_16_2, LC3_QOS_16_2_2_B),
+ LC3_PRESET_B("24_1_2", LC3_CONFIG_24_1, LC3_QOS_24_1_2_B),
+ LC3_PRESET_B("24_2_2", LC3_CONFIG_24_2, LC3_QOS_24_2_2_B),
+ LC3_PRESET_B("32_1_2", LC3_CONFIG_32_1, LC3_QOS_32_1_2_B),
+ LC3_PRESET_B("32_2_2", LC3_CONFIG_32_2, LC3_QOS_32_2_2_B),
+ LC3_PRESET_B("44_1_2", LC3_CONFIG_44_1, LC3_QOS_44_1_2_B),
+ LC3_PRESET_B("44_2_2", LC3_CONFIG_44_2, LC3_QOS_44_2_2_B),
+ LC3_PRESET_B("48_1_2", LC3_CONFIG_48_1, LC3_QOS_48_1_2_B),
+ LC3_PRESET_B("48_2_2", LC3_CONFIG_48_2, LC3_QOS_48_2_2_B),
+ LC3_PRESET_B("48_3_2", LC3_CONFIG_48_3, LC3_QOS_48_3_2_B),
+ LC3_PRESET_B("48_4_2", LC3_CONFIG_48_4, LC3_QOS_48_4_2_B),
+ LC3_PRESET_B("48_5_2", LC3_CONFIG_48_5, LC3_QOS_48_5_2_B),
+ LC3_PRESET_B("48_6_2", LC3_CONFIG_48_6, LC3_QOS_48_6_2_B),
};

static void print_ltv(const char *str, void *user_data)
@@ -1863,7 +1744,7 @@ struct endpoint_config {
struct iovec *caps; /* Codec Specific Configuration LTVs */
struct iovec *meta; /* Metadata LTVs*/
uint8_t target_latency;
- struct codec_qos qos; /* BAP QOS configuration parameters */
+ struct bt_bap_qos qos; /* BAP QOS configuration parameters */
uint8_t sync_factor; /* PA parameter */
uint8_t options; /* PA create sync parameter */
uint16_t skip; /* PA create sync parameter */
@@ -1873,20 +1754,8 @@ struct endpoint_config {
uint16_t timeout; /* BIG create sync parameter */
};

-static void append_io_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
+static void append_io_qos(DBusMessageIter *iter, struct bt_bap_io_qos *qos)
{
- struct codec_qos *qos = &cfg->qos;
-
- bt_shell_printf("Framing 0x%02x\n", qos->framing);
-
- g_dbus_dict_append_entry(iter, "Framing", DBUS_TYPE_BYTE,
- &qos->framing);
-
- bt_shell_printf("PresentationDelay %u\n", qos->delay);
-
- g_dbus_dict_append_entry(iter, "PresentationDelay",
- DBUS_TYPE_UINT32, &qos->delay);
-
bt_shell_printf("Interval %u\n", qos->interval);

g_dbus_dict_append_entry(iter, "Interval", DBUS_TYPE_UINT32,
@@ -1902,18 +1771,18 @@ static void append_io_qos(DBusMessageIter *iter, struct endpoint_config *cfg)

bt_shell_printf("Retransmissions %u\n", qos->rtn);

- g_dbus_dict_append_entry(iter, "Retransmissions",
- DBUS_TYPE_BYTE, &qos->rtn);
+ g_dbus_dict_append_entry(iter, "Retransmissions", DBUS_TYPE_BYTE,
+ &qos->rtn);

bt_shell_printf("Latency %u\n", qos->latency);

- g_dbus_dict_append_entry(iter, "Latency",
- DBUS_TYPE_UINT16, &qos->latency);
+ g_dbus_dict_append_entry(iter, "Latency", DBUS_TYPE_UINT16,
+ &qos->latency);
}

static void append_ucast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
{
- struct codec_qos *qos = &cfg->qos;
+ struct bt_bap_ucast_qos *qos = &cfg->qos.ucast;

if (cfg->ep->iso_group != BT_ISO_QOS_GROUP_UNSET) {
bt_shell_printf("CIG 0x%2.2x\n", cfg->ep->iso_group);
@@ -1930,7 +1799,7 @@ static void append_ucast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
bt_shell_printf("Framing 0x%02x\n", qos->framing);

g_dbus_dict_append_entry(iter, "Framing", DBUS_TYPE_BYTE,
- &qos->framing);
+ &qos->framing);

bt_shell_printf("PresentationDelay %u\n", qos->delay);

@@ -1938,16 +1807,18 @@ static void append_ucast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
DBUS_TYPE_UINT32, &qos->delay);

if (cfg->target_latency) {
- bt_shell_printf("TargetLatency 0x%02x\n", cfg->target_latency);
- g_dbus_dict_append_entry(iter, "TargetLatency",
- DBUS_TYPE_BYTE, &cfg->target_latency);
+ bt_shell_printf("TargetLatency 0x%02x\n", qos->target_latency);
+ g_dbus_dict_append_entry(iter, "TargetLatency", DBUS_TYPE_BYTE,
+ &qos->target_latency);
}

- append_io_qos(iter, cfg);
+ append_io_qos(iter, &qos->io_qos);
}

static void append_bcast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
{
+ struct bt_bap_bcast_qos *qos = &cfg->qos.bcast;
+
if (cfg->ep->iso_group != BT_ISO_QOS_BIG_UNSET) {
bt_shell_printf("BIG 0x%2.2x\n", cfg->ep->iso_group);
g_dbus_dict_append_entry(iter, "BIG", DBUS_TYPE_BYTE,
@@ -2008,19 +1879,25 @@ static void append_bcast_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
cfg->ep->bcode->iov_len);
}

+ bt_shell_printf("Framing 0x%02x\n", qos->framing);
+
+ g_dbus_dict_append_entry(iter, "Framing", DBUS_TYPE_BYTE,
+ &qos->framing);
+
+ bt_shell_printf("PresentationDelay %u\n", qos->delay);
+
+ g_dbus_dict_append_entry(iter, "PresentationDelay",
+ DBUS_TYPE_UINT32, &qos->delay);
+
/* Add BAP codec QOS configuration */
- append_io_qos(iter, cfg);
+ append_io_qos(iter, &qos->io_qos);
}

static void append_qos(DBusMessageIter *iter, struct endpoint_config *cfg)
{
DBusMessageIter entry, var, dict;
- struct codec_qos *qos = &cfg->qos;
const char *key = "QoS";

- if (!qos)
- return;
-
dbus_message_iter_open_container(iter, DBUS_TYPE_DICT_ENTRY,
NULL, &entry);

@@ -2137,6 +2014,7 @@ static DBusMessage *endpoint_select_properties_reply(struct endpoint *ep,
DBusMessage *reply;
DBusMessageIter iter, props;
struct endpoint_config *cfg;
+ struct bt_bap_io_qos *qos;
uint32_t location = 0;
uint8_t channels = 1;

@@ -2169,14 +2047,19 @@ static DBusMessage *endpoint_select_properties_reply(struct endpoint *ep,
/* Copy metadata */
cfg->meta = util_iov_dup(ep->meta, 1);

- if (preset->qos.phy) {
+ if (ep->broadcast)
+ qos = &preset->qos.bcast.io_qos;
+ else
+ qos = &preset->qos.ucast.io_qos;
+
+ if (qos->phy) {
/* Set QoS parameters */
cfg->qos = preset->qos;
/* Adjust the SDU size based on the number of
* locations/channels that is being requested.
*/
if (channels > 1)
- cfg->qos.sdu *= channels;
+ qos->sdu *= channels;
}

dbus_message_iter_init_append(reply, &iter);
@@ -3871,10 +3754,14 @@ fail:
static void custom_delay(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ struct bt_bap_qos *qos = (void *)&p->qos;
char *endptr = NULL;

- qos->delay = strtol(input, &endptr, 0);
+ if (!p->target_latency)
+ qos->bcast.delay = strtol(input, &endptr, 0);
+ else
+ qos->ucast.delay = strtol(input, &endptr, 0);
+
if (!endptr || *endptr != '\0') {
bt_shell_printf("Invalid argument: %s\n", input);
return bt_shell_noninteractive_quit(EXIT_FAILURE);
@@ -3886,10 +3773,14 @@ static void custom_delay(const char *input, void *user_data)
static void custom_latency(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ struct bt_bap_qos *qos = (void *)&p->qos;
char *endptr = NULL;

- qos->latency = strtol(input, &endptr, 0);
+ if (!p->target_latency)
+ qos->bcast.io_qos.latency = strtol(input, &endptr, 0);
+ else
+ qos->ucast.io_qos.latency = strtol(input, &endptr, 0);
+
if (!endptr || *endptr != '\0') {
bt_shell_printf("Invalid argument: %s\n", input);
return bt_shell_noninteractive_quit(EXIT_FAILURE);
@@ -3902,10 +3793,14 @@ static void custom_latency(const char *input, void *user_data)
static void custom_rtn(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ struct bt_bap_qos *qos = (void *)&p->qos;
char *endptr = NULL;

- qos->rtn = strtol(input, &endptr, 0);
+ if (!p->target_latency)
+ qos->bcast.io_qos.rtn = strtol(input, &endptr, 0);
+ else
+ qos->ucast.io_qos.rtn = strtol(input, &endptr, 0);
+
if (!endptr || *endptr != '\0') {
bt_shell_printf("Invalid argument: %s\n", input);
return bt_shell_noninteractive_quit(EXIT_FAILURE);
@@ -3918,10 +3813,14 @@ static void custom_rtn(const char *input, void *user_data)
static void custom_sdu(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ struct bt_bap_qos *qos = (void *)&p->qos;
char *endptr = NULL;

- qos->sdu = strtol(input, &endptr, 0);
+ if (!p->target_latency)
+ qos->bcast.io_qos.sdu = strtol(input, &endptr, 0);
+ else
+ qos->ucast.io_qos.sdu = strtol(input, &endptr, 0);
+
if (!endptr || *endptr != '\0') {
bt_shell_printf("Invalid argument: %s\n", input);
return bt_shell_noninteractive_quit(EXIT_FAILURE);
@@ -3933,7 +3832,12 @@ static void custom_sdu(const char *input, void *user_data)
static void custom_phy(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ struct bt_bap_io_qos *qos;
+
+ if (!p->target_latency)
+ qos = &p->qos.bcast.io_qos;
+ else
+ qos = &p->qos.ucast.io_qos;

if (!strcmp(input, "1M"))
qos->phy = 0x01;
@@ -3965,16 +3869,21 @@ static void custom_phy(const char *input, void *user_data)
static void custom_framing(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
+ uint8_t *framing;
+
+ if (!p->target_latency)
+ framing = &p->qos.bcast.framing;
+ else
+ framing = &p->qos.ucast.framing;

if (!strcasecmp(input, "Unframed"))
- qos->framing = 0x00;
+ *framing = 0x00;
else if (!strcasecmp(input, "Framed"))
- qos->framing = 0x01;
+ *framing = 0x01;
else {
char *endptr = NULL;

- qos->framing = strtol(input, &endptr, 0);
+ *framing = strtol(input, &endptr, 0);
if (!endptr || *endptr != '\0') {
bt_shell_printf("Invalid argument: %s\n", input);
return bt_shell_noninteractive_quit(EXIT_FAILURE);
@@ -3988,8 +3897,13 @@ static void custom_framing(const char *input, void *user_data)
static void custom_interval(const char *input, void *user_data)
{
struct codec_preset *p = user_data;
- struct codec_qos *qos = (void *)&p->qos;
char *endptr = NULL;
+ struct bt_bap_io_qos *qos;
+
+ if (!p->target_latency)
+ qos = &p->qos.bcast.io_qos;
+ else
+ qos = &p->qos.ucast.io_qos;

qos->interval = strtol(input, &endptr, 0);
if (!endptr || *endptr != '\0') {
--
2.43.0


2024-03-13 20:37:06

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 2/6] client/player: Use macros from lc3.h to define presets

From: Luiz Augusto von Dentz <[email protected]>

This makes use of macros for for lc3.h to define preset configuration
and remove existing macros since they were just duplicates.
---
client/player.c | 294 ++++++++++++++----------------------------------
1 file changed, 82 insertions(+), 212 deletions(-)

diff --git a/client/player.c b/client/player.c
index cb771447bf4b..ab8cb7434cdc 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1337,48 +1337,6 @@ static struct codec_preset sbc_presets[] = {
#define LC3_10_FRAMED(_sdu, _rtn, _latency, _delay) \
QOS_FRAMED_2M(10000u, _sdu, _rtn, _latency, _delay)

-#define LC3_PRESET_DATA(_freq, _duration, _len) \
- UTIL_IOV_INIT(0x02, LC3_CONFIG_FREQ, _freq, \
- 0x02, LC3_CONFIG_DURATION, _duration, \
- 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
-
-#define LC3_PRESET_DATA_ALL(_freq, _duration, _alloc, _len) \
- UTIL_IOV_INIT(0x02, LC3_CONFIG_FREQ, _freq, \
- 0x02, LC3_CONFIG_DURATION, _duration, \
- 0x05, LC3_CONFIG_CHAN_ALLOC, _alloc, _alloc >> 8, \
- _alloc >> 16, _alloc >> 24, \
- 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
-
-#define LC3_PRESET_8KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_8KHZ, _duration, _len)
-
-#define LC3_PRESET_11KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_11KHZ, _duration, _len)
-
-#define LC3_PRESET_16KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_16KHZ, _duration, _len)
-
-#define LC3_PRESET_22KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_22KHZ, _duration, _len)
-
-#define LC3_PRESET_24KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_24KHZ, _duration, _len)
-
-#define LC3_PRESET_32KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_32KHZ, _duration, _len)
-
-#define LC3_PRESET_32KHZ_ALL(_duration, _len, _alloc) \
- LC3_PRESET_DATA_ALL(LC3_CONFIG_FREQ_48KHZ, _duration, _alloc, _len)
-
-#define LC3_PRESET_44KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_44KHZ, _duration, _len)
-
-#define LC3_PRESET_48KHZ(_duration, _len) \
- LC3_PRESET_DATA(LC3_CONFIG_FREQ_48KHZ, _duration, _len)
-
-#define LC3_PRESET_48KHZ_ALL(_duration, _len, _alloc) \
- LC3_PRESET_DATA_ALL(LC3_CONFIG_FREQ_48KHZ, _duration, _alloc, _len)
-
#define LC3_PRESET_LL(_name, _data, _qos) \
{ \
.name = _name, \
@@ -1405,163 +1363,107 @@ static struct codec_preset sbc_presets[] = {

static struct codec_preset lc3_ucast_presets[] = {
/* Table 4.43: QoS configuration support setting requirements */
- LC3_PRESET("8_1_1",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_PRESET("8_1_1", LC3_CONFIG_8_1,
LC3_7_5_UNFRAMED(26u, 2u, 8u, 40000u)),
- LC3_PRESET("8_2_1",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_PRESET("8_2_1", LC3_CONFIG_8_2,
LC3_10_UNFRAMED(30u, 2u, 10u, 40000u)),
- LC3_PRESET("16_1_1",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_PRESET("16_1_1", LC3_CONFIG_16_1,
LC3_7_5_UNFRAMED(30u, 2u, 8u, 40000u)),
- LC3_PRESET("16_2_1",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_PRESET("16_2_1", LC3_CONFIG_16_2,
LC3_10_UNFRAMED(40u, 2u, 10u, 40000u)),
- LC3_PRESET("24_1_1",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_PRESET("24_1_1", LC3_CONFIG_24_1,
LC3_7_5_UNFRAMED(45u, 2u, 8u, 40000u)),
- LC3_PRESET("24_2_1",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_PRESET("24_2_1", LC3_CONFIG_24_2,
LC3_10_UNFRAMED(60u, 2u, 10u, 40000u)),
- LC3_PRESET("32_1_1",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET("32_1_1", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 2u, 8u, 40000u)),
- LC3_PRESET("32_2_1",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET("32_2_1", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 2u, 10u, 40000u)),
- LC3_PRESET("44_1_1",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ LC3_PRESET("44_1_1", LC3_CONFIG_44_1,
QOS_FRAMED_2M(8163u, 98u, 5u, 24u, 40000u)),
- LC3_PRESET("44_2_1",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ LC3_PRESET("44_2_1", LC3_CONFIG_44_2,
QOS_FRAMED_2M(10884u, 130u, 5u, 31u, 40000u)),
- LC3_PRESET("48_1_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET("48_1_1", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 5u, 15u, 40000u)),
- LC3_PRESET("48_2_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET("48_2_1", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 5u, 20u, 40000u)),
- LC3_PRESET("48_3_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_PRESET("48_3_1", LC3_CONFIG_48_3,
LC3_7_5_UNFRAMED(90u, 5u, 15u, 40000u)),
- LC3_PRESET("48_4_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_PRESET("48_4_1", LC3_CONFIG_48_4,
LC3_10_UNFRAMED(120u, 5u, 20u, 40000u)),
- LC3_PRESET("48_5_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_PRESET("48_5_1", LC3_CONFIG_48_5,
LC3_7_5_UNFRAMED(117u, 5u, 15u, 40000u)),
- LC3_PRESET("48_6_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_PRESET("48_6_1", LC3_CONFIG_48_6,
LC3_10_UNFRAMED(155u, 5u, 20u, 40000u)),
/* QoS Configuration settings for high reliability audio data */
- LC3_PRESET_HR("8_1_2",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_PRESET_HR("8_1_2", LC3_CONFIG_8_1,
LC3_7_5_UNFRAMED(26u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("8_2_2",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_PRESET_HR("8_2_2", LC3_CONFIG_8_2,
LC3_10_UNFRAMED(30u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("16_1_2",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_PRESET_HR("16_1_2", LC3_CONFIG_16_1,
LC3_7_5_UNFRAMED(30u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("16_2_2",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_PRESET_HR("16_2_2", LC3_CONFIG_16_2,
LC3_10_UNFRAMED(40u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("24_1_2",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_PRESET_HR("24_1_2", LC3_CONFIG_24_1,
LC3_7_5_UNFRAMED(45u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("24_2_2",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_PRESET_HR("24_2_2", LC3_CONFIG_24_2,
LC3_10_UNFRAMED(60u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("32_1_2",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET_HR("32_1_2", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("32_2_2",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET_HR("32_2_2", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("44_1_2",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ LC3_PRESET_HR("44_1_2", LC3_CONFIG_44_1,
QOS_FRAMED_2M(8163u, 98u, 13u, 80u, 40000u)),
- LC3_PRESET_HR("44_2_2",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ LC3_PRESET_HR("44_2_2", LC3_CONFIG_44_2,
QOS_FRAMED_2M(10884u, 130u, 13u, 85u, 40000u)),
- LC3_PRESET_HR("48_1_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET_HR("48_1_2", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_2_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET_HR("48_2_2", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 13u, 95u, 40000u)),
- LC3_PRESET_HR("48_3_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_PRESET_HR("48_3_2", LC3_CONFIG_48_3,
LC3_7_5_UNFRAMED(90u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_4_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_PRESET_HR("48_4_2", LC3_CONFIG_48_4,
LC3_10_UNFRAMED(120u, 13u, 100u, 40000u)),
- LC3_PRESET_HR("48_5_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_PRESET_HR("48_5_2", LC3_CONFIG_48_5,
LC3_7_5_UNFRAMED(117u, 13u, 75u, 40000u)),
- LC3_PRESET_HR("48_6_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_PRESET_HR("48_6_2", LC3_CONFIG_48_6,
LC3_10_UNFRAMED(155u, 13u, 100u, 40000u)),
/* QoS configuration support setting requirements for the UGG and UGT */
- LC3_PRESET_LL("16_1_gs",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_PRESET_LL("16_1_gs", LC3_CONFIG_16_1,
LC3_7_5_UNFRAMED(30u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("16_2_gs",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_PRESET_LL("16_2_gs", LC3_CONFIG_16_2,
LC3_10_UNFRAMED(40u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("32_1_gs",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET_LL("32_1_gs", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("32_2_gs",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET_LL("32_2_gs", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("48_1_gs",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET_LL("48_1_gs", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 1u, 15u, 60000u)),
- LC3_PRESET_LL("48_2_gs",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET_LL("48_2_gs", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 1u, 20u, 60000u)),
- LC3_PRESET_LL("32_1_gr",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET_LL("32_1_gr", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("32_2_gr",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET_LL("32_2_gr", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_1_gr",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET_LL("48_1_gr", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_2_gr",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET_LL("48_2_gr", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_3_gr",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_PRESET_LL("48_3_gr", LC3_CONFIG_48_3,
LC3_7_5_UNFRAMED(90u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_4_gr",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_PRESET_LL("48_4_gr", LC3_CONFIG_48_4,
LC3_10_UNFRAMED(120u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("32_1_gr_l+r",
- LC3_PRESET_32KHZ_ALL(LC3_CONFIG_DURATION_7_5, 60u,
- 0x00000003),
+ LC3_PRESET_LL("32_1_gr_l+r", LC3_CONFIG_32_1_AC(2),
LC3_7_5_UNFRAMED(2 * 60u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("32_2_gr_l+r",
- LC3_PRESET_32KHZ_ALL(LC3_CONFIG_DURATION_10, 80u,
- 0x00000003),
+ LC3_PRESET_LL("32_2_gr_l+r", LC3_CONFIG_32_2_AC(2),
LC3_10_UNFRAMED(2 * 80u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_1_gr_l+r",
- LC3_PRESET_48KHZ_ALL(LC3_CONFIG_DURATION_7_5, 75u,
- 0x00000003),
+ LC3_PRESET_LL("48_1_gr_l+r", LC3_CONFIG_48_1_AC(2),
LC3_7_5_UNFRAMED(2 * 75u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_2_gr_l+r",
- LC3_PRESET_48KHZ_ALL(LC3_CONFIG_DURATION_10, 100u,
- 0x00000003),
+ LC3_PRESET_LL("48_2_gr_l+r", LC3_CONFIG_48_2_AC(2),
LC3_10_UNFRAMED(2 * 100u, 1u, 20u, 10000u)),
- LC3_PRESET_LL("48_3_gr_l+r",
- LC3_PRESET_48KHZ_ALL(LC3_CONFIG_DURATION_7_5, 90u,
- 0x00000003),
+ LC3_PRESET_LL("48_3_gr_l+r", LC3_CONFIG_48_3_AC(2),
LC3_7_5_UNFRAMED(2 * 90u, 1u, 15u, 10000u)),
- LC3_PRESET_LL("48_4_gr_l+r",
- LC3_PRESET_48KHZ_ALL(LC3_CONFIG_DURATION_10, 120u,
- 0x00000003),
+ LC3_PRESET_LL("48_4_gr_l+r", LC3_CONFIG_48_4_AC(2),
LC3_10_UNFRAMED(2 * 120u, 1u, 20u, 10000u)),
};

@@ -1569,104 +1471,72 @@ static struct codec_preset lc3_bcast_presets[] = {
/* Table 6.4: Broadcast Audio Stream configuration support requirements
* for the Broadcast Source and Broadcast Sink
*/
- LC3_PRESET("8_1_1",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_PRESET("8_1_1", LC3_CONFIG_8_1,
LC3_7_5_UNFRAMED(26u, 2u, 8u, 40000u)),
- LC3_PRESET("8_2_1",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_PRESET("8_2_1", LC3_CONFIG_8_2,
LC3_10_UNFRAMED(30u, 2u, 10u, 40000u)),
- LC3_PRESET("16_1_1",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_PRESET("16_1_1", LC3_CONFIG_16_1,
LC3_7_5_UNFRAMED(30u, 2u, 8u, 40000u)),
- LC3_PRESET("16_2_1",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_PRESET("16_2_1", LC3_CONFIG_16_2,
LC3_10_UNFRAMED(40u, 2u, 10u, 40000u)),
- LC3_PRESET("24_1_1",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_PRESET("24_1_1", LC3_CONFIG_24_1,
LC3_7_5_UNFRAMED(45u, 2u, 8u, 40000u)),
- LC3_PRESET("24_2_1",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_PRESET("24_2_1", LC3_CONFIG_24_2,
LC3_10_UNFRAMED(60u, 2u, 10u, 40000u)),
- LC3_PRESET("32_1_1",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET("32_1_1", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 2u, 8u, 40000u)),
- LC3_PRESET("32_2_1",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET("32_2_1", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 2u, 10u, 40000u)),
- LC3_PRESET("44_1_1",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ LC3_PRESET("44_1_1", LC3_CONFIG_44_1,
QOS_FRAMED_2M(8163u, 98u, 4u, 24u, 40000u)),
- LC3_PRESET("44_2_1",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ LC3_PRESET("44_2_1", LC3_CONFIG_44_2,
QOS_FRAMED_2M(10884u, 130u, 4u, 31u, 40000u)),
- LC3_PRESET("48_1_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET("48_1_1", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 4u, 15u, 40000u)),
- LC3_PRESET("48_2_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET("48_2_1", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 4u, 20u, 40000u)),
- LC3_PRESET("48_3_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_PRESET("48_3_1", LC3_CONFIG_48_3,
LC3_7_5_UNFRAMED(90u, 4u, 15u, 40000u)),
- LC3_PRESET("48_4_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_PRESET("48_4_1", LC3_CONFIG_48_4,
LC3_10_UNFRAMED(120u, 4u, 20u, 40000u)),
- LC3_PRESET("48_5_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_PRESET("48_5_1", LC3_CONFIG_48_5,
LC3_7_5_UNFRAMED(117u, 4u, 15u, 40000u)),
- LC3_PRESET("48_6_1",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_PRESET("48_6_1", LC3_CONFIG_48_6,
LC3_10_UNFRAMED(155u, 4u, 20u, 40000u)),
/* Broadcast Audio Stream configuration settings for high-reliability
* audio data.
*/
- LC3_PRESET_HR("8_1_2",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_7_5, 26u),
+ LC3_PRESET_HR("8_1_2", LC3_CONFIG_8_1,
LC3_7_5_UNFRAMED(26u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("8_2_2",
- LC3_PRESET_8KHZ(LC3_CONFIG_DURATION_10, 30u),
+ LC3_PRESET_HR("8_2_2", LC3_CONFIG_8_2,
LC3_10_UNFRAMED(30u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("16_1_2",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_7_5, 30u),
+ LC3_PRESET_HR("16_1_2", LC3_CONFIG_16_1,
LC3_7_5_UNFRAMED(30u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("16_2_2",
- LC3_PRESET_16KHZ(LC3_CONFIG_DURATION_10, 40u),
+ LC3_PRESET_HR("16_2_2", LC3_CONFIG_16_2,
LC3_10_UNFRAMED(40u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("24_1_2",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_7_5, 45u),
+ LC3_PRESET_HR("24_1_2", LC3_CONFIG_24_1,
LC3_7_5_UNFRAMED(45u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("24_2_2",
- LC3_PRESET_24KHZ(LC3_CONFIG_DURATION_10, 60u),
+ LC3_PRESET_HR("24_2_2", LC3_CONFIG_24_2,
LC3_10_UNFRAMED(60u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("32_1_2",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_7_5, 60u),
+ LC3_PRESET_HR("32_1_2", LC3_CONFIG_32_1,
LC3_7_5_UNFRAMED(60u, 4u, 45u, 40000u)),
- LC3_PRESET_HR("32_2_2",
- LC3_PRESET_32KHZ(LC3_CONFIG_DURATION_10, 80u),
+ LC3_PRESET_HR("32_2_2", LC3_CONFIG_32_2,
LC3_10_UNFRAMED(80u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("44_1_2",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_7_5, 98u),
+ LC3_PRESET_HR("44_1_2", LC3_CONFIG_44_1,
QOS_FRAMED_2M(8163u, 4u, 13u, 54u, 40000u)),
- LC3_PRESET_HR("44_2_2",
- LC3_PRESET_44KHZ(LC3_CONFIG_DURATION_10, 130u),
+ LC3_PRESET_HR("44_2_2", LC3_CONFIG_44_2,
QOS_FRAMED_2M(10884u, 130u, 4u, 60u, 40000u)),
- LC3_PRESET_HR("48_1_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 75u),
+ LC3_PRESET_HR("48_1_2", LC3_CONFIG_48_1,
LC3_7_5_UNFRAMED(75u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_2_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 100u),
+ LC3_PRESET_HR("48_2_2", LC3_CONFIG_48_2,
LC3_10_UNFRAMED(100u, 4u, 65u, 40000u)),
- LC3_PRESET_HR("48_3_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 90u),
+ LC3_PRESET_HR("48_3_2", LC3_CONFIG_48_3,
LC3_7_5_UNFRAMED(90u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_4_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 120u),
+ LC3_PRESET_HR("48_4_2", LC3_CONFIG_48_4,
LC3_10_UNFRAMED(120u, 4u, 65u, 40000u)),
- LC3_PRESET_HR("48_5_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_7_5, 117u),
+ LC3_PRESET_HR("48_5_2", LC3_CONFIG_48_5,
LC3_7_5_UNFRAMED(117u, 4u, 50u, 40000u)),
- LC3_PRESET_HR("48_6_2",
- LC3_PRESET_48KHZ(LC3_CONFIG_DURATION_10, 155u),
+ LC3_PRESET_HR("48_6_2", LC3_CONFIG_48_6,
LC3_10_UNFRAMED(155u, 4u, 65u, 40000u)),
};

--
2.43.0


2024-03-13 20:37:17

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v4 6/6] bap: Add proper default for broadcast setup

From: Luiz Augusto von Dentz <[email protected]>

This adds proper default for broadcast setup so it doesn't fail to
create the socket due to users not setting them.
---
profiles/audio/bap.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index 1034202cb8a0..964ba9c212e8 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -841,6 +841,9 @@ static struct bap_setup *setup_new(struct bap_ep *ep)
/* Mark BIG and BIS to be auto assigned */
setup->qos.bcast.big = BT_ISO_QOS_BIG_UNSET;
setup->qos.bcast.bis = BT_ISO_QOS_BIS_UNSET;
+ setup->qos.bcast.sync_factor = 0x01;
+ setup->qos.bcast.sync_timeout = BT_ISO_SYNC_TIMEOUT;
+ setup->qos.bcast.timeout = BT_ISO_SYNC_TIMEOUT;
setup->qos_parser = setup_parse_bcast_qos;
setup->destroy = setup_bcast_destroy;
} else {
--
2.43.0


2024-03-13 21:00:39

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ v4 1/6] client/player: Split unicast and broadcast presets

Hello:

This series was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Wed, 13 Mar 2024 15:43:55 -0400 you wrote:
> From: Luiz Augusto von Dentz <[email protected]>
>
> Although their name matches unicast and broadcast are not actually the
> same when it comes to RTN and Max Latency, so this splits their settings
> into 2 presets tables and fix the values for broadcast.
> ---
> client/player.c | 115 +++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 110 insertions(+), 5 deletions(-)

Here is the summary with links:
- [BlueZ,v4,1/6] client/player: Split unicast and broadcast presets
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=e35f4583421c
- [BlueZ,v4,2/6] client/player: Use macros from lc3.h to define presets
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=cae922c63bd5
- [BlueZ,v4,3/6] shared/lc3: Add definition for broadcast configurations
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=47df60e8b21e
- [BlueZ,v4,4/6] client/player: Use QOS macros from lc3.h to define presets
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=25f42cfc4653
- [BlueZ,v4,5/6] client/player: Cleanup broadcast QoS
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=3ad367874630
- [BlueZ,v4,6/6] bap: Add proper default for broadcast setup
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=fffa21d084ec

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



2024-03-13 23:49:20

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,v4,1/6] client/player: Split unicast and broadcast presets

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=835083

---Test result---

Test Summary:
CheckPatch FAIL 3.38 seconds
GitLint PASS 1.83 seconds
BuildEll PASS 23.98 seconds
BluezMake PASS 1660.39 seconds
MakeCheck FAIL 10.88 seconds
MakeDistcheck FAIL 35.22 seconds
CheckValgrind FAIL 235.36 seconds
CheckSmatch PASS 347.04 seconds
bluezmakeextell PASS 117.92 seconds
IncrementalBuild PASS 9486.44 seconds
ScanBuild PASS 970.81 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
[BlueZ,v4,2/6] client/player: Use macros from lc3.h to define presets
WARNING:REPEATED_WORD: Possible repeated word: 'for'
#97:
This makes use of macros for for lc3.h to define preset configuration

/github/workspace/src/src/13591851.patch total: 0 errors, 1 warnings, 397 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/src/13591851.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


[BlueZ,v4,3/6] shared/lc3: Add definition for broadcast configurations
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#126: FILE: src/shared/bap-defs.h:15:
+#define __packed __attribute__((packed))

/github/workspace/src/src/13591852.patch total: 0 errors, 1 warnings, 853 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/src/13591852.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


[BlueZ,v4,4/6] client/player: Use QOS macros from lc3.h to define presets
WARNING:REPEATED_WORD: Possible repeated word: 'for'
#97:
This makes use of QOS macros for for lc3.h to define preset

/github/workspace/src/src/13591854.patch total: 0 errors, 1 warnings, 597 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/src/13591854.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: MakeCheck - FAIL
Desc: Run Bluez Make Check
Output:

./test-driver: line 107: 31957 Aborted (core dumped) "$@" > $log_file 2>&1
make[3]: *** [Makefile:11642: test-suite.log] Error 1
make[2]: *** [Makefile:11750: check-TESTS] Error 2
make[1]: *** [Makefile:12179: check-am] Error 2
make: *** [Makefile:12181: check] Error 2
##############################
Test: MakeDistcheck - FAIL
Desc: Run Bluez Make Distcheck
Output:

Package cups was not found in the pkg-config search path.
Perhaps you should add the directory containing `cups.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cups' found
In file included from ../../src/shared/bap.c:30:
../../src/shared/bap.h:13:10: fatal error: src/shared/bap-defs.h: No such file or directory
13 | #include "src/shared/bap-defs.h"
| ^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:8570: src/shared/libshared_mainloop_la-bap.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:4646: all] Error 2
make: *** [Makefile:12102: distcheck] Error 1
##############################
Test: CheckValgrind - FAIL
Desc: Run Bluez Make Check with Valgrind
Output:

tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12721:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12721 | int main(int argc, char *argv[])
| ^~~~
./test-driver: line 107: 62248 Aborted (core dumped) "$@" > $log_file 2>&1
make[3]: *** [Makefile:11642: test-suite.log] Error 1
make[2]: *** [Makefile:11750: check-TESTS] Error 2
make[1]: *** [Makefile:12179: check-am] Error 2
make: *** [Makefile:12181: check] Error 2


---
Regards,
Linux Bluetooth