forked from espressif/esp-idf
Add A2DP paused state into schm
This commit is contained in:
@@ -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
|
||||
{
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
Submodule components/esp32/lib updated: d77d0a481d...eea59e2150
Reference in New Issue
Block a user