1 /*
2  * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /*******************************************************************************
8  *
9  *  Filename:      btc_a2dp_source.h
10  *
11  *******************************************************************************/
12 
13 #ifndef __BTC_A2DP_SOURCE_H__
14 #define __BTC_A2DP_SOURCE_H__
15 
16 #include <stdbool.h>
17 #include "common/bt_target.h"
18 #include "bta/bta_api.h"
19 #include "btc_av_api.h"
20 #include "esp_a2dp_api.h"
21 
22 #if BTC_AV_SRC_INCLUDED
23 /*******************************************************************************
24  **  Data types
25  *******************************************************************************/
26 
27 /* tBTC_MEDIA_INIT_AUDIO msg structure */
28 typedef struct {
29     BT_HDR hdr;
30     UINT16 SamplingFreq; /* 16k, 32k, 44.1k or 48k*/
31     UINT8 ChannelMode; /* mono, dual, stereo or joint stereo*/
32     UINT8 NumOfSubBands; /* 4 or 8 */
33     UINT8 NumOfBlocks; /* 4, 8, 12 or 16*/
34     UINT8 AllocationMethod; /* loudness or SNR*/
35     UINT16 MtuSize; /* peer mtu size */
36 } tBTC_MEDIA_INIT_AUDIO;
37 
38 /* tBTC_MEDIA_UPDATE_AUDIO msg structure */
39 typedef struct {
40     BT_HDR hdr;
41     UINT16 MinMtuSize; /* Minimum peer mtu size */
42     UINT8 MaxBitPool; /* Maximum peer bitpool */
43     UINT8 MinBitPool; /* Minimum peer bitpool */
44 } tBTC_MEDIA_UPDATE_AUDIO;
45 
46 /* tBTC_MEDIA_INIT_AUDIO_FEEDING msg structure */
47 typedef struct {
48     BT_HDR hdr;
49     tBTC_AV_FEEDING_MODE feeding_mode;
50     tBTC_AV_MEDIA_FEEDINGS feeding;
51 } tBTC_MEDIA_INIT_AUDIO_FEEDING;
52 
53 /*******************************************************************************
54  **  Public functions
55  *******************************************************************************/
56 
57 /*******************************************************************************
58  **
59  ** Function         btc_a2dp_source_startup
60  **
61  ** Description      Initialize and startup the A2DP source module. This function
62  **                  should be called by the BTC AV state machine prior to using
63  **                  the module
64  **
65  ** Returns          TRUE is success
66  **
67  *******************************************************************************/
68 bool btc_a2dp_source_startup(void);
69 
70 /*******************************************************************************
71  **
72  ** Function         btc_a2dp_source_shutdown
73  **
74  ** Description      Shutdown and cleanup the A2DP source module.
75  **
76  *******************************************************************************/
77 void btc_a2dp_source_shutdown(void);
78 
79 /*******************************************************************************
80  **
81  ** Function         btc_a2dp_source_enc_init_req
82  **
83  ** Description      Request to initialize the media task encoder
84  **
85  ** Returns          TRUE is success
86  **
87  *******************************************************************************/
88 BOOLEAN btc_a2dp_source_enc_init_req(tBTC_MEDIA_INIT_AUDIO *p_msg);
89 
90 /*******************************************************************************
91  **
92  ** Function         btc_a2dp_source_enc_udpate_req
93  **
94  ** Description      Request to update the media task encoder
95  **
96  ** Returns          TRUE is success
97  **
98  *******************************************************************************/
99 BOOLEAN btc_a2dp_source_enc_update_req(tBTC_MEDIA_UPDATE_AUDIO *p_msg);
100 
101 
102 /*******************************************************************************
103  **
104  ** Function         btc_a2dp_source_start_audio_req
105  **
106  ** Description      Request to start audio encoding task
107  **
108  ** Returns          TRUE is success
109  **
110  *******************************************************************************/
111 BOOLEAN btc_a2dp_source_start_audio_req(void);
112 
113 /*******************************************************************************
114  **
115  ** Function         btc_a2dp_source_stop_audio_req
116  **
117  ** Description      Request to stop audio encoding task
118  **
119  ** Returns          TRUE is success
120  **
121  *******************************************************************************/
122 BOOLEAN btc_a2dp_source_stop_audio_req(void);
123 
124 /*******************************************************************************
125  **
126  ** Function         btc_a2dp_source_tx_flush_req
127  **
128  ** Description      Request to flush audio encoding pipe
129  **
130  ** Returns          TRUE is success
131  **
132  *******************************************************************************/
133 BOOLEAN btc_a2dp_source_tx_flush_req(void);
134 
135 /*******************************************************************************
136  **
137  ** Function         btc_a2dp_source_audio_readbuf
138  **
139  ** Description      Read an audio buffer from the BTC media TX queue
140  **
141  ** Returns          pointer on a aa buffer ready to send
142  **
143  *******************************************************************************/
144 BT_HDR *btc_a2dp_source_audio_readbuf(void);
145 
146 /*******************************************************************************
147  **
148  ** Function         btc_a2dp_source_audio_feeding_init_req
149  **
150  ** Description      Request to initialize audio feeding
151  **
152  ** Returns          TRUE if success
153  **
154  *******************************************************************************/
155 
156 BOOLEAN btc_a2dp_source_audio_feeding_init_req(tBTC_MEDIA_INIT_AUDIO_FEEDING *p_msg);
157 
158 /*******************************************************************************
159  **
160  ** Function         btc_a2dp_source_is_streaming
161  **
162  ** Description      Check whether A2DP source is in streaming state
163  **
164  *******************************************************************************/
165 bool btc_a2dp_source_is_streaming(void);
166 
167 /*******************************************************************************
168  **
169  ** Function         btc_a2dp_source_is_task_shutting_down
170  **
171  ** Description      Check whether A2DP source media task is shutting down
172  **
173  *******************************************************************************/
174 bool btc_a2dp_source_is_task_shutting_down(void);
175 
176 
177 /*******************************************************************************
178  **
179  ** Function         btc_a2dp_source_on_idle
180  **
181  ** Description      Request 'idle' request from BTC AV state machine during
182  **                  initialization
183  **
184  *******************************************************************************/
185 void btc_a2dp_source_on_idle(void);
186 
187 /*******************************************************************************
188  **
189  ** Function         btc_a2dp_source_on_stopped
190  **
191  ** Description      Process 'stop' request from the BTC AV state machine to stop
192  **                  A2DP streaming
193  **
194  *******************************************************************************/
195 void btc_a2dp_source_on_stopped(tBTA_AV_SUSPEND *p_av);
196 
197 /*******************************************************************************
198  **
199  ** Function         btc_a2dp_source_on_suspended
200  **
201  ** Description      Process 'suspend' request from the BTC AV state machine to stop
202  **                  A2DP streaming
203  **
204  *******************************************************************************/
205 void btc_a2dp_source_on_suspended(tBTA_AV_SUSPEND *p_av);
206 
207 /*******************************************************************************
208  **
209  ** Function         btc_a2dp_source_setup_codec
210  **
211  ** Description      initialize the encoder parameters
212  **
213  *******************************************************************************/
214 void btc_a2dp_source_setup_codec(void);
215 
216 /*******************************************************************************
217  **
218  ** Function         btc_a2dp_source_set_tx_flush
219  **
220  ** Description      enable/disable discarding of transmitted frames
221  **
222  *******************************************************************************/
223 void btc_a2dp_source_set_tx_flush(BOOLEAN enable);
224 
225 /*******************************************************************************
226  **
227  ** Function         btc_a2dp_source_encoder_update
228  **
229  ** Description      update changed SBC encoder parameters
230  **
231  *******************************************************************************/
232 void btc_a2dp_source_encoder_update(void);
233 
234 /*****************************************************************************
235 **
236 ** Function        btc_source_report_delay_value
237 **
238 ** Description     Report sink delay report value
239 **
240 *******************************************************************************/
241 void btc_source_report_delay_value(UINT16 delay_value);
242 
243 #endif /* #if BTC_AV_SRC_INCLUDED */
244 
245 #endif /* __BTC_A2DP_SOURCE_H__ */
246