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