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