1 /* 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. * Description: BT AUDIO HAL module. 14 */ 15 16 /** 17 * @addtogroup bluetooth_bts_audio_hal AUDIO HAL API 18 * @ingroup bluetooth 19 * @{ 20 */ 21 22 #ifndef BT_AUDIO_HAL_INTERFACE_H 23 #define BT_AUDIO_HAL_INTERFACE_H 24 #include <stdint.h> 25 #include <td_type.h> 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 /** 31 * @if Eng 32 * @brief Max length of bluetooth A2DP Codec Capabilities. 33 * @else 34 * @brief A2DP编码格式能力最大长度。 35 * @endif 36 */ 37 #define BT_A2DP_CODECCAPS_MAX_LEN 0x10 38 39 /** 40 * @if Eng 41 * @brief Max length of AVRCP event status. 42 * @else 43 * @brief :AVRCP事件状态最大长度。 44 * @endif 45 */ 46 #define BT_AVRCP_EVENT_STATUS_MAX_LEN 0x08 47 48 /** 49 * @if Eng 50 * @brief invalid task ID. 51 * @else 52 * @brief 蓝牙错误的无效任务ID。 53 * @endif 54 */ 55 #define BTS_ERR_INVALID_TASKID 0xffffffff 56 57 /** 58 * @if Eng 59 * @brief Define of Bluetooth Audio Channel parameters type. 60 * @else 61 * @brief 蓝牙通道参数类型定义。 62 * @endif 63 */ 64 typedef enum { 65 BT_AUDIO_PARAM_A2DP_CODEC, /*!< @if Eng A2DP codec. 66 @else A2DP编码格式。 @endif */ 67 BT_AUDIO_PARAM_AVRCP_VOLUME, /*!< @if Eng AVRCP volume. 68 @else AVRCP音量。 @endif */ 69 } bt_audio_param_type; 70 71 /** 72 * @if Eng 73 * @brief SBC codec type. 74 * @else 75 * @brief SBC编码格式类型。 76 * @endif 77 */ 78 #define BT_AUDIO_CODEC_SBC 0x00 79 80 /** 81 * @if Eng 82 * @brief MPEG12 codec type. 83 * @else 84 * @brief MPEG12编码格式类型。 85 * @endif 86 */ 87 #define BT_AUDIO_CODEC_MPEG12 0x01 88 /** 89 * @if Eng 90 * @brief MPEG24/AAC codec type. 91 * @else 92 * @brief MPEG24/AAC编码格式类型。 93 * @endif 94 */ 95 #define BT_AUDIO_CODEC_MPEG24 0x02 96 97 /** 98 * @if Eng 99 * @brief unknown codec type. 100 * @else 101 * @brief 位置编码格式类型。 102 * @endif 103 */ 104 #define BT_AUDIO_CODEC_UNKNOWN 0xFF 105 106 /** 107 * @if Eng 108 * @brief SBC capabilitis Octet 1. 109 * @else 110 * @brief SBC能力字节1。 111 * @endif 112 */ 113 enum { 114 /* sampling_freq, do not need to shift again, already in macro */ 115 BT_AUDIO_A2DP_SBC_SF_16000 = 0x80, 116 BT_AUDIO_A2DP_SBC_SF_32000 = 0x40, 117 BT_AUDIO_A2DP_SBC_SF_44100 = 0x20, /* SRC must support 44.1 or 48, SNK must support both */ 118 BT_AUDIO_A2DP_SBC_SF_48000 = 0x10, 119 BT_AUDIO_A2DP_SBC_SF_ALL = 0xF0, 120 BT_AUDIO_A2DP_SBC_CHMODE_MONO = 0x08, 121 BT_AUDIO_A2DP_SBC_CHMODE_DUAL_CHANNEL = 0x04, 122 BT_AUDIO_A2DP_SBC_CHMODE_STEREO = 0x02, 123 BT_AUDIO_A2DP_SBC_CHMODE_JOINT_STEREO = 0x01, 124 BT_AUDIO_A2DP_SBC_CHMODE_ALL = 0x0F 125 }; 126 127 /** 128 * @if Eng 129 * @brief SBC capabilitis Octet 2. 130 * @else 131 * @brief SBC能力字节2。 132 * @endif 133 */ 134 enum { 135 BT_AUDIO_A2DP_SBC_BLOCK_4 = 0x80, /* block_len, do not need to shift */ 136 BT_AUDIO_A2DP_SBC_BLOCK_8 = 0x40, 137 BT_AUDIO_A2DP_SBC_BLOCK_12 = 0x20, 138 BT_AUDIO_A2DP_SBC_BLOCK_16 = 0x10, 139 BT_AUDIO_A2DP_SBC_BLOCK_ALL = 0xF0, 140 BT_AUDIO_A2DP_SBC_SUBBAND_4 = 0x08, /* subbands, do not need to shift */ 141 BT_AUDIO_A2DP_SBC_SUBBAND_8 = 0x04, 142 BT_AUDIO_A2DP_SBC_SUBBAND_ALL = 0x0C, 143 BT_AUDIO_A2DP_SBC_SNR = 0x02, /* allocation_method, do not need to shift */ 144 BT_AUDIO_A2DP_SBC_LOUDNESS = 0x01, /* Default, most headphone only support Loudness */ 145 BT_AUDIO_A2DP_SBC_ALLOCATION_ALL = 0x03 146 }; 147 148 #define BT_AUDIO_A2DP_SBC_MINBITPOOL 0x02 149 #define BT_AUDIO_A2DP_SBC_MAXBITPOOL 0x44 150 151 /* MPEG12 capabilitis */ 152 /* chnl_mode */ 153 #define BT_AUDIO_A2DP_MPEG12_JOINTSTEREO 0x01 154 #define BT_AUDIO_A2DP_MPEG12_STEREO 0x02 155 #define BT_AUDIO_A2DP_MPEG12_DUAL 0x04 156 #define BT_AUDIO_A2DP_MPEG12_MONO 0x08 157 /* crc */ 158 #define BT_AUDIO_A2DP_MPEG12_CRCSUPPORT 0x01 159 /* layer */ 160 #define BT_AUDIO_A2DP_MPEG12_LAYER1 0x04 161 #define BT_AUDIO_A2DP_MPEG12_LAYER2 0x02 162 #define BT_AUDIO_A2DP_MPEG12_LAYER3 0x01 163 /* sample_frequency */ 164 #define BT_AUDIO_A2DP_MPEG12_FS48000 0x01 165 #define BT_AUDIO_A2DP_MPEG12_FS44100 0x02 166 #define BT_AUDIO_A2DP_MPEG12_FS32000 0x04 167 #define BT_AUDIO_A2DP_MPEG12_FS24000 0x08 168 #define BT_AUDIO_A2DP_MPEG12_FS22050 0x10 169 #define BT_AUDIO_A2DP_MPEG12_FS16000 0x20 170 171 /** 172 * @if Eng 173 * @brief MPEG12 MPF2 support. 174 * @else 175 * @brief 支持MPEG12 MPF2。 176 * @endif 177 */ 178 #define BT_AUDIO_A2DP_MPEG12_MPF2SUPPORT 0x01 179 /* bitrate */ 180 #define BT_AUDIO_A2DP_MPEG12_BITRATE0000 0x0001 /* free */ 181 #define BT_AUDIO_A2DP_MPEG12_BITRATE0001 0x0002 /* 32Kbps for MPEG-1 layer 3 */ 182 #define BT_AUDIO_A2DP_MPEG12_BITRATE0010 0x0004 /* 40Kbps for MPEG-1 layer 3 */ 183 #define BT_AUDIO_A2DP_MPEG12_BITRATE0011 0x0008 /* 48Kbps for MPEG-1 layer 3 */ 184 #define BT_AUDIO_A2DP_MPEG12_BITRATE0100 0x0010 /* 56Kbps for MPEG-1 layer 3 */ 185 #define BT_AUDIO_A2DP_MPEG12_BITRATE0101 0x0020 /* 64Kbps for MPEG-1 layer 3 */ 186 #define BT_AUDIO_A2DP_MPEG12_BITRATE0110 0x0040 /* 80Kbps for MPEG-1 layer 3 */ 187 #define BT_AUDIO_A2DP_MPEG12_BITRATE0111 0x0080 /* 96Kbps for MPEG-1 layer 3 */ 188 #define BT_AUDIO_A2DP_MPEG12_BITRATE1000 0x0100 /* 112Kbps for MPEG-1 layer 3 */ 189 #define BT_AUDIO_A2DP_MPEG12_BITRATE1001 0x0200 /* 128Kbps for MPEG-1 layer 3 */ 190 #define BT_AUDIO_A2DP_MPEG12_BITRATE1010 0x0400 /* 160Kbps for MPEG-1 layer 3 */ 191 #define BT_AUDIO_A2DP_MPEG12_BITRATE1011 0x0800 /* 192Kbps for MPEG-1 layer 3 */ 192 #define BT_AUDIO_A2DP_MPEG12_BITRATE1100 0x1000 /* 224Kbps for MPEG-1 layer 3 */ 193 #define BT_AUDIO_A2DP_MPEG12_BITRATE1101 0x2000 /* 256Kbps for MPEG-1 layer 3 */ 194 #define BT_AUDIO_A2DP_MPEG12_BITRATE1110 0x4000 /* 320Kbps for MPEG-1 layer 3 */ 195 /* vbr */ 196 #define BT_AUDIO_A2DP_MPEG12_VBRSUPPORT 0x01 197 198 /* MPEG24(AAC) capabilitis */ 199 #define BT_AUDIO_A2DP_AAC_SF8000 0x0800 200 #define BT_AUDIO_A2DP_AAC_SF11025 0x0400 201 #define BT_AUDIO_A2DP_AAC_SF12000 0x0200 202 #define BT_AUDIO_A2DP_AAC_SF16000 0x0100 203 #define BT_AUDIO_A2DP_AAC_SF22050 0x0080 204 #define BT_AUDIO_A2DP_AAC_SF24000 0x0040 205 #define BT_AUDIO_A2DP_AAC_SF32000 0x0020 206 #define BT_AUDIO_A2DP_AAC_SF44100 0x0010 207 #define BT_AUDIO_A2DP_AAC_SF48000 0x0008 208 #define BT_AUDIO_A2DP_AAC_SF64000 0x0004 209 #define BT_AUDIO_A2DP_AAC_SF88200 0x0002 210 #define BT_AUDIO_A2DP_AAC_SF96000 0x0001 211 #define BT_AUDIO_A2DP_AAC_SFSEPALL 0x0FFF 212 213 /* MPEG AAC Sampling Frequency */ 214 #define BT_AUDIO_A2DP_SMAPLE_RATE8000 8000 215 #define BT_AUDIO_A2DP_SMAPLE_RATE11025 11025 216 #define BT_AUDIO_A2DP_SMAPLE_RATE12000 12000 217 #define BT_AUDIO_A2DP_SMAPLE_RATE16000 16000 218 #define BT_AUDIO_A2DP_SMAPLE_RATE22050 22050 219 #define BT_AUDIO_A2DP_SMAPLE_RATE24000 24000 220 #define BT_AUDIO_A2DP_SMAPLE_RATE32000 32000 221 #define BT_AUDIO_A2DP_SMAPLE_RATE44100 44100 222 #define BT_AUDIO_A2DP_SMAPLE_RATE48000 48000 223 #define BT_AUDIO_A2DP_SMAPLE_RATE64000 64000 224 #define BT_AUDIO_A2DP_SMAPLE_RATE88200 88200 225 #define BT_AUDIO_A2DP_SMAPLE_RATE96000 96000 226 227 /** 228 * @if Eng 229 * @brief MPEG AAC Object type MPEG2_LC. 230 * @else 231 * @brief MPEG AAC Object type MPEG2_LC。 232 * @endif 233 */ 234 #define BT_AUDIO_A2DP_AAC_MPEG2_LC 0x80 235 236 /** 237 * @if Eng 238 * @brief MPEG AAC Object type MPEG4_LC。. 239 * @else 240 * @brief MPEG AAC Object type MPEG4_LC。 241 * @endif 242 */ 243 #define BT_AUDIO_A2DP_AAC_MPEG4_LC 0x40 244 245 /** 246 * @if Eng 247 * @brief MPEG AAC Object type MPEG4_LTP. 248 * @else 249 * @brief MPEG AAC Object type MPEG4_LTP 250 * @endif 251 */ 252 #define BT_AUDIO_A2DP_AAC_MPEG4_LTP 0x20 253 254 /** 255 * @if Eng 256 * @brief MPEG AAC Object type MPEG4_SCALABLE. 257 * @else 258 * @brief MPEG AAC Object type MPEG4_SCALABLE 259 * @endif 260 */ 261 #define BT_AUDIO_A2DP_AAC_MPEG4_SCALABLE 0x10 262 263 /** 264 * @if Eng 265 * @brief MPEG AAC Object type OBJECT_SEPALL. 266 * @else 267 * @brief MPEG AAC Object type OBJECT_SEPALL。 268 * @endif 269 */ 270 #define BT_AUDIO_A2DP_AAC_OBJECT_SEPALL 0xF0 271 272 /** 273 * @if Eng 274 * @brief MPEG AAC Channels 1. 275 * @else 276 * @brief MPEG AAC Channels 1。 277 * @endif 278 */ 279 #define BT_AUDIO_A2DP_AAC_CH_1 0x02 280 281 /** 282 * @if Eng 283 * @brief MPEG AAC Channels 2. 284 * @else 285 * @brief MPEG AAC Channels 2。 286 * @endif 287 */ 288 #define BT_AUDIO_A2DP_AAC_CH_2 0x01 289 290 /** 291 * @if Eng 292 * @brief MPEG AAC VBR Support. 293 * @else 294 * @brief 支持MPEG AAC VBR。 295 * @endif 296 */ 297 #define BT_AUDIO_A2DP_AAC_VBR 0x01 298 299 /** 300 * @if Eng 301 * @brief MPEG AAC NOVBR Support. 302 * @else 303 * @brief 支持MPEG AAC NOVBR。 304 * @endif 305 */ 306 #define BT_AUDIO_A2DP_AAC_NOVBR 0x00 307 308 /** 309 * @if Eng 310 * @brief Define of A2DP codec parameters. 311 * @else 312 * @brief A2DP 编码格式参数定义。 313 * @endif 314 */ 315 typedef struct { 316 td_u8 codec_type; /*!< @if Eng codec type. 317 @else 编码格式类型。 @endif */ 318 td_u8 cap_len; /*!< @if Eng codec cap len. 319 @else 编码格式能力集长度。 @endif */ 320 td_u16 payload; /*!< @if Eng Max payload supportet by btc. 321 @else btc最大支持载荷。 @endif */ 322 td_u8 codec_caps[BT_A2DP_CODECCAPS_MAX_LEN]; /*!< @if Eng codec bt_a2dp_sbc_codec_caps, bt_a2dp_mpeg24_codec_caps 323 @else codec bt_a2dp_sbc_codec_caps, bt_a2dp_mpeg24_codec_caps。 324 @endif */ 325 } bt_a2dp_codec_param; 326 327 /* SBC codec 信息 *//** 328 * @if Eng 329 * @brief SBC codec info. 330 * @else 331 * @brief SBC编码格式信息。 332 * @endif 333 */ 334 typedef struct { 335 td_u32 sample_frequency; /*!< @if Eng Sample frequency, unit Hz. 336 @else 采样频率,单位Hz。 @endif */ 337 td_u8 chnl_mode; /*!< @if Eng See A2DP_CODEC_CHANNEL_MODE_MONO. 338 @else 参考A2DP_CODEC_CHANNEL_MODE_MONO。 @endif */ 339 td_u8 block_length; /*!< @if Eng Block length, value 4 8 12 16. 340 @else 块长度, 取值 4 8 12 16。 @endif */ 341 td_u8 subband; /*!< @if Eng Num of subband, value 4 or 8. 342 @else 子带个数, 取值 4 or 8。 @endif */ 343 td_u8 alloc_method; /*!< @if Eng See A2DP_SBC_ALLOC_METHOD_LOUNDNESS. 344 @else 参考A2DP_SBC_ALLOC_METHOD_LOUNDNESS。 @endif */ 345 td_u8 min_bitpool; /*!< @if Eng Min bitpool value 2~250. 346 @else 最位池,取值 2~250。 @endif */ 347 td_u8 max_bitpool; /*!< @if Eng Max bitpool value 2~250. 348 @else 最位池,值 2~250。 @endif */ 349 } bt_a2dp_sbc_codec_caps; 350 351 /** 352 * @if Eng 353 * @brief MPEG4 AAC ISO 14496-3 codec info. 354 * @else 355 * @brief MPEG4 AAC ISO 14496-3编码格式信息。 356 * @endif 357 */ 358 typedef struct { 359 td_u32 sample_frequency; 360 td_u32 bit_rate; 361 td_u8 channels; 362 td_u8 object_type; 363 td_u8 rfa; 364 td_u8 vbr; 365 } bt_a2dp_mpeg24_codec_caps; 366 367 /** 368 * @if Eng 369 * @brief Define of Bluetooth Audio Channel event type. 370 * @else 371 * @brief 蓝牙音频通道事件类型定义。 372 * @endif 373 */ 374 typedef enum { 375 BT_AUDIO_A2DP_STREAM_CREATE, /* A2DP流创建,数据为流handle,长度为sizeof(td_pvoid) */ 376 BT_AUDIO_A2DP_STREAM_OPENED, /* A2DP流打开,数据为 bt_audio_a2dp_stream_open_data,长度为sizeof(td_pvoid) */ 377 BT_AUDIO_A2DP_STREAM_STRAT, /* A2DP流开始,数据为流handle,长度为sizeof(td_pvoid) */ 378 BT_AUDIO_A2DP_STREAM_SUSPENDED, /* A2DP流暂停,数据为流handle,长度为sizeof(td_pvoid) */ 379 BT_AUDIO_A2DP_STREAM_CLOSED, /* A2DP流关闭,数据为流handle,长度为sizeof(td_pvoid) */ 380 BT_AUDIO_A2DP_STREAM_CONFIG_CHANGE, /* A2DP流参数变更,数据结构为 bt_audio_a2dp_config_chg_data */ 381 BT_AUDIO_SCO_CONN_ESTABLISHED, /* SCO连接建立,数据为流handle,长度为sizeof(td_pvoid) */ 382 BT_AUDIO_SCO_CONN_RELEASED, /* SCO连接释放,数据为流handle,长度为sizeof(td_pvoid) */ 383 } bt_audio_event_type; 384 385 /** 386 * @if Eng 387 * @brief Define of a2dp stream open event data. 388 * @else 389 * @brief A2DP流打开事件数据。 390 * @endif 391 */ 392 typedef struct { 393 td_pvoid stream_hdl; 394 td_u16 stream_mtu; 395 td_u16 frame_size; 396 td_u8 num_frame; 397 td_u8 pad; 398 td_u16 pad1; 399 } bt_audio_a2dp_stream_open_data; 400 401 /** 402 * @if Eng 403 * @brief Define of a2dp config change data. 404 * @else 405 * @brief A2DP流参数变更事件数据。 406 * @endif 407 */ 408 typedef struct { 409 td_pvoid stream_hdl; 410 bt_a2dp_codec_param codec; 411 } bt_audio_a2dp_config_chg_data; 412 413 /** 414 * @if Eng 415 * @brief Define of audio port parameter type. 416 * @else 417 * @brief 音频端口类型定义。 418 * @endif 419 */ 420 typedef enum { 421 A2DP, 422 SCO_IN, 423 SCO_OUT, 424 BT_AUDIO_PORT_MAX 425 } bt_audio_port_type; 426 427 /** 428 * @if Eng 429 * @brief Audio port parameters. 430 * @else 431 * @brief 音频端口参数。 432 * @endif 433 */ 434 typedef struct { 435 bt_audio_port_type port_type; /*!< @if Eng Audio port parameter type. 436 @else 音频端口参数类型。 @endif */ 437 union { 438 td_u32 share_mem_id; /*!< @if Eng Share memery ID. 439 @else 共享内存ID。 @endif */ 440 }; 441 } bt_audio_port_params; 442 443 /** 444 * @if Eng 445 * @brief Callback invoked in response to a2dp state event changed. 446 * @par Description: 447 * When registered, the bts uses this callback to deliver a2dp state event 448 * after state event changed. 449 * @attention 1. This function is called in bts context, should not be blocked or do long time waiting. 450 * @attention 2. The memories of <devices> are requested and freed by the bts automatically. 451 * @param [in] type A2dp state event. See @ref bt_audio_event_type 452 * @param [in] data Data carry in the a2dpstate event. 453 * @param [in] size Data size carry in the a2dpstate event. 454 * @param [in] context Context carry in the a2dpstate event. 455 * @retval No return value. See @ref void 456 * @else 457 * @brief A2dp 状态事件改变回调函数。 458 * @par 说明: 459 * 注册该回调函数之后,BTS每次完成a2dp状态更新后调用该接口反馈结果给上层。 460 * @attention 1. 该回调函数运行于bts线程,不能阻塞或长时间等待。 461 * @attention 2. <devices>由bts申请内存,也由bts释放,回调中不应释放。 462 * @param [in] type A2dp状态事件。参考 @ref bt_audio_event_type 463 * @param [in] data A2dp状态事件携带的数据。 464 * @param [in] size A2dp状态事件携带的数据大小。 465 * @param [in] context A2dp状态事件携带的上下文。 466 * @retval 无返回值。参考 @ref void 467 * @endif 468 * @par Dependency: 469 * @li bt_audio_hal_interface.h 470 */ 471 typedef td_void (*bt_audio_listener_cb)(bt_audio_event_type type, const td_void *data, int32_t size, td_void *context); 472 473 /** 474 * @if Eng 475 * @brief Use this funtion to register callback function of audio listener. 476 * @par Description: 477 * Use this funtion to register callback function of audio listener. 478 * @param [in] cb A poniter of the callback function of audio listener. See @ref bt_audio_listener_cb 479 * @retval #EXT_ERR_SUCCESS Success. 480 * @retval Other Failure. For details, see @ref ext_errno 481 * @else 482 * @brief 注册音频监听回调。 483 * @par 说明: 484 * 注册音频监听回调。 485 * @param [in] cb 音频监听回调函数指针。 486 * @retval #EXT_ERR_SUCCESS 成功。 487 * @retval Other 失败,参考 @ref ext_errno 488 * @endif 489 * @par Dependency: 490 * @li bt_audio_hal_interface.h 491 */ 492 td_u32 bt_register_audio_listener(bt_audio_listener_cb cb, td_void *context); 493 494 /** 495 * @if Eng 496 * @brief Use this funtion to deregister callback function of audio listener. 497 * @par Description: 498 * Use this funtion to deregister callback function of audio listener. 499 * @param [in] cb A poniter of the callback function of audio listener. See @ref bt_audio_listener_cb 500 * @retval #EXT_ERR_SUCCESS Success. 501 * @retval Other Failure. For details, see @ref ext_errno 502 * @else 503 * @brief 取消注册音频监听回调。 504 * @par 说明: 505 * 取消注册音频监听回调。 506 * @param [in] cb 音频监听回调函数指针。 507 * @retval #EXT_ERR_SUCCESS 成功。 508 * @retval Other 失败,参考 @ref ext_errno 509 * @endif 510 * @par Dependency: 511 * @li bt_audio_hal_interface.h 512 */ 513 td_u32 bt_deregister_audio_listener(bt_audio_listener_cb cb); 514 515 /** 516 * @if Eng 517 * @brief Use this funtion to start Bluetooth Audio Channel Data Transfer. 518 * @par Description: 519 * Use this funtion to start Bluetooth Audio Channel Data Transfer. 520 * @param [in] stream_hdl A handle of the stream. 521 * @retval #EXT_ERR_SUCCESS Success. 522 * @retval Other Failure. For details, see @ref ext_errno 523 * @else 524 * @brief 启动蓝牙音频通道数据传输。 525 * @par 说明: 526 * 启动蓝牙音频通道数据传输。 527 * @param [in] stream_hdl 流句柄。 528 * @retval #EXT_ERR_SUCCESS 成功。 529 * @retval Other 失败,参考 @ref ext_errno 530 * @endif 531 * @par Dependency: 532 * @li bt_audio_hal_interface.h 533 */ 534 td_u32 bt_start_audio_stream(td_pvoid stream_hdl); 535 536 /** 537 * @if Eng 538 * @brief Use this funtion to pause Bluetooth Audio Channel Data Transfer. 539 * @par Description: 540 * Use this funtion to pause Bluetooth Audio Channel Data Transfer. 541 * @param [in] stream_hdl A handle of the stream. 542 * @retval #EXT_ERR_SUCCESS Success. 543 * @retval Other Failure. For details, see @ref ext_errno 544 * @else 545 * @brief 暂停蓝牙音频通道数据传输。 546 * @par 说明: 547 * 暂停蓝牙音频通道数据传输。 548 * @param [in] stream_hdl 流句柄。 549 * @retval #EXT_ERR_SUCCESS 成功。 550 * @retval Other 失败,参考 @ref ext_errno 551 * @endif 552 * @par Dependency: 553 * @li bt_audio_hal_interface.h 554 */ 555 td_u32 bt_pause_audio_stream(td_pvoid stream_hdl); 556 557 /** 558 * @if Eng 559 * @brief Use this funtion to stop Bluetooth Audio Channel Data Transfer. 560 * @par Description: 561 * Use this funtion to stop Bluetooth Audio Channel Data Transfer. 562 * @param [in] stream_hdl A handle of the stream. 563 * @retval #EXT_ERR_SUCCESS Success. 564 * @retval Other Failure. For details, see @ref ext_errno 565 * @else 566 * @brief 停止蓝牙音频通道数据传输。 567 * @par 说明: 568 * 停止蓝牙音频通道数据传输。 569 * @param [in] stream_hdl 流句柄。 570 * @retval #EXT_ERR_SUCCESS 成功。 571 * @retval Other 失败,参考 @ref ext_errno 572 * @endif 573 * @par Dependency: 574 * @li bt_audio_hal_interface.h 575 */ 576 td_u32 bt_stop_audio_stream(td_pvoid stream_hdl); 577 578 /** 579 * @if Eng 580 * @brief Use this funtion to attach an Audio Port to a Bluetooth Audio Channel. 581 * @par Description: 582 * Use this funtion to attach an Audio Port to a Bluetooth Audio Channel. 583 * @param [in] stream_hdl A handle of the stream. 584 * @param [in] param BT audio port parameter type. See @ref bt_audio_port_params 585 * @retval #EXT_ERR_SUCCESS Success. 586 * @retval Other Failure. For details, see @ref ext_errno 587 * @else 588 * @brief 为蓝牙音频通道绑定音频端口。 589 * @par 说明: 590 * 为蓝牙音频通道绑定音频端口。 591 * @param [in] stream_hdl 流句柄。 592 * @param [in] param 蓝牙音频端口参数。参考 @ref bt_audio_port_params 593 * @retval #EXT_ERR_SUCCESS 成功。 594 * @retval Other 失败,参考 @ref ext_errno 595 * @endif 596 * @par Dependency: 597 * @li bt_audio_hal_interface.h 598 */ 599 td_u32 bt_attach_audio_port(td_pvoid stream_hdl, bt_audio_port_params *param); 600 601 /** 602 * @if Eng 603 * @brief Use this funtion to detach an Audio Port to a Bluetooth Audio Channel. 604 * @par Description: 605 * Use this funtion to detach an Audio Port to a Bluetooth Audio Channel. 606 * @param [in] stream_hdl A handle of the stream. 607 * @param [in] param BT audio port parameter type. See @ref bt_audio_port_params 608 * @retval #EXT_ERR_SUCCESS Success. 609 * @retval Other Failure. For details, see @ref ext_errno 610 * @else 611 * @brief 为蓝牙音频通道取消绑定音频端口。 612 * @par 说明: 613 * 为蓝牙音频通道取消绑定音频端口。 614 * @param [in] stream_hdl 流句柄。 615 * @param [in] param 蓝牙音频端口参数。参考 @ref bt_audio_port_params 616 * @retval #EXT_ERR_SUCCESS 成功。 617 * @retval Other 失败,参考 @ref ext_errno 618 * @endif 619 * @par Dependency: 620 * @li bt_audio_hal_interface.h 621 */ 622 td_u32 bt_detach_audio_port(td_pvoid stream_hdl, bt_audio_port_params *param); 623 624 /** 625 * @if Eng 626 * @brief Use this funtion to set the parameters of a specified Bluetooth audio channel. 627 * @par Description: 628 * Use this funtion to set the parameters of a specified Bluetooth audio channel, 629 such as the encoding format and data format. 630 * @attention 1. When the A2DP is not connected, you can directly set this parameter. 631 * @attention 2. When A2DP is connected, there are two scenarios: 632 * @attention 2.1. Codec switchover of different categories, this parameter needs to be set when the stream is closed 633 * @attention and then renegotiation is performed when the stream is opened. The renegotiation result may not be 634 * @attention the same as the setting. 635 * @attention 2.2. Codec switchover of the same category, this parameter needs to be set when the stream is in the 636 * @attention OPEN state. That is, if the stream is in the START state, you need to suspend the codec and then 637 * @attention invoke this interface to set the codec. 638 * @param [in] stream_hdl A handle of the stream. 639 * @param [in] type BT audio parameter type. See @ref bt_audio_param_type 640 * @param [in] params The parameters of Bluetooth audio channel. 641 * @param [in] len The parameters lenght of Bluetooth audio channel. 642 * @retval #EXT_ERR_SUCCESS Success. 643 * @retval Other Failure. For details, see @ref ext_errno 644 * @else 645 * @brief 设置指定蓝牙音频通道的参数。 646 * @par 说明: 647 * 目前只支持设置A2DP CODEC。 648 * @attention 1. 在A2DP未连接情况下,可直接设置。 649 * @attention 2. 在A2DP已连接情况下,分两种场景: 650 * @attention 2.1. 不同大类codec切换:需要在stream CLOSE的状态下设置,然后在OPEN时进行重新协商,且不保证重协商结果 651 * @attention 与设置完全一致。 652 * @attention 2.2. 相同大类codec切换:需要在stream OPEN的状态下设置,即若处于START状态需要先SUSPEND再调本接口设置。 653 * @param [in] stream_hdl 流句柄。 654 * @param [in] type 蓝牙音频参数类型。参考 @ref bt_audio_param_type 655 * @param [in] params 设置的蓝牙音频通道的参数。 656 * @param [in] len 设置的蓝牙音频通道的参数长度。 657 * @retval #EXT_ERR_SUCCESS 成功。 658 * @retval Other 失败,参考 @ref ext_errno 659 * @endif 660 * @par Dependency: 661 * @li bt_audio_hal_interface.h 662 */ 663 td_u32 bt_set_audio_parameter(td_pvoid stream_hdl, bt_audio_param_type type, td_void *params, int32_t len); 664 665 /** 666 * @if Eng 667 * @brief Use this funtion to get the parameters of a specified Bluetooth audio channel. 668 * @par Description: 669 * Use this funtion to get the parameters of a specified Bluetooth audio channel, 670 such as the encoding format and data format. 671 * @param [in] stream_hdl A handle of the stream. 672 * @param [in] type BT audio parameter type. See @ref bt_audio_param_type 673 * @param [out] params The parameters of Bluetooth audio channel. 674 * @param [out] len The parameters lenght of Bluetooth audio channel. 675 * @retval #EXT_ERR_SUCCESS Success. 676 * @retval Other Failure. For details, see @ref ext_errno 677 * @else 678 * @brief 获取指定蓝牙音频通道的参数。 679 * @par 说明: 680 * 获取指定蓝牙音频通道的参数,如编码格式、数据格式等。 681 * @param [in] stream_hdl 流句柄。 682 * @param [in] type 蓝牙音频参数类型。参考 @ref bt_audio_param_type 683 * @param [out] params 获取的蓝牙音频通道的参数。 684 * @param [out] len 获取的蓝牙音频通道的参数长度。 685 * @retval #EXT_ERR_SUCCESS 成功。 686 * @retval Other 失败,参考 @ref ext_errno 687 * @endif 688 * @par Dependency: 689 * @li bt_audio_hal_interface.h 690 */ 691 td_u32 bt_get_audio_parameter(td_pvoid stream_hdl, bt_audio_param_type type, td_void *params, int32_t len); 692 693 /** 694 * @} 695 */ 696 697 #ifdef __cplusplus 698 } 699 #endif 700 #endif /* BT_AUDIO_HAL_INTERFACE_H */ 701