1 /** 2 * @file 3 * @brief Header for Bluetooth GMAP LC3 presets. 4 * 5 * Copyright (c) 2023-2024 Nordic Semiconductor ASA 6 * 7 * SPDX-License-Identifier: Apache-2.0 8 */ 9 10 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_GMAP_LC3_PRESET_ 11 #define ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_GMAP_LC3_PRESET_ 12 13 /** 14 * @brief Gaming Audio Profile (GMAP) LC3 Presets 15 * 16 * @defgroup bt_gmap_lc3_preset Gaming Audio Profile (GMAP) LC3 Presets 17 * 18 * @since 3.5 19 * @version 0.8.0 20 * 21 * @ingroup bluetooth 22 * @{ 23 * 24 * These APIs provide presets for codec configuration and QoS based on values supplied by the 25 * codec configurations from table 3.16 in the GMAP v1.0 specification 26 */ 27 28 #include <zephyr/bluetooth/audio/audio.h> 29 #include <zephyr/bluetooth/audio/bap.h> 30 #include <zephyr/bluetooth/audio/bap_lc3_preset.h> 31 #include <zephyr/bluetooth/audio/lc3.h> 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /** 38 * @brief Helper to declare LC3 32_1_gr codec configuration 39 * 40 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 41 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 42 */ 43 #define BT_GMAP_LC3_PRESET_32_1_GR(_loc, _stream_context) \ 44 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, \ 45 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 60U, 1, \ 46 _stream_context), \ 47 BT_BAP_QOS_CFG_UNFRAMED(7500u, 60U, 1U, 15U, 10000U)) 48 49 /** 50 * @brief Helper to declare LC3 32_2_gr codec configuration 51 * 52 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 53 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 54 */ 55 #define BT_GMAP_LC3_PRESET_32_2_GR(_loc, _stream_context) \ 56 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, \ 57 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 80U, 1, \ 58 _stream_context), \ 59 BT_BAP_QOS_CFG_UNFRAMED(10000u, 80U, 1U, 20U, 10000U)) 60 61 /** 62 * @brief Helper to declare LC3 48_1_gr codec configuration 63 * 64 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 65 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 66 */ 67 #define BT_GMAP_LC3_PRESET_48_1_GR(_loc, _stream_context) \ 68 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 69 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 75U, 1, \ 70 _stream_context), \ 71 BT_BAP_QOS_CFG_UNFRAMED(7500u, 75U, 1U, 15U, 10000U)) 72 73 /** 74 * @brief Helper to declare LC3 48_2_gr codec configuration 75 * 76 * Mandatory to support as both unicast client and server 77 * 78 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 79 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 80 */ 81 #define BT_GMAP_LC3_PRESET_48_2_GR(_loc, _stream_context) \ 82 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 83 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 100U, 1, \ 84 _stream_context), \ 85 BT_BAP_QOS_CFG_UNFRAMED(10000u, 100U, 1U, 20U, 10000U)) 86 87 /** 88 * @brief Helper to declare LC3 48_3_gr codec configuration 89 * 90 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 91 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 92 */ 93 #define BT_GMAP_LC3_PRESET_48_3_GR(_loc, _stream_context) \ 94 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 95 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 90U, 1, \ 96 _stream_context), \ 97 BT_BAP_QOS_CFG_UNFRAMED(7500u, 90U, 1U, 15U, 10000U)) 98 99 /** 100 * @brief Helper to declare LC3 48_4_gr codec configuration 101 * 102 * Mandatory to support as unicast server 103 * 104 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 105 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 106 */ 107 #define BT_GMAP_LC3_PRESET_48_4_GR(_loc, _stream_context) \ 108 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 109 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 120u, 1, \ 110 _stream_context), \ 111 BT_BAP_QOS_CFG_UNFRAMED(10000u, 120U, 1U, 20U, 10000U)) 112 113 /** 114 * @brief Helper to declare LC3 16_1_gs codec configuration 115 * 116 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 117 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 118 */ 119 #define BT_GMAP_LC3_PRESET_16_1_GS(_loc, _stream_context) \ 120 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_16KHZ, \ 121 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 30U, 1, \ 122 _stream_context), \ 123 BT_BAP_QOS_CFG_UNFRAMED(7500u, 30U, 1U, 15U, 60000U)) 124 125 /** 126 * @brief Helper to declare LC3 16_2_gs codec configuration 127 * 128 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 129 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 130 */ 131 #define BT_GMAP_LC3_PRESET_16_2_GS(_loc, _stream_context) \ 132 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_16KHZ, \ 133 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 40U, 1, \ 134 _stream_context), \ 135 BT_BAP_QOS_CFG_UNFRAMED(10000u, 40U, 1U, 20U, 60000U)) 136 137 /** 138 * @brief Helper to declare LC3 32_1_gs codec configuration 139 * 140 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 141 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 142 */ 143 #define BT_GMAP_LC3_PRESET_32_1_GS(_loc, _stream_context) \ 144 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, \ 145 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 60U, 1, \ 146 _stream_context), \ 147 BT_BAP_QOS_CFG_UNFRAMED(7500u, 60U, 1U, 15U, 60000U)) 148 149 /** 150 * @brief Helper to declare LC3 32_2_gs codec configuration 151 * 152 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 153 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 154 */ 155 #define BT_GMAP_LC3_PRESET_32_2_GS(_loc, _stream_context) \ 156 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_32KHZ, \ 157 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 80U, 1, \ 158 _stream_context), \ 159 BT_BAP_QOS_CFG_UNFRAMED(10000u, 80U, 1U, 20U, 60000U)) 160 161 /** 162 * @brief Helper to declare LC3 48_1_gs codec configuration 163 * 164 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 165 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 166 */ 167 #define BT_GMAP_LC3_PRESET_48_1_GS(_loc, _stream_context) \ 168 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 169 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 75U, 1, \ 170 _stream_context), \ 171 BT_BAP_QOS_CFG_UNFRAMED(7500u, 75U, 1U, 15U, 60000U)) 172 173 /** 174 * @brief Helper to declare LC3 48_2_gs codec configuration 175 * 176 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 177 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 178 */ 179 #define BT_GMAP_LC3_PRESET_48_2_GS(_loc, _stream_context) \ 180 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 181 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 100U, 1, \ 182 _stream_context), \ 183 BT_BAP_QOS_CFG_UNFRAMED(10000u, 100U, 1U, 20U, 60000U)) 184 185 /* GMAP LC3 broadcast presets defined by table 3.22 in the GMAP v1.0 specification */ 186 187 /** 188 * @brief Helper to declare LC3 48_1_g codec configuration 189 * 190 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 191 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 192 */ 193 #define BT_GMAP_LC3_PRESET_48_1_G(_loc, _stream_context) \ 194 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 195 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 75U, 1, \ 196 _stream_context), \ 197 BT_BAP_QOS_CFG_UNFRAMED(7500u, 75U, 1U, 8U, 10000U)) 198 199 /** 200 * @brief Helper to declare LC3 48_2_g codec configuration 201 * 202 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 203 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 204 */ 205 #define BT_GMAP_LC3_PRESET_48_2_G(_loc, _stream_context) \ 206 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 207 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 100U, 1, \ 208 _stream_context), \ 209 BT_BAP_QOS_CFG_UNFRAMED(10000u, 100U, 1U, 10U, 10000U)) 210 211 /** 212 * @brief Helper to declare LC3 48_3_g codec configuration 213 * 214 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 215 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 216 */ 217 #define BT_GMAP_LC3_PRESET_48_3_G(_loc, _stream_context) \ 218 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 219 BT_AUDIO_CODEC_CFG_DURATION_7_5, _loc, 90U, 1, \ 220 _stream_context), \ 221 BT_BAP_QOS_CFG_UNFRAMED(7500u, 90U, 1U, 8U, 10000U)) 222 223 /** 224 * @brief Helper to declare LC3 48_4_g codec configuration 225 * 226 * @param _loc Audio channel location bitfield (@ref bt_audio_location) 227 * @param _stream_context Stream context (``BT_AUDIO_CONTEXT_*``) 228 */ 229 #define BT_GMAP_LC3_PRESET_48_4_G(_loc, _stream_context) \ 230 BT_BAP_LC3_PRESET(BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_48KHZ, \ 231 BT_AUDIO_CODEC_CFG_DURATION_10, _loc, 120u, 1, \ 232 _stream_context), \ 233 BT_BAP_QOS_CFG_UNFRAMED(10000u, 120U, 1U, 10U, 10000U)) 234 235 #ifdef __cplusplus 236 } 237 #endif 238 /** @} */ 239 240 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_AUDIO_GMAP_LC3_PRESET_ */ 241