Zephyr API Documentation  3.6.0
A Scalable Open Source RTOS
3.6.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
lc3.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2020 Intel Corporation
7 * Copyright (c) 2022 Nordic Semiconductor ASA
8 *
9 * SPDX-License-Identifier: Apache-2.0
10 */
11#ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
12#define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
13
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
34/* COND_CODE_1 is used to omit an LTV entry in case the _frames_per_sdu is 1.
35 * COND_CODE_1 will evaluate to second argument if the flag parameter(first argument) is 1
36 * - removing one layer of paranteses.
37 * If the flags argument is != 1 it will evaluate to the third argument which inserts a LTV
38 * entry for the max_frames_per_sdu value.
39 */
40
41#define BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max, \
42 _max_frames_per_sdu) \
43 { \
44 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FREQ, BT_BYTES_LIST_LE16(_freq)), \
45 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_DURATION, (_duration)), \
46 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_CHAN_COUNT, (_chan_count)), \
47 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FRAME_LEN, \
48 BT_BYTES_LIST_LE16(_len_min), \
49 BT_BYTES_LIST_LE16(_len_max)), \
50 COND_CODE_1(_max_frames_per_sdu, (), \
51 (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FRAME_COUNT, \
52 (_max_frames_per_sdu)))) \
53 }
54
58#define BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context) \
59 { \
60 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_PREF_CONTEXT, \
61 BT_BYTES_LIST_LE16(_prefer_context)) \
62 }
63
76#define BT_AUDIO_CODEC_CAP_LC3(_freq, _duration, _chan_count, _len_min, _len_max, \
77 _max_frames_per_sdu, _prefer_context) \
78 BT_AUDIO_CODEC_CAP(BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000, \
79 BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min, \
80 _len_max, _max_frames_per_sdu), \
81 BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context))
82
93#define BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu) \
94 { \
95 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FREQ, (_freq)), \
96 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_DURATION, (_duration)), \
97 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_CHAN_ALLOC, BT_BYTES_LIST_LE32(_loc)), \
98 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FRAME_LEN, BT_BYTES_LIST_LE16(_len)), \
99 COND_CODE_1(_frames_per_sdu, (), \
100 (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FRAME_BLKS_PER_SDU, \
101 (_frames_per_sdu)))) \
102 }
103
107#define BT_AUDIO_CODEC_CFG_LC3_META(_stream_context) \
108 { \
109 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_STREAM_CONTEXT, \
110 BT_BYTES_LIST_LE16(_stream_context)) \
111 }
112
123#define BT_AUDIO_CODEC_LC3_CONFIG(_freq, _duration, _loc, _len, _frames_per_sdu, _stream_context) \
124 BT_AUDIO_CODEC_CFG( \
125 BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000, \
126 BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu), \
127 BT_AUDIO_CODEC_CFG_LC3_META(_stream_context))
128
135#define BT_AUDIO_CODEC_LC3_CONFIG_8_1(_loc, _stream_context) \
136 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_8KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
137 _loc, 26u, 1, _stream_context)
144#define BT_AUDIO_CODEC_LC3_CONFIG_8_2(_loc, _stream_context) \
145 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_8KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
146 _loc, 30u, 1, _stream_context)
153#define BT_AUDIO_CODEC_LC3_CONFIG_16_1(_loc, _stream_context) \
154 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_16KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
155 _loc, 30u, 1, _stream_context)
162#define BT_AUDIO_CODEC_LC3_CONFIG_16_2(_loc, _stream_context) \
163 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_16KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
164 _loc, 40u, 1, _stream_context)
165
172#define BT_AUDIO_CODEC_LC3_CONFIG_24_1(_loc, _stream_context) \
173 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_24KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
174 _loc, 45u, 1, _stream_context)
181#define BT_AUDIO_CODEC_LC3_CONFIG_24_2(_loc, _stream_context) \
182 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_24KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
183 _loc, 60u, 1, _stream_context)
190#define BT_AUDIO_CODEC_LC3_CONFIG_32_1(_loc, _stream_context) \
191 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
192 _loc, 60u, 1, _stream_context)
199#define BT_AUDIO_CODEC_LC3_CONFIG_32_2(_loc, _stream_context) \
200 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
201 _loc, 80u, 1, _stream_context)
208#define BT_AUDIO_CODEC_LC3_CONFIG_441_1(_loc, _stream_context) \
209 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_44KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
210 _loc, 98u, 1, _stream_context)
217#define BT_AUDIO_CODEC_LC3_CONFIG_441_2(_loc, _stream_context) \
218 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_44KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
219 _loc, 130u, 1, _stream_context)
226#define BT_AUDIO_CODEC_LC3_CONFIG_48_1(_loc, _stream_context) \
227 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
228 _loc, 75u, 1, _stream_context)
235#define BT_AUDIO_CODEC_LC3_CONFIG_48_2(_loc, _stream_context) \
236 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
237 _loc, 100u, 1, _stream_context)
244#define BT_AUDIO_CODEC_LC3_CONFIG_48_3(_loc, _stream_context) \
245 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
246 _loc, 90u, 1, _stream_context)
253#define BT_AUDIO_CODEC_LC3_CONFIG_48_4(_loc, _stream_context) \
254 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
255 _loc, 120u, 1, _stream_context)
262#define BT_AUDIO_CODEC_LC3_CONFIG_48_5(_loc, _stream_context) \
263 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_7_5, \
264 _loc, 117u, 1, _stream_context)
271#define BT_AUDIO_CODEC_LC3_CONFIG_48_6(_loc, _stream_context) \
272 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, BT_AUDIO_CODEC_CFG_DURATION_10, \
273 _loc, 155u, 1, _stream_context)
277#define BT_AUDIO_CODEC_LC3_QOS_7_5(_framing, _sdu, _rtn, _latency, _pd) \
278 BT_AUDIO_CODEC_QOS(7500u, _framing, BT_AUDIO_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
282#define BT_AUDIO_CODEC_LC3_QOS_7_5_UNFRAMED(_sdu, _rtn, _latency, _pd) \
283 BT_AUDIO_CODEC_QOS_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
287#define BT_AUDIO_CODEC_LC3_QOS_10(_framing, _sdu, _rtn, _latency, _pd) \
288 BT_AUDIO_CODEC_QOS(10000u, _framing, BT_AUDIO_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
292#define BT_AUDIO_CODEC_LC3_QOS_10_UNFRAMED(_sdu, _rtn, _latency, _pd) \
293 BT_AUDIO_CODEC_QOS_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
294
295#ifdef __cplusplus
296}
297#endif
298
303#endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_ */
Bluetooth byteorder API.
Macro utilities.