{
if (p_scb->wait & BTA_AV_WAIT_ROLE_SW_STARTED)
{
- p_scb->role &= ~BTA_AV_ROLE_START_INT;
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);
/* start failed because of role switch. */
start.chnl = p_scb->chnl;
AVDT_StartReq(&p_scb->avdt_handle, 1);
}
- else
+ else if (p_scb->started)
{
- bta_av_start_ok(p_scb, NULL);
+ p_scb->role |= BTA_AV_ROLE_START_INT;
+ if ( p_scb->wait == 0 )
+ bta_av_start_ok(p_scb, NULL);
}
APPL_TRACE_DEBUG2("started %d role:x%x", p_scb->started, p_scb->role);
}
BTIF_TRACE_EVENT3("BTA_AV_START_EVT status %d, suspending %d, init %d",
p_av->start.status, p_av->start.suspending, p_av->start.initiator);
- btif_av_cb.flags &= ~BTIF_AV_FLAG_PENDING_START;
if ((p_av->start.status == BTA_SUCCESS) && (p_av->start.suspending == TRUE))
return TRUE;
+ btif_av_cb.flags &= ~BTIF_AV_FLAG_PENDING_START;
btif_a2dp_on_started(&p_av->start);
/* remain in open state if status failed */