/******************************************************************************* ** ** Function bta_hf_client_sco_conn_close ** ** Description ** ** ** Returns void ** *******************************************************************************/ void bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA *p_data) { APPL_TRACE_DEBUG1("%s", __FUNCTION__); /* clear current scb */ bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; /* retry_with_sco_only, will be set only when initiator ** and HFClient is first trying to establish an eSCO connection */ if (bta_hf_client_cb.scb.retry_with_sco_only && bta_hf_client_cb.scb.svc_conn) { bta_hf_client_sco_create(TRUE); } else { bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_CLOSE_E); bta_sys_sco_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); /* call app callback */ bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); if (bta_hf_client_cb.scb.sco_close_rfc == TRUE) { bta_hf_client_cb.scb.sco_close_rfc = FALSE; bta_hf_client_rfc_do_close(p_data); } } bta_hf_client_cb.scb.retry_with_sco_only = FALSE; }
/******************************************************************************* ** ** Function bta_hf_client_start_close ** ** Description Start the process of closing SCO and RFCOMM connection. ** ** ** Returns void ** *******************************************************************************/ void bta_hf_client_start_close(tBTA_HF_CLIENT_DATA *p_data) { /* Take the link out of sniff and set L2C idle time to 0 */ bta_dm_pm_active(bta_hf_client_cb.scb.peer_addr); L2CA_SetIdleTimeoutByBdAddr(bta_hf_client_cb.scb.peer_addr, 0, BT_TRANSPORT_BR_EDR); /* if SCO is open close SCO and wait on RFCOMM close */ if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_OPEN_ST) { bta_hf_client_cb.scb.sco_close_rfc = TRUE; } else { bta_hf_client_rfc_do_close(p_data); } /* always do SCO shutdown to handle all SCO corner cases */ bta_hf_client_sco_shutdown(NULL); }