/******************************************************************************* ** ** 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; }
static void bta_hf_client_handle_error(tBTA_HF_CLIENT_AT_RESULT_TYPE type, UINT16 cme) { APPL_TRACE_DEBUG("%s %u %u", __FUNCTION__, type, cme); bta_hf_client_stop_at_resp_timer(); if (!bta_hf_client_cb.scb.svc_conn) { bta_hf_client_slc_seq(TRUE); return; } switch (bta_hf_client_cb.scb.at_cb.current_cmd) { case BTA_HF_CLIENT_AT_BIA: break; case BTA_HF_CLIENT_AT_BCC: case BTA_HF_CLIENT_AT_BCS: bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); break; case BTA_HF_CLIENT_AT_CLIP: //last cmd is post slc seq if (bta_hf_client_cb.scb.send_at_reply == FALSE) { bta_hf_client_cb.scb.send_at_reply = TRUE; } break; default: if (bta_hf_client_cb.scb.send_at_reply) { bta_hf_client_at_result(type, cme); } break; } bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; bta_hf_client_send_queued_at(); }
/******************************************************************************* ** ** Function bta_hf_client_sco_conn_open ** ** Description ** ** ** Returns void ** *******************************************************************************/ void bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA *p_data) { APPL_TRACE_DEBUG1("%s", __FUNCTION__); bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_OPEN_E); bta_sys_sco_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); if (bta_hf_client_cb.scb.negotiated_codec == BTM_SCO_CODEC_MSBC) { bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT); } else { bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_OPEN_EVT); } bta_hf_client_cb.scb.retry_with_sco_only = FALSE; }