11#ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
12#define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
30#define BT_CODEC_LC3_ID 0x06
71#define BT_CODEC_LC3_FREQ_8KHZ BIT(0)
75#define BT_CODEC_LC3_FREQ_11KHZ BIT(1)
79#define BT_CODEC_LC3_FREQ_16KHZ BIT(2)
83#define BT_CODEC_LC3_FREQ_22KHZ BIT(3)
87#define BT_CODEC_LC3_FREQ_24KHZ BIT(4)
91#define BT_CODEC_LC3_FREQ_32KHZ BIT(5)
95#define BT_CODEC_LC3_FREQ_44KHZ BIT(6)
99#define BT_CODEC_LC3_FREQ_48KHZ BIT(7)
103#define BT_CODEC_LC3_FREQ_ANY (BT_CODEC_LC3_FREQ_8KHZ | \
104 BT_CODEC_LC3_FREQ_16KHZ | \
105 BT_CODEC_LC3_FREQ_24KHZ | \
106 BT_CODEC_LC3_FREQ_32KHZ | \
107 BT_CODEC_LC3_FREQ_44KHZ | \
108 BT_CODEC_LC3_FREQ_48KHZ)
113#define BT_CODEC_LC3_DURATION_7_5 BIT(0)
117#define BT_CODEC_LC3_DURATION_10 BIT(1)
121#define BT_CODEC_LC3_DURATION_ANY (BT_CODEC_LC3_DURATION_7_5 | \
122 BT_CODEC_LC3_DURATION_10)
126#define BT_CODEC_LC3_DURATION_PREFER_7_5 BIT(4)
130#define BT_CODEC_LC3_DURATION_PREFER_10 BIT(5)
139#define BT_CODEC_LC3_CHAN_COUNT_SUPPORT(_count) ((uint8_t)BIT((_count) - 1))
177#define BT_CODEC_CONFIG_LC3_FREQ_8KHZ 0x01
181#define BT_CODEC_CONFIG_LC3_FREQ_11KHZ 0x02
185#define BT_CODEC_CONFIG_LC3_FREQ_16KHZ 0x03
189#define BT_CODEC_CONFIG_LC3_FREQ_22KHZ 0x04
193#define BT_CODEC_CONFIG_LC3_FREQ_24KHZ 0x05
197#define BT_CODEC_CONFIG_LC3_FREQ_32KHZ 0x06
201#define BT_CODEC_CONFIG_LC3_FREQ_44KHZ 0x07
205#define BT_CODEC_CONFIG_LC3_FREQ_48KHZ 0x08
209#define BT_CODEC_CONFIG_LC3_FREQ_88KHZ 0x09
213#define BT_CODEC_CONFIG_LC3_FREQ_96KHZ 0x0a
217#define BT_CODEC_CONFIG_LC3_FREQ_176KHZ 0x0b
221#define BT_CODEC_CONFIG_LC3_FREQ_192KHZ 0x0c
225#define BT_CODEC_CONFIG_LC3_FREQ_384KHZ 0x0d
230#define BT_CODEC_CONFIG_LC3_DURATION_7_5 0x00
234#define BT_CODEC_CONFIG_LC3_DURATION_10 0x01
248 #define BT_CODEC_LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max, _max_frames_per_sdu) \
250 BT_CODEC_DATA(BT_CODEC_LC3_FREQ, (_freq) & 0xffu, (_freq) >> 8), \
251 BT_CODEC_DATA(BT_CODEC_LC3_DURATION, _duration), \
252 BT_CODEC_DATA(BT_CODEC_LC3_CHAN_COUNT, _chan_count), \
253 BT_CODEC_DATA(BT_CODEC_LC3_FRAME_LEN, (_len_min) & 0xffu, (_len_min) >> 8, \
254 (_len_max) & 0xffu, (_len_max) >> 8) \
255 COND_CODE_1(_max_frames_per_sdu, (), \
256 (, BT_CODEC_DATA(BT_CODEC_LC3_FRAME_COUNT, _max_frames_per_sdu))) \
262#define BT_CODEC_LC3_META(_prefer_context, _context) \
264 BT_CODEC_DATA(BT_CODEC_META_PREFER_CONTEXT, (_prefer_context) & 0xffu, \
265 (_prefer_context) >> 8), \
266 BT_CODEC_DATA(BT_CODEC_META_CONTEXT, (_context) & 0xffu, (_context) >> 8) \
272#define BT_CODEC_LC3(_freq, _duration, _chan_count, _len_min, _len_max, \
273 _max_frames_per_sdu, _prefer_context, _context) \
274 BT_CODEC(BT_CODEC_LC3_ID, 0x0000, 0x0000, \
275 BT_CODEC_LC3_DATA(_freq, _duration, _chan_count, _len_min, \
276 _len_max, _max_frames_per_sdu), \
277 BT_CODEC_LC3_META(_prefer_context, _context))
290#define BT_CODEC_LC3_CONFIG_DATA(_freq, _duration, _loc, _len, _frame_blocks_per_sdu) \
292 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FREQ, _freq), \
293 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_DURATION, _duration), \
294 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_CHAN_ALLOC, (_loc) & 0xffu, ((_loc) >> 8) & 0xffu, \
295 ((_loc) >> 16) & 0xffu, (_loc) >> 24), \
296 BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FRAME_LEN, (_len) & 0xffu, (_len) >> 8) \
297 COND_CODE_1(_frame_blocks_per_sdu, (), \
298 (, BT_CODEC_DATA(BT_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU, _frames_per_sdu))) \
304#define BT_CODEC_LC3_CONFIG_META(_context) \
306 BT_CODEC_DATA(BT_CODEC_META_CONTEXT, _context, _context >> 8), \
312#define BT_CODEC_LC3_CONFIG_N(_freq, _duration, _loc, _len, _frames_per_sdu, _context) \
313 BT_CODEC(BT_CODEC_LC3_ID, 0x0000, 0x0000, \
314 BT_CODEC_LC3_CONFIG_DATA(_freq, _duration, _loc, _len, _frames_per_sdu), \
315 BT_CODEC_LC3_CONFIG_META(_context))
320#define BT_CODEC_LC3_CONFIG(_freq, _duration, _len, _context) \
321 BT_CODEC_LC3_CONFIG_N(_freq, _duration, BT_AUDIO_LOCATION_FRONT_LEFT, _len, 1, _context)
326#define BT_CODEC_LC3_CONFIG_8_1 \
327 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_8KHZ, \
328 BT_CODEC_CONFIG_LC3_DURATION_7_5, 26u, \
329 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
333#define BT_CODEC_LC3_CONFIG_8_2 \
334 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_8KHZ, \
335 BT_CODEC_CONFIG_LC3_DURATION_10, 30u, \
336 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
340#define BT_CODEC_LC3_CONFIG_16_1 \
341 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_16KHZ, \
342 BT_CODEC_CONFIG_LC3_DURATION_7_5, 30u, \
343 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
347#define BT_CODEC_LC3_CONFIG_16_2 \
348 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_16KHZ, \
349 BT_CODEC_CONFIG_LC3_DURATION_10, 40u, \
350 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
355#define BT_CODEC_LC3_CONFIG_24_1 \
356 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_24KHZ, \
357 BT_CODEC_CONFIG_LC3_DURATION_7_5, 45u, \
358 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
362#define BT_CODEC_LC3_CONFIG_24_2 \
363 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_24KHZ, \
364 BT_CODEC_CONFIG_LC3_DURATION_10, 60u, \
365 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
369#define BT_CODEC_LC3_CONFIG_32_1 \
370 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_32KHZ, \
371 BT_CODEC_CONFIG_LC3_DURATION_7_5, 60u, \
372 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
376#define BT_CODEC_LC3_CONFIG_32_2 \
377 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_32KHZ, \
378 BT_CODEC_CONFIG_LC3_DURATION_10, 80u, \
379 BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
383#define BT_CODEC_LC3_CONFIG_441_1 \
384 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_44KHZ, \
385 BT_CODEC_CONFIG_LC3_DURATION_7_5, 98u, \
386 BT_AUDIO_CONTEXT_TYPE_MEDIA)
390#define BT_CODEC_LC3_CONFIG_441_2 \
391 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_44KHZ, \
392 BT_CODEC_CONFIG_LC3_DURATION_10, 130u, \
393 BT_AUDIO_CONTEXT_TYPE_MEDIA)
397#define BT_CODEC_LC3_CONFIG_48_1 \
398 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
399 BT_CODEC_CONFIG_LC3_DURATION_7_5, 75u, \
400 BT_AUDIO_CONTEXT_TYPE_MEDIA)
404#define BT_CODEC_LC3_CONFIG_48_2 \
405 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
406 BT_CODEC_CONFIG_LC3_DURATION_10, 100u, \
407 BT_AUDIO_CONTEXT_TYPE_MEDIA)
411#define BT_CODEC_LC3_CONFIG_48_3 \
412 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
413 BT_CODEC_CONFIG_LC3_DURATION_7_5, 90u, \
414 BT_AUDIO_CONTEXT_TYPE_MEDIA)
418#define BT_CODEC_LC3_CONFIG_48_4 \
419 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
420 BT_CODEC_CONFIG_LC3_DURATION_10, 120u, \
421 BT_AUDIO_CONTEXT_TYPE_MEDIA)
425#define BT_CODEC_LC3_CONFIG_48_5 \
426 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
427 BT_CODEC_CONFIG_LC3_DURATION_7_5, 117u, \
428 BT_AUDIO_CONTEXT_TYPE_MEDIA)
432#define BT_CODEC_LC3_CONFIG_48_6 \
433 BT_CODEC_LC3_CONFIG(BT_CODEC_CONFIG_LC3_FREQ_48KHZ, \
434 BT_CODEC_CONFIG_LC3_DURATION_10, 155u, \
435 BT_AUDIO_CONTEXT_TYPE_MEDIA)
439#define BT_CODEC_LC3_QOS_7_5(_framing, _sdu, _rtn, _latency, _pd) \
440 BT_CODEC_QOS(7500u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
445#define BT_CODEC_LC3_QOS_7_5_UNFRAMED(_sdu, _rtn, _latency, _pd) \
446 BT_CODEC_QOS_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
450#define BT_CODEC_LC3_QOS_10(_framing, _sdu, _rtn, _latency, _pd) \
451 BT_CODEC_QOS(10000u, _framing, BT_CODEC_QOS_2M, _sdu, _rtn, \
456#define BT_CODEC_LC3_QOS_10_UNFRAMED(_sdu, _rtn, _latency, _pd) \
457 BT_CODEC_QOS_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
bt_codec_capability_type
Codec capability type id's.
Definition: lc3.h:40
bt_codec_config_type
Codec configuration type IDs.
Definition: lc3.h:156
@ BT_CODEC_LC3_FRAME_COUNT
Definition: lc3.h:65
@ BT_CODEC_LC3_FRAME_LEN
Definition: lc3.h:60
@ BT_CODEC_LC3_CHAN_COUNT
Definition: lc3.h:55
@ BT_CODEC_LC3_DURATION
Definition: lc3.h:50
@ BT_CODEC_LC3_FREQ
Definition: lc3.h:45
@ BT_CODEC_CONFIG_LC3_FREQ
LC3 Sample Frequency configuration type.
Definition: lc3.h:159
@ BT_CODEC_CONFIG_LC3_CHAN_ALLOC
LC3 channel Allocation configuration type.
Definition: lc3.h:165
@ BT_CODEC_CONFIG_LC3_FRAME_LEN
LC3 Frame Length configuration type.
Definition: lc3.h:168
@ BT_CODEC_CONFIG_LC3_DURATION
LC3 Frame Duration configuration type.
Definition: lc3.h:162
@ BT_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU
Codec frame blocks, per SDU configuration type.
Definition: lc3.h:171
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
uint16_t max
Definition: lc3.h:144
uint16_t min
Definition: lc3.h:143