From c04a4a8527352ce20ae660e0c2063e1de2126aa8 Mon Sep 17 00:00:00 2001 From: baohongde Date: Fri, 1 Jun 2018 10:57:22 +0800 Subject: [PATCH] component/bt: Fix bug a2dp assert warn after connected --- components/bt/bluedroid/bta/av/bta_av_aact.c | 27 ++++++++++--------- .../bt/bluedroid/bta/av/include/bta_av_int.h | 1 + 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/components/bt/bluedroid/bta/av/bta_av_aact.c b/components/bt/bluedroid/bta/av/bta_av_aact.c index 5c0d15de7..9ac791c6f 100644 --- a/components/bt/bluedroid/bta/av/bta_av_aact.c +++ b/components/bt/bluedroid/bta/av/bta_av_aact.c @@ -815,7 +815,7 @@ void bta_av_role_res (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; if (p_data->role_res.hci_status != HCI_SUCCESS) { p_scb->role &= ~BTA_AV_ROLE_START_INT; - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_idle(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); /* start failed because of role switch. */ start.chnl = p_scb->chnl; start.status = BTA_AV_FAIL_ROLE; @@ -956,7 +956,7 @@ void bta_av_do_disc_a2d (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) p_scb->sec_mask = p_data->api_open.sec_mask; p_scb->use_rc = p_data->api_open.use_rc; - bta_sys_app_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_sys_app_open(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), p_scb->app_id, p_scb->peer_addr); /* allocate discovery database */ if (p_scb->p_disc_db == NULL) { @@ -1330,7 +1330,7 @@ void bta_av_str_opened (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) L2CA_SetTxPriority(p_scb->l2c_cid, L2CAP_CHNL_PRIORITY_MEDIUM); L2CA_SetChnlFlushability (p_scb->l2c_cid, TRUE); - bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_sys_conn_open(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), p_scb->app_id, p_scb->peer_addr); memset(&p_scb->q_info, 0, sizeof(tBTA_AV_Q_INFO)); p_scb->l2c_bufs = 0; @@ -1933,8 +1933,7 @@ void bta_av_do_start (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) if ((p_scb->started == FALSE) && ((p_scb->role & BTA_AV_ROLE_START_INT) == 0)) { p_scb->role |= BTA_AV_ROLE_START_INT; - bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); - + bta_sys_busy(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); AVDT_StartReq(&p_scb->avdt_handle, 1); } else if (p_scb->started) { p_scb->role |= BTA_AV_ROLE_START_INT; @@ -1969,7 +1968,7 @@ void bta_av_str_stopped (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) APPL_TRACE_ERROR("bta_av_str_stopped:audio_open_cnt=%d, p_data %p", bta_av_cb.audio_open_cnt, p_data); - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_idle(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || bta_av_cb.audio_open_cnt == 1) { policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; } @@ -2239,7 +2238,7 @@ void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) if (p_data && (p_data->hdr.offset != BTA_AV_RS_NONE)) { p_scb->wait &= ~BTA_AV_WAIT_ROLE_SW_BITS; if (p_data->hdr.offset == BTA_AV_RS_FAIL) { - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_idle(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); start.chnl = p_scb->chnl; start.status = BTA_AV_FAIL_ROLE; start.hndl = p_scb->hndl; @@ -2275,9 +2274,9 @@ void bta_av_start_ok (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) } /* tell role manager to check M/S role */ - bta_sys_conn_open(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_sys_conn_open(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), p_scb->app_id, p_scb->peer_addr); - bta_sys_busy(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_busy(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); if (p_scb->media_type == AVDT_MEDIA_AUDIO) { /* in normal logic, conns should be bta_av_cb.audio_count - 1, @@ -2364,7 +2363,7 @@ void bta_av_start_failed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) UNUSED(p_data); if (p_scb->started == FALSE && p_scb->co_started == FALSE) { - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_idle(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); notify_start_failed(p_scb); } @@ -2413,7 +2412,8 @@ void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) event = BTA_AV_OPEN_EVT; p_scb->open_status = BTA_AV_SUCCESS; - bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_sys_conn_close(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), p_scb->app_id, p_scb->peer_addr); + bta_av_cleanup(p_scb, p_data); (*bta_av_cb.p_cback)(event, &data); } else { @@ -2432,7 +2432,8 @@ void bta_av_str_closed (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) data.close.disc_rsn = p_scb->disc_rsn; event = BTA_AV_CLOSE_EVT; - bta_sys_conn_close(BTA_ID_AV, p_scb->app_id, p_scb->peer_addr); + bta_sys_conn_close(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), p_scb->app_id, p_scb->peer_addr); + bta_av_cleanup(p_scb, p_data); (*bta_av_cb.p_cback)(event, &data); } @@ -2506,7 +2507,7 @@ void bta_av_suspend_cfm (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data) p_scb->cong = FALSE; } - bta_sys_idle(BTA_ID_AV, bta_av_cb.audio_open_cnt, p_scb->peer_addr); + bta_sys_idle(TSEP_TO_SYS_ID(p_scb->seps[p_scb->sep_idx].tsep), bta_av_cb.audio_open_cnt, p_scb->peer_addr); if ((bta_av_cb.features & BTA_AV_FEAT_MASTER) == 0 || bta_av_cb.audio_open_cnt == 1) { policy |= HCI_ENABLE_MASTER_SLAVE_SWITCH; } diff --git a/components/bt/bluedroid/bta/av/include/bta_av_int.h b/components/bt/bluedroid/bta/av/include/bta_av_int.h index 3a13c0cc5..0c9da001c 100644 --- a/components/bt/bluedroid/bta/av/include/bta_av_int.h +++ b/components/bt/bluedroid/bta/av/include/bta_av_int.h @@ -153,6 +153,7 @@ enum { #define BTA_AV_MULTI_AV_SUPPORTED 0x01 #define BTA_AV_MULTI_AV_IN_USE 0x02 +#define TSEP_TO_SYS_ID(x) ((x) == AVDT_TSEP_SRC ? BTA_ID_AV : BTA_ID_AVK) /***************************************************************************** ** Data types