From c8e5433da3ff9b9d8bf4b0dca0872d458bddb647 Mon Sep 17 00:00:00 2001 From: baohongde Date: Tue, 24 Dec 2019 22:11:14 +0800 Subject: [PATCH] Add A2DP paused state into schm --- components/bt/bluedroid/bta/av/bta_av_act.c | 24 +++++++++++++++++++ components/bt/bluedroid/bta/dm/bta_dm_main.c | 16 ++++++++++++- .../bt/bluedroid/bta/dm/include/bta_dm_int.h | 1 + .../bt/bluedroid/bta/include/bta/bta_api.h | 2 ++ .../esp32/include/esp_coexist_internal.h | 1 + components/esp32/lib | 2 +- 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/components/bt/bluedroid/bta/av/bta_av_act.c b/components/bt/bluedroid/bta/av/bta_av_act.c index 195af55a1c..540f12edda 100644 --- a/components/bt/bluedroid/bta/av/bta_av_act.c +++ b/components/bt/bluedroid/bta/av/bta_av_act.c @@ -903,6 +903,30 @@ void bta_av_rc_msg(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data) (p_vendor->company_id == AVRC_CO_METADATA)) { av.meta_msg.p_msg = &p_data->rc_msg.msg; evt = BTA_AV_META_MSG_EVT; + + tAVRC_MSG_VENDOR *vendor_msg = &av.meta_msg.p_msg->vendor; + if (vendor_msg->hdr.ctype == AVRC_RSP_CHANGED) { + if (vendor_msg->p_vendor_data[0] == AVRC_PDU_REGISTER_NOTIFICATION){ + uint8_t event_id = vendor_msg->p_vendor_data[4]; + if(event_id == 1){ //ESP_AVRC_RN_PLAY_STATUS_CHANGE + uint8_t play_status = vendor_msg->p_vendor_data[5]; + switch(play_status) { + case 0: //stopped + case 2: //paused * + BTA_DmCoexEventTrigger(BTA_COEX_EVT_A2DP_PAUSED_ENTER); + break; + case 1: //playing * + BTA_DmCoexEventTrigger(BTA_COEX_EVT_A2DP_PAUSED_EXIT); + break; + case 3: //FWD_seek + case 4: //REV_seek + break; + default: + break; + } + } + } + } } else #endif { diff --git a/components/bt/bluedroid/bta/dm/bta_dm_main.c b/components/bt/bluedroid/bta/dm/bta_dm_main.c index a47ab7b8d3..5b068279cc 100644 --- a/components/bt/bluedroid/bta/dm/bta_dm_main.c +++ b/components/bt/bluedroid/bta/dm/bta_dm_main.c @@ -479,9 +479,11 @@ void BTA_DmCoexEventTrigger(uint32_t event) break; case BTA_COEX_EVT_STREAMING_STARTED: bta_dm_cb.coex_streaming_st = true; + bta_dm_cb.coex_a2dp_paused_st = false; break; case BTA_COEX_EVT_STREAMING_STOPPED: bta_dm_cb.coex_streaming_st = false; + bta_dm_cb.coex_a2dp_paused_st = false; break; case BTA_COEX_EVT_SNIFF_ENTER: bta_dm_cb.coex_sniff_st = true; @@ -489,6 +491,12 @@ void BTA_DmCoexEventTrigger(uint32_t event) case BTA_COEX_EVT_SNIFF_EXIT: bta_dm_cb.coex_sniff_st = false; break; + case BTA_COEX_EVT_A2DP_PAUSED_ENTER: + bta_dm_cb.coex_a2dp_paused_st = true; + break; + case BTA_COEX_EVT_A2DP_PAUSED_EXIT: + bta_dm_cb.coex_a2dp_paused_st = false; + break; default: break; } @@ -499,11 +507,15 @@ void BTA_DmCoexEventTrigger(uint32_t event) bt_status = coex_schm_status_get(COEX_SCHM_ST_TYPE_BT) & (~COEX_SCHM_BT_ST_ISCAN); } + bt_status = bt_status & (~COEX_SCHM_BT_ST_A2DP_PAUSED); + // acl st may overwrite the wifi_percent set by coex_scan_st if (bta_dm_cb.coex_acl_st) { bt_status = bt_status | COEX_SCHM_BT_ST_ACL_CONNECTED; - if (bta_dm_cb.coex_streaming_st) { + if (bta_dm_cb.coex_a2dp_paused_st) { + bt_status = bt_status | COEX_SCHM_BT_ST_A2DP_PAUSED; + } else if (bta_dm_cb.coex_streaming_st) { bt_status = bt_status | COEX_SCHM_BT_ST_A2DP_STREAMING; } else if (bta_dm_cb.coex_sniff_st) { bt_status = (bt_status & (~COEX_SCHM_BT_ST_A2DP_STREAMING)) | COEX_SCHM_BT_ST_SNIFF; @@ -517,4 +529,6 @@ void BTA_DmCoexEventTrigger(uint32_t event) coex_schm_status_set(COEX_SCHM_ST_TYPE_BT, bt_status); APPL_TRACE_EVENT("bt_status %02x", bt_status); + printf("bt_status %02x\n", bt_status); } + diff --git a/components/bt/bluedroid/bta/dm/include/bta_dm_int.h b/components/bt/bluedroid/bta/dm/include/bta_dm_int.h index d1b524bd35..d6e54b2107 100644 --- a/components/bt/bluedroid/bta/dm/include/bta_dm_int.h +++ b/components/bt/bluedroid/bta/dm/include/bta_dm_int.h @@ -1053,6 +1053,7 @@ typedef struct { bool coex_acl_st; bool coex_streaming_st; bool coex_sniff_st; + bool coex_a2dp_paused_st; } tBTA_DM_CB; #ifndef BTA_DM_SDP_DB_SIZE diff --git a/components/bt/bluedroid/bta/include/bta/bta_api.h b/components/bt/bluedroid/bta/include/bta/bta_api.h index a72bc1251f..73782024a3 100644 --- a/components/bt/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/bluedroid/bta/include/bta/bta_api.h @@ -2625,6 +2625,8 @@ enum { BTA_COEX_EVT_STREAMING_STOPPED, BTA_COEX_EVT_SNIFF_ENTER, BTA_COEX_EVT_SNIFF_EXIT, + BTA_COEX_EVT_A2DP_PAUSED_ENTER, + BTA_COEX_EVT_A2DP_PAUSED_EXIT, }; extern void BTA_DmCoexEventTrigger(uint32_t event); diff --git a/components/esp32/include/esp_coexist_internal.h b/components/esp32/include/esp_coexist_internal.h index d33390b41c..2c60698787 100644 --- a/components/esp32/include/esp_coexist_internal.h +++ b/components/esp32/include/esp_coexist_internal.h @@ -51,6 +51,7 @@ typedef enum { #define COEX_SCHM_BT_ST_ACL_CONNECTED 0x04 #define COEX_SCHM_BT_ST_SNIFF 0x08 #define COEX_SCHM_BT_ST_A2DP_STREAMING 0x10 +#define COEX_SCHM_BT_ST_A2DP_PAUSED 0x20 /** * @brief Pre-Init software coexist diff --git a/components/esp32/lib b/components/esp32/lib index d77d0a481d..eea59e2150 160000 --- a/components/esp32/lib +++ b/components/esp32/lib @@ -1 +1 @@ -Subproject commit d77d0a481db05bd76d58a95506d889e068289170 +Subproject commit eea59e215009a396d21e2b3cdaa92ddd45211fa2