Add A2DP paused state into schm

This commit is contained in:
baohongde
2019-12-24 22:11:14 +08:00
parent 896ba3df56
commit c8e5433da3
6 changed files with 44 additions and 2 deletions

View File

@@ -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
{

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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