diff mbox series

[BlueZ,v2,1/2] shared/lc3: Add definitions for Audio Configurations

Message ID 20240306230440.3983598-1-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ,v2,1/2] shared/lc3: Add definitions for Audio Configurations | expand

Commit Message

Luiz Augusto von Dentz March 6, 2024, 11:04 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds defines for Audio Configurations so it can be used for
upcoming tests.
---
 src/shared/lc3.h | 482 +++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 401 insertions(+), 81 deletions(-)
diff mbox series

Patch

diff --git a/src/shared/lc3.h b/src/shared/lc3.h
index e0b2cdfc346d..41b29d4d1c8f 100644
--- a/src/shared/lc3.h
+++ b/src/shared/lc3.h
@@ -88,77 +88,200 @@ 
 			0x02, LC3_CONFIG_DURATION, _duration, \
 			0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8)
 
+#define LC3_AC_BITS(_ac) (BIT(_ac) - 1)
+
+#define LC3_CONFIG_AC(_freq, _duration, _len, _ac) \
+	UTIL_IOV_INIT(0x02, LC3_CONFIG_FREQ, _freq, \
+			0x02, LC3_CONFIG_DURATION, _duration, \
+			0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8, \
+			0x05, LC3_CONFIG_CHAN_ALLOC, LC3_AC_BITS(_ac), \
+			LC3_AC_BITS(_ac) >> 8 & 0xff, \
+			LC3_AC_BITS(_ac) >> 16 & 0xff, \
+			LC3_AC_BITS(_ac) >> 24 & 0xff)
+
 #define LC3_CONFIG_8(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_8KHZ, _duration, _len)
 
+#define LC3_CONFIG_8_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_8KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_11(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_11KHZ, _duration, _len)
 
+#define LC3_CONFIG_11_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_11KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_16(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_16KHZ, _duration, _len)
 
+#define LC3_CONFIG_16_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_16KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_22(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_22KHZ, _duration, _len)
 
