LCOV - code coverage report
Current view: top level - zephyr/bluetooth/audio - lc3.h Coverage Total Hit
Test: new.info Lines: 100.0 % 7 7
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            1 : /**
       2              :  * @file
       3              :  * @brief Bluetooth LC3 codec handling
       4              :  */
       5              : 
       6              : /*
       7              :  * Copyright (c) 2020 Intel Corporation
       8              :  * Copyright (c) 2022-2024 Nordic Semiconductor ASA
       9              :  *
      10              :  * SPDX-License-Identifier: Apache-2.0
      11              :  */
      12              : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
      13              : #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_
      14              : 
      15              : /**
      16              :  * @brief LC3
      17              :  * @defgroup bt_lc3 Bluetooth LC3 codec
      18              : 
      19              :  * @since 3.0
      20              :  * @version 0.8.0
      21              : 
      22              :  * @ingroup bluetooth
      23              :  * @{
      24              :  */
      25              : 
      26              : #include <zephyr/sys/util_macro.h>
      27              : #include <zephyr/bluetooth/byteorder.h>
      28              : #include <zephyr/bluetooth/hci_types.h>
      29              : 
      30              : #ifdef __cplusplus
      31              : extern "C" {
      32              : #endif
      33              : 
      34              : /**
      35              :  * @brief Helper to declare LC3 codec capability
      36              :  *
      37              :  * @p _max_frames_per_sdu is optional and will be included only if != 1
      38              :  *
      39              :  * @ref COND_CODE_1 is used to omit an LTV entry in case the @p _frames_per_sdu is 1.
      40              :  * @ref COND_CODE_1 will evaluate to second argument if the flag parameter(first argument) is 1
      41              :  * - removing one layer of paranteses.
      42              :  * If the flags argument is != 1 it will evaluate to the third argument which inserts a LTV
      43              :  * entry for the max_frames_per_sdu value.
      44              : 
      45              :  * @param _freq Supported Sampling Frequencies bitfield (see ``BT_AUDIO_CODEC_CAP_FREQ_*``)
      46              :  * @param _duration Supported Frame Durations bitfield (see ``BT_AUDIO_CODEC_CAP_DURATION_*``)
      47              :  * @param _chan_count Supported channels (see @ref BT_AUDIO_CODEC_CAP_CHAN_COUNT_SUPPORT)
      48              :  * @param _len_min Minimum number of octets supported per codec frame
      49              :  * @param _len_max Maximum number of octets supported per codec frame
      50              :  * @param _max_frames_per_sdu Supported maximum codec frames per SDU
      51              :  */
      52              : #define BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min, _len_max,             \
      53            1 :                                     _max_frames_per_sdu)                                           \
      54              :         {                                                                                          \
      55              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FREQ, BT_BYTES_LIST_LE16(_freq)),      \
      56              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_DURATION, (_duration)),                \
      57              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_CHAN_COUNT, (_chan_count)),            \
      58              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FRAME_LEN,                             \
      59              :                                     BT_BYTES_LIST_LE16(_len_min),                                  \
      60              :                                     BT_BYTES_LIST_LE16(_len_max)),                                 \
      61              :                 COND_CODE_1(_max_frames_per_sdu, (),                                               \
      62              :                             (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CAP_TYPE_FRAME_COUNT,              \
      63              :                                                  (_max_frames_per_sdu))))                          \
      64              :         }
      65              : 
      66              : /**
      67              :  * @brief Helper to declare LC3 codec metadata
      68              :  *
      69              :  * @param _prefer_context Preferred contexts (@ref bt_audio_context)
      70              :  */
      71            1 : #define BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context)                                               \
      72              :         {                                                                                          \
      73              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_PREF_CONTEXT,                           \
      74              :                                     BT_BYTES_LIST_LE16(_prefer_context))                           \
      75              :         }
      76              : 
      77              : /**
      78              :  * @brief Helper to declare LC3 codec
      79              :  *
      80              :  * @param _freq Supported Sampling Frequencies bitfield (see ``BT_AUDIO_CODEC_CAP_FREQ_*``)
      81              :  * @param _duration Supported Frame Durations bitfield (see ``BT_AUDIO_CODEC_CAP_DURATION_*``)
      82              :  * @param _chan_count Supported channels (see @ref BT_AUDIO_CODEC_CAP_CHAN_COUNT_SUPPORT)
      83              :  * @param _len_min Minimum number of octets supported per codec frame
      84              :  * @param _len_max Maximum number of octets supported per codec frame
      85              :  * @param _max_frames_per_sdu Supported maximum codec frames per SDU
      86              :  * @param _prefer_context Preferred contexts (@ref bt_audio_context)
      87              :  */
      88              : #define BT_AUDIO_CODEC_CAP_LC3(_freq, _duration, _chan_count, _len_min, _len_max,                  \
      89            1 :                                _max_frames_per_sdu, _prefer_context)                               \
      90              :         BT_AUDIO_CODEC_CAP(BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000,                               \
      91              :                            BT_AUDIO_CODEC_CAP_LC3_DATA(_freq, _duration, _chan_count, _len_min,    \
      92              :                                                        _len_max, _max_frames_per_sdu),             \
      93              :                            BT_AUDIO_CODEC_CAP_LC3_META(_prefer_context))
      94              : 
      95              : /**
      96              :  * @brief Helper to declare LC3 codec data configuration
      97              :  *
      98              :  * @param _freq            Sampling frequency (``BT_AUDIO_CODEC_CFG_FREQ_*``)
      99              :  * @param _duration        Frame duration (``BT_AUDIO_CODEC_CFG_DURATION_*``)
     100              :  * @param _loc             Audio channel location bitfield (@ref bt_audio_location)
     101              :  * @param _len             Octets per frame (16-bit integer)
     102              :  * @param _frames_per_sdu  Frames per SDU (8-bit integer). This value is optional and will be
     103              :  *                         included only if != 1
     104              :  */
     105            1 : #define BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu)                 \
     106              :         {                                                                                          \
     107              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FREQ, (_freq)),                             \
     108              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_DURATION, (_duration)),                     \
     109              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_CHAN_ALLOC, BT_BYTES_LIST_LE32(_loc)),      \
     110              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FRAME_LEN, BT_BYTES_LIST_LE16(_len)),       \
     111              :                 COND_CODE_1(_frames_per_sdu, (),                                                   \
     112              :                             (BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_FRAME_BLKS_PER_SDU,            \
     113              :                                                  (_frames_per_sdu))))                              \
     114              :         }
     115              : 
     116              : /** @brief Helper to declare LC3 codec metadata configuration */
     117            1 : #define BT_AUDIO_CODEC_CFG_LC3_META(_stream_context)                                               \
     118              :         {                                                                                          \
     119              :                 BT_AUDIO_CODEC_DATA(BT_AUDIO_METADATA_TYPE_STREAM_CONTEXT,                         \
     120              :                                     BT_BYTES_LIST_LE16(_stream_context))                           \
     121              :         }
     122              : 
     123              : /**
     124              :  * @brief Helper to declare LC3 codec configuration.
     125              :  *
     126              :  * @param _freq            Sampling frequency (``BT_AUDIO_CODEC_CFG_FREQ_*``)
     127              :  * @param _duration        Frame duration (``BT_AUDIO_CODEC_CFG_DURATION_*``)
     128              :  * @param _loc             Audio channel location bitfield (@ref bt_audio_location)
     129              :  * @param _len             Octets per frame (16-bit integer)
     130              :  * @param _frames_per_sdu  Frames per SDU (8-bit integer)
     131              :  * @param _stream_context  Stream context (``BT_AUDIO_CONTEXT_*``)
     132              :  */
     133            1 : #define BT_AUDIO_CODEC_LC3_CONFIG(_freq, _duration, _loc, _len, _frames_per_sdu, _stream_context)  \
     134              :         BT_AUDIO_CODEC_CFG(                                                                        \
     135              :                 BT_HCI_CODING_FORMAT_LC3, 0x0000, 0x0000,                                          \
     136              :                 BT_AUDIO_CODEC_CFG_LC3_DATA(_freq, _duration, _loc, _len, _frames_per_sdu),        \
     137              :                 BT_AUDIO_CODEC_CFG_LC3_META(_stream_context))
     138              : 
     139              : #ifdef __cplusplus
     140              : }
     141              : #endif
     142              : 
     143              : /**
     144              :  * @}
     145              :  */
     146              : 
     147              : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_LC3_H_ */
        

Generated by: LCOV version 2.0-1