From 8e9f4e719de9cf20dd1bf94adf9635c469c2e093 Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Tue, 25 Aug 2020 20:15:32 +0800 Subject: [PATCH] 1.fix test case dummy 2.fix sink send media control ESP_A2D_MEDIA_CHECK_SRC_RDY --- .../btc/profile/std/a2dp/btc_a2dp_control.c | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_control.c b/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_control.c index d5e1b1ca80..df5775f72c 100644 --- a/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_control.c +++ b/components/bt/host/bluedroid/btc/profile/std/a2dp/btc_a2dp_control.c @@ -29,6 +29,7 @@ #include "btc_a2dp_sink.h" #include "btc_a2dp_source.h" #include "esp_a2dp_api.h" +#include "btc_avrc.h" #if BTC_AV_INCLUDED @@ -59,11 +60,13 @@ static inline void a2dp_cmd_acknowledge(int cmd, int status) void btc_a2dp_control_command_ack(int status) { - /* sanity check */ + /* sanity check if (btc_aa_ctrl_cb.a2dp_cmd_pending == ESP_A2D_MEDIA_CTRL_NONE) { APPL_TRACE_ERROR("warning : no command pending, ignore ack"); return; - } + } + */ + /* clear pending */ int cmd = btc_aa_ctrl_cb.a2dp_cmd_pending; @@ -126,19 +129,25 @@ void btc_a2dp_control_media_ctrl(esp_a2d_media_ctrl_t ctrl) switch (ctrl) { case ESP_A2D_MEDIA_CTRL_CHECK_SRC_RDY: -#if BTC_AV_SRC_INCLUDED - if (btc_a2dp_source_is_task_shutting_down()) { - btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); - } else if ((btc_av_stream_ready() == TRUE) || - (btc_av_stream_started_ready() == TRUE)) { - /* check whether av is ready to setup a2dp datapath */ - btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); +//#if BTC_AV_SRC_INCLUDED + if (btc_av_get_service_id() == BTA_A2DP_SOURCE_SERVICE_ID) { + if (btc_a2dp_source_is_task_shutting_down()) { + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); + } else if ((btc_av_stream_ready() == TRUE) || + (btc_av_stream_started_ready() == TRUE)) { + /* check whether av is ready to setup a2dp datapath */ + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); + } else { + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); + } } else { btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); } -#else /* BTC_AV_SRC_INCLUDED */ - btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); -#endif /* #if BTC_AV_SRC_INCLUDED */ +//#else /* BTC_AV_SRC_INCLUDED */ + //if (btc_av_get_service_id() == BTA_A2DP_SINK_SERVICE_ID) { + //btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); + //} / +//#endif /* #if BTC_AV_SRC_INCLUDED */ break; case ESP_A2D_MEDIA_CTRL_START: if (btc_av_stream_ready() == TRUE ) { @@ -161,34 +170,44 @@ void btc_a2dp_control_media_ctrl(esp_a2d_media_ctrl_t ctrl) case ESP_A2D_MEDIA_CTRL_STOP: #if BTC_AV_SRC_INCLUDED if (btc_av_get_peer_sep() == AVDT_TSEP_SNK && !btc_a2dp_source_is_streaming() && - btc_av_get_service_id() == BTA_A2DP_SOURCE_SERVICE_ID) { + btc_av_get_service_id() == BTA_A2DP_SOURCE_SERVICE_ID && btc_av_is_peer_edr() == TRUE) { /* we are already stopped, just ack back*/ - btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); break; + /* check if connect a2dp */ + } else if (btc_av_is_peer_edr() == FALSE){ + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); } #endif /* BTC_AV_SRC_INCLUDED */ btc_dispatch_sm_event(BTC_AV_STOP_STREAM_REQ_EVT, NULL, 0); #if (BTC_AV_SINK_INCLUDED == TRUE) - if (btc_av_get_peer_sep() == AVDT_TSEP_SRC && btc_av_get_service_id() == BTA_A2DP_SINK_SERVICE_ID) { + if (btc_av_get_peer_sep() == AVDT_TSEP_SRC && btc_av_get_service_id() == BTA_A2DP_SINK_SERVICE_ID && + btc_av_is_peer_edr() == TRUE) { btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); + } else if (btc_av_is_peer_edr() == FALSE){ + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); } #endif break; - case ESP_A2D_MEDIA_CTRL_SUSPEND: /* local suspend */ if (btc_av_stream_started_ready()) { btc_dispatch_sm_event(BTC_AV_SUSPEND_STREAM_REQ_EVT, NULL, 0); #if (BTC_AV_SINK_INCLUDED == TRUE) - if (btc_av_get_peer_sep() == AVDT_TSEP_SRC && btc_av_get_service_id() == BTA_A2DP_SINK_SERVICE_ID) { + if (btc_av_get_peer_sep() == AVDT_TSEP_SRC && btc_av_get_service_id() == BTA_A2DP_SINK_SERVICE_ID && + btc_av_is_peer_edr() == TRUE) { btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); + } else if (btc_av_is_peer_edr() == FALSE) { + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); } -#endif - } else { +#endif + } else if (btc_av_is_peer_edr() == TRUE){ /* we are not in started state; just ack back ok. This can happen if we are remotely suspended; clear REMOTE SUSPEND Flag */ btc_av_clear_remote_suspend_flag(); btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_SUCCESS); + } else { + btc_a2dp_control_command_ack(ESP_A2D_MEDIA_CTRL_ACK_FAILURE); } break;