+#define LC3_CONFIG_22_AC(_duration, _len) \
+	LC3_CONFIG(LC3_CONFIG_FREQ_22KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_24(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_24KHZ, _duration, _len)
 
+#define LC3_CONFIG_24_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_24KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_32(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_32KHZ, _duration, _len)
 
+#define LC3_CONFIG_32_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_32KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_44(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_44KHZ, _duration, _len)
 
+#define LC3_CONFIG_44_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_44KHZ, _duration, _len, _ac)
+
 #define LC3_CONFIG_48(_duration, _len) \
 	LC3_CONFIG(LC3_CONFIG_FREQ_48KHZ, _duration, _len)
 
+#define LC3_CONFIG_48_AC(_duration, _len, _ac) \
+	LC3_CONFIG_AC(LC3_CONFIG_FREQ_48KHZ, _duration, _len, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_8_1 26u
+
 #define LC3_CONFIG_8_1 \
-	LC3_CONFIG_8(LC3_CONFIG_DURATION_7_5, 26u)
+	LC3_CONFIG_8(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_8_1)
+
+#define LC3_CONFIG_8_1_AC(_ac) \
+	LC3_CONFIG_8_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_8_1, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_8_2 30u
 
 #define LC3_CONFIG_8_2 \
-	LC3_CONFIG_8(LC3_CONFIG_DURATION_10, 30u)
+	LC3_CONFIG_8(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_8_2 )
+
+#define LC3_CONFIG_8_2_AC(_ac) \
+	LC3_CONFIG_8_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_8_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_16_1 30u
 
 #define LC3_CONFIG_16_1 \
-	LC3_CONFIG_16(LC3_CONFIG_DURATION_7_5, 30u)
+	LC3_CONFIG_16(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_16_1)
+
+#define LC3_CONFIG_16_1_AC(_ac) \
+	LC3_CONFIG_16_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_16_1, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_16_2 40u
 
 #define LC3_CONFIG_16_2 \
-	LC3_CONFIG_16(LC3_CONFIG_DURATION_10, 40u)
+	LC3_CONFIG_16(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_16_2)
+
+#define LC3_CONFIG_16_2_AC(_ac) \
+	LC3_CONFIG_16_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_16_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_24_1 45u
 
 #define LC3_CONFIG_24_1 \
-	LC3_CONFIG_24(LC3_CONFIG_DURATION_7_5, 45u)
+	LC3_CONFIG_24(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_24_1)
+
+#define LC3_CONFIG_24_1_AC(_ac) \
+	LC3_CONFIG_24_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_24_1, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_24_2 60u
 
 #define LC3_CONFIG_24_2 \
-	LC3_CONFIG_24(LC3_CONFIG_DURATION_10, 60u)
+	LC3_CONFIG_24(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_24_2)
+
+#define LC3_CONFIG_24_2_AC(_ac) \
+	LC3_CONFIG_24_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_24_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_32_1 60u
 
 #define LC3_CONFIG_32_1 \
-	LC3_CONFIG_32(LC3_CONFIG_DURATION_7_5, 60u)
+	LC3_CONFIG_32(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_32_1)
+
+#define LC3_CONFIG_32_1_AC(_ac) \
+	LC3_CONFIG_32_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_32_1, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_32_2 80u
 
 #define LC3_CONFIG_32_2 \
-	LC3_CONFIG_32(LC3_CONFIG_DURATION_10, 80u)
+	LC3_CONFIG_32(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_32_2)
+
+#define LC3_CONFIG_32_2_AC(_ac) \
+	LC3_CONFIG_32_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_32_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_44_1 98u
 
 #define LC3_CONFIG_44_1 \
-	LC3_CONFIG_44(LC3_CONFIG_DURATION_7_5, 98u)
+	LC3_CONFIG_44(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_44_1)
+
+#define LC3_CONFIG_44_1_AC(_ac) \
+	LC3_CONFIG_44_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_44_1, \
+			 _ac)
+
+#define LC3_CONFIG_FRAME_LEN_44_2 130u
 
 #define LC3_CONFIG_44_2 \
-	LC3_CONFIG_44(LC3_CONFIG_DURATION_10, 130u)
+	LC3_CONFIG_44(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_44_2)
+
+#define LC3_CONFIG_44_2_AC(_ac) \
+	LC3_CONFIG_44_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_44_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_1 75u
 
 #define LC3_CONFIG_48_1 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 75u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_1)
+
+#define LC3_CONFIG_48_1_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_1, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_2 100u
 
 #define LC3_CONFIG_48_2 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 100u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_2)
+
+#define LC3_CONFIG_48_2_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_2, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_3 90u
 
 #define LC3_CONFIG_48_3 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 90u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_3)
+
+#define LC3_CONFIG_48_3_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_3, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_4 120u
 
 #define LC3_CONFIG_48_4 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 120u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_4)
+
+#define LC3_CONFIG_48_4_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_4, _ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_5 117u
 
 #define LC3_CONFIG_48_5 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 117u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_5)
+
+#define LC3_CONFIG_48_5_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_7_5, LC3_CONFIG_FRAME_LEN_48_5, \
+			_ac)
+
+#define LC3_CONFIG_FRAME_LEN_48_6 155u
 
 #define LC3_CONFIG_48_6 \
-	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 155u)
+	LC3_CONFIG_48(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_6)
+
+#define LC3_CONFIG_48_6_AC(_ac) \
+	LC3_CONFIG_48_AC(LC3_CONFIG_DURATION_10, LC3_CONFIG_FRAME_LEN_48_6, \
+			_ac)
 
 #define LC3_QOS_UNFRAMED	0x00
 #define LC3_QOS_FRAMED		0x01
@@ -185,130 +308,327 @@ 
 #define LC3_QOS_UCAST_FRAMED(_pd, _t_lat, _interval, _lat, _sdu, _rtn) \
 	LC3_QOS_UCAST(LC3_QOS_FRAMED, _pd, _t_lat, _interval, _lat, _sdu, _rtn)
 
-#define LC3_QOS_8_1_1 \
+#define LC3_QOS_8_1_1_LATENCY 8u
+#define LC3_QOS_8_1_1_RTN 2u
+
+#define LC3_QOS_8_1_1_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					8u, 26u, 2u)
+					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 LC3_QOS_8_1_1_AC(1)
 
