Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.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
32#define BT_HCI_CODING_FORMAT_LC3 0x06
33
43
48
53
58
63
68};
69
73#define BT_AUDIO_CODEC_LC3_FREQ_8KHZ BIT(0)
77#define BT_AUDIO_CODEC_LC3_FREQ_11KHZ BIT(1)
81#define BT_AUDIO_CODEC_LC3_FREQ_16KHZ BIT(2)
85#define BT_AUDIO_CODEC_LC3_FREQ_22KHZ BIT(3)
89#define BT_AUDIO_CODEC_LC3_FREQ_24KHZ BIT(4)
93#define BT_AUDIO_CODEC_LC3_FREQ_32KHZ BIT(5)
97#define BT_AUDIO_CODEC_LC3_FREQ_44KHZ BIT(6)
101#define BT_AUDIO_CODEC_LC3_FREQ_48KHZ BIT(7)
105#define BT_AUDIO_CODEC_LC3_FREQ_ANY \
106 (BT_AUDIO_CODEC_LC3_FREQ_8KHZ | BT_AUDIO_CODEC_LC3_FREQ_16KHZ | \
107 BT_AUDIO_CODEC_LC3_FREQ_24KHZ | BT_AUDIO_CODEC_LC3_FREQ_32KHZ | \
108 BT_AUDIO_CODEC_LC3_FREQ_44KHZ | BT_AUDIO_CODEC_LC3_FREQ_48KHZ)
109
113#define BT_AUDIO_CODEC_LC3_DURATION_7_5 BIT(0)
117#define BT_AUDIO_CODEC_LC3_DURATION_10 BIT(1)
121#define BT_AUDIO_CODEC_LC3_DURATION_ANY \
122 (BT_AUDIO_CODEC_LC3_DURATION_7_5 | BT_AUDIO_CODEC_LC3_DURATION_10)
126#define BT_AUDIO_CODEC_LC3_DURATION_PREFER_7_5 BIT(4)
130#define BT_AUDIO_CODEC_LC3_DURATION_PREFER_10 BIT(5)
131
135#define BT_AUDIO_CODEC_LC3_CHAN_COUNT_MIN 1
139#define BT_AUDIO_CODEC_LC3_CHAN_COUNT_MAX 8
150#define BT_AUDIO_CODEC_LC3_CHAN_COUNT_SUPPORT(...) \
151 ((uint8_t)((FOR_EACH(BIT, (|), __VA_ARGS__)) >> 1))
152
156};
157
163};
164
174
177
180
183
186
189};
190
244};
245
249#define BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5 0x00
253#define BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10 0x01
254
260/* COND_CODE_1 is used to omit an LTV entry in case the _frames_per_sdu is 1.
261 * COND_CODE_1 will evaluate to second argument if the flag parameter(first argument) is 1
262 * - removing one layer of paranteses.
263 * If the flags argument is != 1 it will evaluate to the third argument which inserts a LTV
264 * entry for the max_frames_per_sdu value.
265 */
266
267#define BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max, \
268 _max_frames_per_sdu) \
269 { \
270 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_LC3_FREQ, BT_BYTES_LIST_LE16(_freq)), \
271 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_LC3_DURATION, (_duration)), \
272 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_LC3_CHAN_COUNT, (_chan_count)), \
273 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_LC3_FRAME_LEN, \
274 BT_BYTES_LIST_LE16(_len_min), \
275 BT_BYTES_LIST_LE16(_len_max)), \
276 COND_CODE_1(_max_frames_per_sdu, (), \
277 (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_LC3_FRAME_COUNT, \
278 (_max_frames_per_sdu)))) \
279 }
280
284#define BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context) \
285 { \
286 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_PREF_CONTEXT, \
287 BT_BYTES_LIST_LE16(_prefer_context)) \
288 }
289
302#define BT_AUDIO_CODEC_CAP_LC3(_freq, _duration, _chan_count, _len_min, _len_max, \
303 _max_frames_per_sdu, _prefer_context) \
304 BT_AUDIO_CODEC_CAP(BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000, \
305 BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min, \
306 _len_max, _max_frames_per_sdu), \
307 BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context))
308
319#define BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu) \
320 { \
321 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CONFIG_LC3_FREQ, (_freq)), \
322 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CONFIG_LC3_DURATION, (_duration)), \
323 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CONFIG_LC3_CHAN_ALLOC, \
324 BT_BYTES_LIST_LE32(_loc)), \
325 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CONFIG_LC3_FRAME_LEN, \
326 BT_BYTES_LIST_LE16(_len)), \
327 COND_CODE_1(_frames_per_sdu, (), \
328 (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU, \
329 (_frames_per_sdu)))) \
330 }
331
335#define BT_AUDIO_CODEC_CFG_LC3_META(_stream_context) \
336 { \
337 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_STREAM_CONTEXT, \
338 BT_BYTES_LIST_LE16(_stream_context)) \
339 }
340
351#define BT_AUDIO_CODEC_LC3_CONFIG(_freq, _duration, _loc, _len, _frames_per_sdu, _stream_context) \
352 BT_AUDIO_CODEC_CFG( \
353 BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000, \
354 BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu), \
355 BT_AUDIO_CODEC_CFG_LC3_META(_stream_context))
356
363#define BT_AUDIO_CODEC_LC3_CONFIG_8_1(_loc, _stream_context) \
364 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_8KHZ, \
365 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 26u, 1, \
366 _stream_context)
373#define BT_AUDIO_CODEC_LC3_CONFIG_8_2(_loc, _stream_context) \
374 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_8KHZ, \
375 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 30u, 1, \
376 _stream_context)
383#define BT_AUDIO_CODEC_LC3_CONFIG_16_1(_loc, _stream_context) \
384 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_16KHZ, \
385 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 30u, 1, \
386 _stream_context)
393#define BT_AUDIO_CODEC_LC3_CONFIG_16_2(_loc, _stream_context) \
394 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_16KHZ, \
395 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 40u, 1, \
396 _stream_context)
397
404#define BT_AUDIO_CODEC_LC3_CONFIG_24_1(_loc, _stream_context) \
405 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_24KHZ, \
406 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 45u, 1, \
407 _stream_context)
414#define BT_AUDIO_CODEC_LC3_CONFIG_24_2(_loc, _stream_context) \
415 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_24KHZ, \
416 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 60u, 1, \
417 _stream_context)
424#define BT_AUDIO_CODEC_LC3_CONFIG_32_1(_loc, _stream_context) \
425 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_32KHZ, \
426 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 60u, 1, \
427 _stream_context)
434#define BT_AUDIO_CODEC_LC3_CONFIG_32_2(_loc, _stream_context) \
435 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_32KHZ, \
436 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 80u, 1, \
437 _stream_context)
444#define BT_AUDIO_CODEC_LC3_CONFIG_441_1(_loc, _stream_context) \
445 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_44KHZ, \
446 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 98u, 1, \
447 _stream_context)
454#define BT_AUDIO_CODEC_LC3_CONFIG_441_2(_loc, _stream_context) \
455 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_44KHZ, \
456 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 130u, 1, \
457 _stream_context)
464#define BT_AUDIO_CODEC_LC3_CONFIG_48_1(_loc, _stream_context) \
465 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
466 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 75u, 1, \
467 _stream_context)
474#define BT_AUDIO_CODEC_LC3_CONFIG_48_2(_loc, _stream_context) \
475 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
476 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 100u, 1, \
477 _stream_context)
484#define BT_AUDIO_CODEC_LC3_CONFIG_48_3(_loc, _stream_context) \
485 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
486 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 90u, 1, \
487 _stream_context)
494#define BT_AUDIO_CODEC_LC3_CONFIG_48_4(_loc, _stream_context) \
495 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
496 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 120u, 1, \
497 _stream_context)
504#define BT_AUDIO_CODEC_LC3_CONFIG_48_5(_loc, _stream_context) \
505 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
506 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_7_5, _loc, 117u, 1, \
507 _stream_context)
514#define BT_AUDIO_CODEC_LC3_CONFIG_48_6(_loc, _stream_context) \
515 BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ, \
516 BT_AUDIO_CODEC_CONFIG_LC3_DURATION_10, _loc, 155u, 1, \
517 _stream_context)
521#define BT_AUDIO_CODEC_LC3_QOS_7_5(_framing, _sdu, _rtn, _latency, _pd) \
522 BT_AUDIO_CODEC_QOS(7500u, _framing, BT_AUDIO_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
526#define BT_AUDIO_CODEC_LC3_QOS_7_5_UNFRAMED(_sdu, _rtn, _latency, _pd) \
527 BT_AUDIO_CODEC_QOS_UNFRAMED(7500u, _sdu, _rtn, _latency, _pd)
531#define BT_AUDIO_CODEC_LC3_QOS_10(_framing, _sdu, _rtn, _latency, _pd) \
532 BT_AUDIO_CODEC_QOS(10000u, _framing, BT_AUDIO_CODEC_QOS_2M, _sdu, _rtn, _latency, _pd)
536#define BT_AUDIO_CODEC_LC3_QOS_10_UNFRAMED(_sdu, _rtn, _latency, _pd) \
537 BT_AUDIO_CODEC_QOS_UNFRAMED(10000u, _sdu, _rtn, _latency, _pd)
538
539#ifdef __cplusplus
540}
541#endif
542
547#endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_ */
Bluetooth byteorder API.
bt_audio_codec_config_type
Codec configuration type IDs.
Definition: lc3.h:173
bt_audio_codec_capability_type
Codec capability type id's.
Definition: lc3.h:42
bt_audio_codec_config_freq
Definition: lc3.h:191
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ
LC3 Sample Frequency configuration type.
Definition: lc3.h:176
@ BT_AUDIO_CODEC_CONFIG_LC3_FRAME_LEN
LC3 Frame Length configuration type.
Definition: lc3.h:185
@ BT_AUDIO_CODEC_CONFIG_LC3_DURATION
LC3 Frame Duration configuration type.
Definition: lc3.h:179
@ BT_AUDIO_CODEC_CONFIG_LC3_CHAN_ALLOC
LC3 channel Allocation configuration type.
Definition: lc3.h:182
@ BT_AUDIO_CODEC_CONFIG_LC3_FRAME_BLKS_PER_SDU
Codec frame blocks, per SDU configuration type.
Definition: lc3.h:188
@ BT_AUDIO_CODEC_LC3_DURATION
LC3 frame duration capability type.
Definition: lc3.h:52
@ BT_AUDIO_CODEC_LC3_FREQ
LC3 sample frequency capability type.
Definition: lc3.h:47
@ BT_AUDIO_CODEC_LC3_CHAN_COUNT
LC3 channel count capability type.
Definition: lc3.h:57
@ BT_AUDIO_CODEC_LC3_FRAME_LEN
LC3 frame length capability type.
Definition: lc3.h:62
@ BT_AUDIO_CODEC_LC3_FRAME_COUNT
Max codec frame count per SDU capability type.
Definition: lc3.h:67
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_384KHZ
384 Khz codec Sample Frequency configuration
Definition: lc3.h:243
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_32KHZ
32 Khz codec Sample Frequency configuration
Definition: lc3.h:215
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_96KHZ
96 Khz codec Sample Frequency configuration
Definition: lc3.h:231
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_24KHZ
24 Khz codec Sample Frequency configuration
Definition: lc3.h:211
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_88KHZ
88.2 Khz codec Sample Frequency configuration
Definition: lc3.h:227
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_44KHZ
44.1 Khz codec Sample Frequency configuration
Definition: lc3.h:219
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_8KHZ
8 Khz codec Sample Frequency configuration
Definition: lc3.h:195
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_48KHZ
48 Khz codec Sample Frequency configuration
Definition: lc3.h:223
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_16KHZ
16 Khz codec Sample Frequency configuration
Definition: lc3.h:203
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_11KHZ
11.025 Khz codec Sample Frequency configuration
Definition: lc3.h:199
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_22KHZ
22.05 Khz codec Sample Frequency configuration
Definition: lc3.h:207
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_176KHZ
176.4 Khz codec Sample Frequency configuration
Definition: lc3.h:235
@ BT_AUDIO_CODEC_CONFIG_LC3_FREQ_192KHZ
192 Khz codec Sample Frequency configuration
Definition: lc3.h:239
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Definition: lc3.h:153
uint16_t min
Definition: lc3.h:154
uint16_t max
Definition: lc3.h:155
uint16_t min
Minimum number of octets supported per codec frame.
Definition: lc3.h:160
uint16_t max
Maximum number of octets supported per codec frame.
Definition: lc3.h:162
Macro utilities.