• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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