-#define LC3_QOS_8_1_2 \
+#define LC3_QOS_8_1_2_LATENCY 75u
+#define LC3_QOS_8_1_2_RTN 13u
+
+#define LC3_QOS_8_1_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 26u, 13u)
+					LC3_QOS_8_1_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_8_2_1 \
+#define LC3_QOS_8_2_1_LATENCY 10u
+#define LC3_QOS_8_2_1_RTN 2u
+
+#define LC3_QOS_8_2_1_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					10u, 30u, 2u)
+					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 LC3_QOS_8_2_1_AC(1)
 
-#define LC3_QOS_8_2_2 \
+#define LC3_QOS_8_2_2_LATENCY 95u
+#define LC3_QOS_8_2_2_RTN 13u
+
+#define LC3_QOS_8_2_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					95u, 30u, 13u)
+					LC3_QOS_8_2_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_16_1_1 \
+#define LC3_QOS_16_1_1_LATENCY 8u
+#define LC3_QOS_16_1_1_RTN 2u
+
+#define LC3_QOS_16_1_1_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					8u, 30u, 2u)
+					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 LC3_QOS_16_1_1_AC(1)
 
-#define LC3_QOS_16_1_2 \
+#define LC3_QOS_16_1_2_LATENCY 75u
+#define LC3_QOS_16_1_2_RTN 13u
+
+#define LC3_QOS_16_1_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 30u, 13u)
+					LC3_QOS_16_1_2_LATENCY, \
+					_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_2_1 \
+#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, \
-					10u, 40u, 2u)
+					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 LC3_QOS_16_2_1_AC(1)
 
-#define LC3_QOS_16_2_2 \
+#define LC3_QOS_16_2_2_LATENCY 95u
+#define LC3_QOS_16_2_2_RTN 13u
+
+#define LC3_QOS_16_2_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					95u, 40u, 13u)
+					LC3_QOS_16_2_2_LATENCY, \
+					_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_24_1_1 \
+#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, \
-					8u, 45u, 2u)
+					LC3_QOS_24_1_1_LATENCY, \
+					_ac * LC3_CONFIG_FRAME_LEN_24_1, 2u)
+#define LC3_QOS_24_1_1 LC3_QOS_24_1_1_AC(1)
 
-#define LC3_QOS_24_1_2 \
+#define LC3_QOS_24_1_2_LATENCY 75u
+#define LC3_QOS_24_1_2_RTN 13u
+
+#define LC3_QOS_24_1_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 45u, 13u)
+					LC3_QOS_24_1_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_24_2_1 \
+#define LC3_QOS_24_2_1_LATENCY 10u
+#define LC3_QOS_24_2_1_RTN 2u
+
+#define LC3_QOS_24_2_1_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					10u, 60u, 2u)
+					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 LC3_QOS_24_2_1_AC(1)
 
-#define LC3_QOS_24_2_2 \
+#define LC3_QOS_24_2_2_LATENCY 95u
+#define LC3_QOS_24_2_2_RTN 13u
+
+#define LC3_QOS_24_2_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					95u, 60u, 13u)
+					LC3_QOS_24_2_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_32_1_1 \
+#define LC3_QOS_32_1_1_LATENCY 8u
+#define LC3_QOS_32_1_1_RTN 2u
+
+#define LC3_QOS_32_1_1_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					8u, 60u, 2u)
+					LC3_QOS_32_1_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_32_1_2 \
+#define LC3_QOS_32_1_2_LATENCY 75u
+#define LC3_QOS_32_1_2_RTN 13u
+
+#define LC3_QOS_32_1_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 60u, 13u)
+					LC3_QOS_32_1_2_LATENCY, \
+					_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_2_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, \
-					10u, 80u, 2u)
+					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 LC3_QOS_32_2_1_AC(1)
 
-#define LC3_QOS_32_2_2 \
+#define LC3_QOS_32_2_2_LATENCY 95u
+#define LC3_QOS_32_2_2_RTN 13u
+
+#define LC3_QOS_32_2_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					95u, 80u, 13u)
+					LC3_QOS_32_2_2_LATENCY, \
+					_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_44_1_1 \
+#define LC3_QOS_44_1_INTERVAL 8163u
+#define LC3_QOS_44_1_1_LATENCY 24u
+#define LC3_QOS_44_1_1_RTN 5u
+
+#define LC3_QOS_44_1_1_AC(_ac) \
 	LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					8163u, 24u, 98u, 5u)
