11#ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
12#define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
31#define BT_CODEC_LC3_ID 0x06
72#define BT_CODEC_LC3_FREQ_8KHZ BIT(0)
76#define BT_CODEC_LC3_FREQ_11KHZ BIT(1)
80#define BT_CODEC_LC3_FREQ_16KHZ BIT(2)
84#define BT_CODEC_LC3_FREQ_22KHZ BIT(3)
88#define BT_CODEC_LC3_FREQ_24KHZ BIT(4)
92#define BT_CODEC_LC3_FREQ_32KHZ BIT(5)
96#define BT_CODEC_LC3_FREQ_44KHZ BIT(6)
100#define BT_CODEC_LC3_FREQ_48KHZ BIT(7)
104#define BT_CODEC_LC3_FREQ_ANY (BT_CODEC_LC3_FREQ_8KHZ | \
105 BT_CODEC_LC3_FREQ_16KHZ | \
106 BT_CODEC_LC3_FREQ_24KHZ | \
107 BT_CODEC_LC3_FREQ_32KHZ | \
108 BT_CODEC_LC3_FREQ_44KHZ | \
109 BT_CODEC_LC3_FREQ_48KHZ)
114#define BT_CODEC_LC3_DURATION_7_5 BIT(0)
118#define BT_CODEC_LC3_DURATION_10 BIT(1)
122#define BT_CODEC_LC3_DURATION_ANY (BT_CODEC_LC3_DURATION_7_5 | \
123 BT_CODEC_LC3_DURATION_10)
127#define BT_CODEC_LC3_DURATION_PREFER_7_5 BIT(4)
131#define BT_CODEC_LC3_DURATION_PREFER_10 BIT(5)
136#define BT_CODEC_LC3_CHAN_COUNT_MIN 1
140#define BT_CODEC_LC3_CHAN_COUNT_MAX 8
151#define BT_CODEC_LC3_CHAN_COUNT_SUPPORT(...) ((uint8_t)((FOR_EACH(BIT, (|), __VA_ARGS__)) >> 1))
187#define BT_CODEC_CONFIG_LC3_FREQ_8KHZ 0x01
191#define BT_CODEC_CONFIG_LC3_FREQ_11KHZ 0x02
195#define BT_CODEC_CONFIG_LC3_FREQ_16KHZ 0x03
199#define BT_CODEC_CONFIG_LC3_FREQ_22KHZ 0x04
203#define BT_CODEC_CONFIG_LC3_FREQ_24KHZ 0x05
207#define BT_CODEC_CONFIG_LC3_FREQ_32KHZ 0x06
211#define BT_CODEC_CONFIG_LC3_FREQ_44KHZ 0x07
215#define BT_CODEC_CONFIG_LC3_FREQ_48KHZ 0x08
219#define BT_CODEC_CONFIG_LC3_FREQ_88KHZ 0x09
223#define BT_CODEC_CONFIG_LC3_FREQ_96KHZ 0x0a
227#define BT_CODEC_CONFIG_LC3_FREQ_176KHZ 0x0b
231#define BT_CODEC_CONFIG_LC3_FREQ_192KHZ 0x0c
235#define BT_CODEC_CONFIG_LC3_FREQ_384KHZ 0x0d
240#define BT_CODEC_CONFIG_LC3_DURATION_7_5 0x00
244#define BT_CODEC_CONFIG_LC3_DURATION_10 0x01
258 #define BT_CODEC_LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max, _max_frames_per_sdu) \
260 BT_CODEC_DATA(BT_CODEC_LC3_FREQ, \
262 (((_freq) >> 8) & 0xFFU)), \
263 BT_CODEC_DATA(BT_CODEC_LC3_DURATION, _duration), \
264 BT_CODEC_DATA(BT_CODEC_LC3_CHAN_COUNT, _chan_count), \
265 BT_CODEC_DATA(BT_CODEC_LC3_FRAME_LEN, \
266 ((_len_min) & 0xFFU), \
267 (((_len_min) >> 8) & 0xFFU), \
268 ((_len_max) & 0xFFU), \
269 (((_len_max) >> 8) & 0xFFU)) \
270 COND_CODE_1(_max_frames_per_sdu, (), \
271 (, BT_CODEC_DATA(BT_CODEC_LC3_FRAME_COUNT, \
272 _max_frames_per_sdu))) \
278#define BT_CODEC_LC3_META(_prefer_context) \
280 BT_CODEC_DATA(BT_AUDIO_METADATA_TYPE_PREF_CONTEXT, \
281 ((_prefer_context) & 0xFFU), \
282 (((_prefer_context) >> 8) & 0xFFU)) \
288#define BT_CODEC_LC3(_freq, _duration, _chan_count, _len_min, _len_max, \
289 _max_frames_per_sdu, _prefer_context) \
290 BT_CODEC(BT_CODEC_LC3_ID, 0x0000, 0x0000, \
291 BT_CODEC_LC3_DATA(_freq, _duration, _chan_count, _len_min, \
292 _len_max, _max_frames_per_sdu), \
293 BT_CODEC_LC3_META(_prefer_context))
306#define BT_CODEC_LC3_CONFIG_DATA(_freq, _duration, _loc, _len, _frame_blocks_per_sdu) \
308 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FREQ, _freq), \
309 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_DURATION, _duration), \
310 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_CHAN_ALLOC, \
312 (((_loc) >> 8) & 0xFFU), \
313 (((_loc) >> 16) & 0xFFU), \
314 (((_loc) >> 24) & 0xFFU)), \
315 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FRAME_LEN, \
317 (((_len) >> 8) & 0xFFU)) \
318 COND_CODE_1(_frame_blocks_per_sdu, (), \
319 (, BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU, \
320 _frame_blocks_per_sdu))) \
326#define BT_CODEC_LC3_CONFIG_META(_stream_context) \
328 BT_CODEC_DATA(BT_AUDIO_METADATA_TYPE_STREAM_CONTEXT, \
329 ((_stream_context) & 0xFFU), \
330 (((_stream_context) >> 8) & 0xFFU)) \
343#define BT_CODEC_LC3_CONFIG(_freq, _duration, _loc, _len, _frames_per_sdu, \
345 BT_CODEC(BT_CODEC_LC3_ID, 0x0000, 0x0000, \
346 BT_CODEC_LC3_CONFIG_DATA(_freq, _duration, _loc, _len, _frames_per_sdu), \
347 BT_CODEC_LC3_CONFIG_META(_stream_context))
355#define BT_CODEC_LC3_CONFIG_8_1(_loc, _stream_context) \
356 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_8KHZ, \
357 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 26u, \
365#define BT_CODEC_LC3_CONFIG_8_2(_loc, _stream_context) \
366 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_8KHZ, \
367 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 30u, \
375#define BT_CODEC_LC3_CONFIG_16_1(_loc, _stream_context) \
376 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_16KHZ, \
377 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 30u, \
385#define BT_CODEC_LC3_CONFIG_16_2(_loc, _stream_context) \
386 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_16KHZ, \
387 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 40u, \
396#define BT_CODEC_LC3_CONFIG_24_1(_loc, _stream_context) \
397 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_24KHZ, \
398 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 45u, \
406#define BT_CODEC_LC3_CONFIG_24_2(_loc, _stream_context) \
407 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_24KHZ, \
408 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 60u, \
416#define BT_CODEC_LC3_CONFIG_32_1(_loc, _stream_context) \
417 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_32KHZ, \
418 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 60u, \
426#define BT_CODEC_LC3_CONFIG_32_2(_loc, _stream_context) \
427 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_32KHZ, \
428 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 80u, \
436#define BT_CODEC_LC3_CONFIG_441_1(_loc, _stream_context) \
437 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_44KHZ, \
438 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 98u, \
446#define BT_CODEC_LC3_CONFIG_441_2(_loc, _stream_context) \
447 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_44KHZ, \
448 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 130u, \
456#define BT_CODEC_LC3_CONFIG_48_1(_loc, _stream_context) \
457 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
458 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 75u, \
466#define BT_CODEC_LC3_CONFIG_48_2(_loc, _stream_context) \
467 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
468 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 100u, \
476#define BT_CODEC_LC3_CONFIG_48_3(_loc, _stream_context) \
477 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
478 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 90u, \
486#define BT_CODEC_LC3_CONFIG_48_4(_loc, _stream_context) \
487 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
488 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 120u, \
496#define BT_CODEC_LC3_CONFIG_48_5(_loc, _stream_context) \
497 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
498 BT_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 117u, \
506#define BT_CODEC_LC3_CONFIG_48_6(_loc, _stream_context) \
507 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
508 BT_CODEC_CONFIG_LC3_DURATION_10, _loc, 155u, \
513#define BT_CODEC_LC3_QOS_7_5(_framing, _sdu, _rtn, _latency, _pd) \
514 BT_CODEC_QOS(7500u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
519#define BT_CODEC_LC3_QOS_7_5_UNFRAMED(_sdu, _rtn, _latency, _pd) \
520 BT_CODEC_QOS_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
524#define BT_CODEC_LC3_QOS_10(_framing, _sdu, _rtn, _latency, _pd) \
525 BT_CODEC_QOS(10000u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
530#define BT_CODEC_LC3_QOS_10_UNFRAMED(_sdu, _rtn, _latency, _pd) \
531 BT_CODEC_QOS_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
bt_codec_capability_type
Codec capability type id's.
Definition: lc3.h:41
bt_codec_config_type
Codec configuration type IDs.
Definition: lc3.h:166
@ BT_CODEC_LC3_FRAME_COUNT
Max codec frame count per SDU capability type.
Definition: lc3.h:66
@ BT_CODEC_LC3_FRAME_LEN
LC3 frame length capability type.
Definition: lc3.h:61
@ BT_CODEC_LC3_CHAN_COUNT
LC3 channel count capability type.
Definition: lc3.h:56
@ BT_CODEC_LC3_DURATION
LC3 frame duration capability type.
Definition: lc3.h:51
@ BT_CODEC_LC3_FREQ
LC3 sample frequency capability type.
Definition: lc3.h:46
@ BT_CODEC_CONFIG_LC3_FREQ
LC3 Sample Frequency configuration type.
Definition: lc3.h:169
@ BT_CODEC_CONFIG_LC3_CHAN_ALLOC
LC3 channel Allocation configuration type.
Definition: lc3.h:175
@ BT_CODEC_CONFIG_LC3_FRAME_LEN
LC3 Frame Length configuration type.
Definition: lc3.h:178
@ BT_CODEC_CONFIG_LC3_DURATION
LC3 Frame Duration configuration type.
Definition: lc3.h:172
@ BT_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU
Codec frame blocks, per SDU configuration type.
Definition: lc3.h:181
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
uint16_t max
Definition: lc3.h:155
uint16_t min
Definition: lc3.h:154