#include "btc_util.h"
#include "esp_a2dp_api.h"
#include "sbc_encoder.h"
+#include "future.h"
+#include <assert.h>
#if BTC_AV_SRC_INCLUDED
static tBTC_A2DP_SOURCE_CB btc_aa_src_cb;
static int btc_a2dp_source_state = BTC_A2DP_SOURCE_STATE_OFF;
+static future_t *btc_a2dp_source_future = NULL;
static xTaskHandle btc_aa_src_task_hdl = NULL;
static QueueHandle_t btc_aa_src_data_queue = NULL;
static QueueHandle_t btc_aa_src_ctrl_queue = NULL;
APPL_TRACE_EVENT("## A2DP SOURCE STOP MEDIA THREAD ##\n");
// Exit thread
+ btc_a2dp_source_state = BTC_A2DP_SOURCE_STATE_SHUTTING_DOWN;
+ btc_a2dp_source_future = future_new();
+ assert(btc_a2dp_source_future);
btc_a2dp_source_ctrl_post(BTC_MEDIA_TASK_CLEAN_UP, NULL);
+ future_await(btc_a2dp_source_future);
+ btc_a2dp_source_future = NULL;
vTaskDelete(btc_aa_src_task_hdl);
btc_aa_src_task_hdl = NULL;
*******************************************************************************/
BT_HDR *btc_a2dp_source_audio_readbuf(void)
{
+ if (btc_a2dp_source_state != BTC_A2DP_SOURCE_STATE_ON){
+ return NULL;
+ }
return fixed_queue_try_dequeue(btc_aa_src_cb.TxAaQ);
}
log_tstamps_us("media task tx timer");
#if (BTA_AV_INCLUDED == TRUE)
+ if (btc_a2dp_source_state != BTC_A2DP_SOURCE_STATE_ON){
+ return;
+ }
+
if (btc_aa_src_cb.is_tx_timer == TRUE) {
btc_a2dp_source_send_aa_frame();
} else {
static void btc_a2dp_source_thread_cleanup(UNUSED_ATTR void *context)
{
- /* make sure no channels are restarted while shutting down */
- btc_a2dp_source_state = BTC_A2DP_SOURCE_STATE_SHUTTING_DOWN;
-
btc_a2dp_control_set_datachnl_stat(FALSE);
/* Clear media task flag */
btc_a2dp_source_state = BTC_A2DP_SOURCE_STATE_OFF;
btc_a2dp_control_cleanup();
fixed_queue_free(btc_aa_src_cb.TxAaQ, osi_free_func);
+
+ future_ready(btc_a2dp_source_future, NULL);
}
#endif /* BTC_AV_INCLUDED */