+					LC3_QOS_44_1_INTERVAL, \
+					LC3_QOS_44_1_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_44_1_2 \
+#define LC3_QOS_44_1_2_LATENCY 80u
+#define LC3_QOS_44_1_2_RTN 13u
+
+#define LC3_QOS_44_1_2_AC(_ac) \
 	LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					8163u, 80u, 98u, 13u)
+					LC3_QOS_44_1_INTERVAL, \
+					LC3_QOS_44_1_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_44_2_1 \
+#define LC3_QOS_44_2_INTERVAL 10884u
+#define LC3_QOS_44_2_1_LATENCY 31u
+#define LC3_QOS_44_2_1_RTN 5u
+
+#define LC3_QOS_44_2_1_AC(_ac) \
 	LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					10884u, 31u, 130u, 5u)
+					LC3_QOS_44_2_INTERVAL, \
+					LC3_QOS_44_2_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_44_2_2 \
+#define LC3_QOS_44_2_2_LATENCY 85u
+#define LC3_QOS_44_2_2_RTN 13u
+
+#define LC3_QOS_44_2_2_AC(_ac) \
 	LC3_QOS_UCAST_FRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					10884u, 85u, 130u, 13u)
+					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 LC3_QOS_44_2_2_AC(1)
 
-#define LC3_QOS_48_1_1 \
+#define LC3_QOS_48_1_1_LATENCY 15u
+#define LC3_QOS_48_1_1_RTN 5u
+
+#define LC3_QOS_48_1_1_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					15u, 75u, 5u)
+					LC3_QOS_48_1_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_1_2 \
+#define LC3_QOS_48_1_2_LATENCY 75u
+#define LC3_QOS_48_1_2_RTN 13u
+
+#define LC3_QOS_48_1_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 75u, 13u)
+					LC3_QOS_48_1_2_LATENCY, \
+					_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_2_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, \
-					20u, 100u, 5u)
+					LC3_QOS_48_2_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_2_2 \
+#define LC3_QOS_48_2_2_LATENCY 95u
+#define LC3_QOS_48_2_2_RTN 13u
+
+#define LC3_QOS_48_2_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					95u, 100u, 13u)
+					LC3_QOS_48_2_2_LATENCY, \
+					_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_3_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, \
-					15u, 90u, 5u)
+					LC3_QOS_48_3_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_3_2 \
+#define LC3_QOS_48_3_2_LATENCY 75u
+#define LC3_QOS_48_3_2_RTN 13u
+
+#define LC3_QOS_48_3_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 90u, 13u)
+					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 LC3_QOS_48_3_2_AC(1)
 
-#define LC3_QOS_48_4_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, \
-					20u, 120u, 5u)
+					LC3_QOS_48_4_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_4_2 \
+#define LC3_QOS_48_4_2_LATENCY 100u
+#define LC3_QOS_48_4_2_RTN 13u
+
+#define LC3_QOS_48_4_2_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					100u, 120u, 13u)
+					LC3_QOS_48_4_2_LATENCY, \
+					_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_5_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, \
-					15u, 117u, 5u)
+					LC3_QOS_48_5_1_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_5_2 \
+#define LC3_QOS_48_5_2_LATENCY 75u
+#define LC3_QOS_48_5_2_RTN 13u
+
+#define LC3_QOS_48_5_2_AC(_ac) \
 	LC3_QOS_UCAST_7_5_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					75u, 117u, 13u)
+					LC3_QOS_48_5_2_LATENCY, \
+					_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)
 
-#define LC3_QOS_48_6_1 \
-	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					20u, 155u, 5u)
+#define LC3_QOS_48_6_1_LATENCY 20u
+#define LC3_QOS_48_6_1_RTN 5u
 
-#define LC3_QOS_48_6_2 \
+#define LC3_QOS_48_6_1_AC(_ac) \
 	LC3_QOS_UCAST_10_UNFRAMED(40000u, BT_BAP_CONFIG_LATENCY_BALANCED, \
-					100u, 155u, 13u)
+					LC3_QOS_48_6_1_LATENCY, \
+					_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)
+
+#define LC3_QOS_48_6_2_LATENCY 100u
+#define LC3_QOS_48_6_2_RTN 13u
+
+#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, \
+					LC3_QOS_48_6_2_RTN)
+#define LC3_QOS_48_6_2 LC3_QOS_48_6_2_AC(1)