forked from espressif/esp-idf
fix(bt/bluedroid): Fixed some bugs in AVRCP
This commit is contained in:
@@ -135,9 +135,6 @@ void bta_av_del_rc(tBTA_AV_RCB *p_rcb)
|
|||||||
}
|
}
|
||||||
/* else ACP && connected. do not clear the handle yet */
|
/* else ACP && connected. do not clear the handle yet */
|
||||||
AVRC_Close(rc_handle);
|
AVRC_Close(rc_handle);
|
||||||
if (rc_handle == bta_av_cb.rc_acp_handle) {
|
|
||||||
bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE;
|
|
||||||
}
|
|
||||||
APPL_TRACE_EVENT("end del_rc handle: %d status=0x%x, rc_acp_handle:%d, lidx:%d",
|
APPL_TRACE_EVENT("end del_rc handle: %d status=0x%x, rc_acp_handle:%d, lidx:%d",
|
||||||
p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, p_rcb->lidx);
|
p_rcb->handle, p_rcb->status, bta_av_cb.rc_acp_handle, p_rcb->lidx);
|
||||||
}
|
}
|
||||||
@@ -310,7 +307,7 @@ UINT8 bta_av_rc_create(tBTA_AV_CB *p_cb, UINT8 role, UINT8 shdl, UINT8 lidx)
|
|||||||
bda = p_scb->peer_addr;
|
bda = p_scb->peer_addr;
|
||||||
status = BTA_AV_RC_ROLE_INT;
|
status = BTA_AV_RC_ROLE_INT;
|
||||||
} else {
|
} else {
|
||||||
if ((p_rcb = bta_av_get_rcb_by_shdl(shdl)) != NULL ) {
|
if (shdl != 0 && ((p_rcb = bta_av_get_rcb_by_shdl(shdl)) != NULL)) {
|
||||||
APPL_TRACE_ERROR("bta_av_rc_create ACP handle exist for shdl:%d", shdl);
|
APPL_TRACE_ERROR("bta_av_rc_create ACP handle exist for shdl:%d", shdl);
|
||||||
return p_rcb->handle;
|
return p_rcb->handle;
|
||||||
}
|
}
|
||||||
@@ -1703,6 +1700,8 @@ void bta_av_rc_disc_done(tBTA_AV_DATA *p_data)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p_cb->rcb[rc_handle].peer_features = peer_features;
|
p_cb->rcb[rc_handle].peer_features = peer_features;
|
||||||
|
p_cb->rcb[rc_handle].peer_ct_features = peer_ct_features;
|
||||||
|
p_cb->rcb[rc_handle].peer_tg_features = peer_tg_features;
|
||||||
#if BTA_AV_CA_INCLUDED
|
#if BTA_AV_CA_INCLUDED
|
||||||
p_cb->rcb[rc_handle].cover_art_l2cap_psm = obex_l2cap_psm;
|
p_cb->rcb[rc_handle].cover_art_l2cap_psm = obex_l2cap_psm;
|
||||||
#endif
|
#endif
|
||||||
@@ -1785,7 +1784,8 @@ void bta_av_rc_closed(tBTA_AV_DATA *p_data)
|
|||||||
bta_av_del_rc(p_rcb);
|
bta_av_del_rc(p_rcb);
|
||||||
|
|
||||||
/* if the AVRCP is no longer listening, create the listening channel */
|
/* if the AVRCP is no longer listening, create the listening channel */
|
||||||
if (bta_av_cb.rc_acp_handle == BTA_AV_RC_HANDLE_NONE && bta_av_cb.features & BTA_AV_FEAT_RCTG) {
|
if (bta_av_cb.rc_acp_handle == p_msg->handle && bta_av_cb.features & BTA_AV_FEAT_RCTG) {
|
||||||
|
bta_av_cb.rc_acp_handle = BTA_AV_RC_HANDLE_NONE;
|
||||||
bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1);
|
bta_av_rc_create(&bta_av_cb, AVCT_ACP, 0, BTA_AV_NUM_LINKS + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1012,7 +1012,7 @@ void btc_rc_handler(tBTA_AV_EVT event, tBTA_AV *p_data)
|
|||||||
memset(¶m, 0, sizeof(esp_avrc_ct_cb_param_t));
|
memset(¶m, 0, sizeof(esp_avrc_ct_cb_param_t));
|
||||||
param.conn_stat.connected = true;
|
param.conn_stat.connected = true;
|
||||||
memcpy(param.conn_stat.remote_bda, btc_rc_cb.rc_addr, sizeof(esp_bd_addr_t));
|
memcpy(param.conn_stat.remote_bda, btc_rc_cb.rc_addr, sizeof(esp_bd_addr_t));
|
||||||
btc_avrc_tg_cb_to_app(ESP_AVRC_CT_CONNECTION_STATE_EVT, ¶m);
|
btc_avrc_tg_cb_to_app(ESP_AVRC_TG_CONNECTION_STATE_EVT, ¶m);
|
||||||
}
|
}
|
||||||
} while (0);
|
} while (0);
|
||||||
btc_rc_cb.rc_features = p_data->rc_feat.peer_features;
|
btc_rc_cb.rc_features = p_data->rc_feat.peer_features;
|
||||||
|
@@ -430,9 +430,9 @@ BOOLEAN avct_lcb_last_ccb(tAVCT_LCB *p_lcb, tAVCT_CCB *p_ccb_last)
|
|||||||
tAVCT_CCB *p_ccb = &avct_cb.ccb[0];
|
tAVCT_CCB *p_ccb = &avct_cb.ccb[0];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
AVCT_TRACE_WARNING("avct_lcb_last_ccb");
|
AVCT_TRACE_DEBUG("avct_lcb_last_ccb");
|
||||||
for (i = 0; i < AVCT_NUM_CONN; i++, p_ccb++) {
|
for (i = 0; i < AVCT_NUM_CONN; i++, p_ccb++) {
|
||||||
AVCT_TRACE_WARNING("%x: aloc:%d, lcb:%p/%p, ccb:%p/%p",
|
AVCT_TRACE_DEBUG("%x: aloc:%d, lcb:%p/%p, ccb:%p/%p",
|
||||||
i, p_ccb->allocated, p_ccb->p_lcb, p_lcb, p_ccb, p_ccb_last);
|
i, p_ccb->allocated, p_ccb->p_lcb, p_lcb, p_ccb, p_ccb_last);
|
||||||
if (p_ccb->allocated && (p_ccb->p_lcb == p_lcb) && (p_ccb != p_ccb_last)) {
|
if (p_ccb->allocated && (p_ccb->p_lcb == p_lcb) && (p_ccb != p_ccb_last)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
Reference in New Issue
Block a user