13fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/****************************************************************************** 23fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 31025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * Copyright (c) 2014 The Android Open Source Project 43fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * Copyright (C) 2004-2012 Broadcom Corporation 53fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 63fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License"); 73fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * you may not use this file except in compliance with the License. 83fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * You may obtain a copy of the License at: 93fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * http://www.apache.org/licenses/LICENSE-2.0 113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * Unless required by applicable law or agreed to in writing, software 133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS, 143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * See the License for the specific language governing permissions and 163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * limitations under the License. 173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta ******************************************************************************/ 193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_int.h" 211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include <bt_trace.h> 221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include <string.h> 231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bt_utils.h" 243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_NO_EDR_ESCO (BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | \ 261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | \ 271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | \ 281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV5) 293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 301025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic const tBTM_ESCO_PARAMS bta_hf_client_esco_params[] = { 311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* SCO CVSD */ 321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .rx_bw = BTM_64KBITS_RATE, 341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .tx_bw = BTM_64KBITS_RATE, 351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .max_latency = 10, 361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .voice_contfmt = BTM_VOICE_SETTING_CVSD, 371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .packet_types = (BTM_SCO_LINK_ONLY_MASK | 381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_2_EV3 | 391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | 401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | 411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), 421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .retrans_effort = BTM_ESCO_RETRANS_POWER, 431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta }, 441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* ESCO CVSD */ 451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .rx_bw = BTM_64KBITS_RATE, 471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .tx_bw = BTM_64KBITS_RATE, 481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .max_latency = 10, 491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .voice_contfmt = BTM_VOICE_SETTING_CVSD, 501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Allow controller to use all types available except 5-slot EDR */ 511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .packet_types = (BTM_SCO_LINK_ALL_PKT_MASK | 521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | 531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), 541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .retrans_effort = BTM_ESCO_RETRANS_POWER, 551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta }, 561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* ESCO mSBC */ 571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .rx_bw = BTM_64KBITS_RATE, 591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .tx_bw = BTM_64KBITS_RATE, 601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .max_latency = 13, 611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .voice_contfmt = BTM_VOICE_SETTING_TRANS, 621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Packet Types : EV3 + 2-EV3 */ 631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .packet_types = (BTM_SCO_PKT_TYPES_MASK_EV3 | 641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV3 | 651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_2_EV5 | 661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_SCO_PKT_TYPES_MASK_NO_3_EV5), 671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta .retrans_effort = BTM_ESCO_RETRANS_QUALITY, 681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 711025687c6679608fe9df918f37011414ffc72b62Hemant Guptaenum 723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_LISTEN_E, 741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_OPEN_E, /* open request */ 751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CLOSE_E, /* close request */ 761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_SHUTDOWN_E, /* shutdown request */ 771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CONN_OPEN_E, /* sco opened */ 781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CONN_CLOSE_E, /* sco closed */ 793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_remove_sco 843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Removes the specified SCO from the system. 861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** If only_active is TRUE, then SCO is only removed if connected 873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns BOOLEAN - TRUE if Sco removal was started 893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 911025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic BOOLEAN bta_hf_client_sco_remove(BOOLEAN only_active) 923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BOOLEAN removed_started = FALSE; 941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTM_STATUS status; 953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 96e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s %d", __FUNCTION__, only_active); 973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) 993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta status = BTM_RemoveSco(bta_hf_client_cb.scb.sco_idx); 1011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 102e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s idx 0x%04x, status:0x%x", __FUNCTION__, bta_hf_client_cb.scb.sco_idx, status); 1031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (status == BTM_CMD_STARTED) 1053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta removed_started = TRUE; 1071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 1081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* If no connection reset the sco handle */ 1091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else if ( (status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR) ) 1101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 1111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; 1123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return removed_started; 1153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_cback_sco 1203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Call application callback function with SCO event. 1223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1271025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_cback_sco(UINT8 event) 1283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 1303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 1323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* call app cback */ 1341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(event, (tBTA_HF_CLIENT *) &evt); 1351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 1363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 1381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 1391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_conn_rsp 1401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 1411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Process the SCO connection request 1421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 1431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 1441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 1451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 1461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 1471025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_sco_conn_rsp(tBTM_ESCO_CONN_REQ_EVT_DATA *p_data) 1481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 1491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTM_ESCO_PARAMS resp; 1501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UINT8 hci_status = HCI_SUCCESS; 1511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 152e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 1533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) 1553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (p_data->link_type == BTM_LINK_TYPE_SCO) 1573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta resp = bta_hf_client_esco_params[0]; 1593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 1613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta resp = bta_hf_client_esco_params[bta_hf_client_cb.scb.negotiated_codec]; 1633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* tell sys to stop av if any */ 1661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 1673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 1693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta hci_status = HCI_ERR_HOST_REJECT_DEVICE; 1713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); 1743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_connreq_cback 1793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description BTM eSCO connection requests and eSCO change requests 1811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Only the connection requests are processed by BTA. 1823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1861025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_esco_connreq_cback(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA *p_data) 1873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 188e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s %d", __FUNCTION__, event); 1891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (event != BTM_ESCO_CONN_REQ_EVT) 1913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return; 1933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* TODO check remote bdaddr, should allow connect only from device with 1961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * active SLC */ 1973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_idx = p_data->conn_evt.sco_inx; 1993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_conn_rsp(&p_data->conn_evt); 2013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 2033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_conn_cback 2081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 2091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description BTM SCO connection callback. 2103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2151025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_sco_conn_cback(UINT16 sco_idx) 2163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UINT8 *rem_bd; 2183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 219e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s %d", __FUNCTION__, sco_idx); 2203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta rem_bd = BTM_ReadScoBdAddr(sco_idx); 2223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (rem_bd && bdcmp(bta_hf_client_cb.scb.peer_addr, rem_bd) == 0 && 2241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.svc_conn && bta_hf_client_cb.scb.sco_idx == sco_idx) 2251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 2265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); 2275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_buf->event = BTA_HF_CLIENT_SCO_OPEN_EVT; 2285fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle; 2295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov bta_sys_sendmsg(p_buf); 2303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* no match found; disconnect sco, init sco variables */ 2321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 2333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 2351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_RemoveSco(sco_idx); 2363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_disc_cback 2423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description BTM SCO disconnection callback. 2443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2491025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_sco_disc_cback(UINT16 sco_idx) 2503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2515fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov APPL_TRACE_DEBUG("%s %d", __func__, sco_idx); 2523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov if (bta_hf_client_cb.scb.sco_idx == sco_idx) { 2545fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov BT_HDR *p_buf = (BT_HDR *)osi_malloc(sizeof(BT_HDR)); 2555fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_buf->event = BTA_HF_CLIENT_SCO_CLOSE_EVT; 2565fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov p_buf->layer_specific = bta_hf_client_cb.scb.conn_handle;; 2575fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov bta_sys_sendmsg(p_buf); 2581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 2593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_create_sco 2643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description 2663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2711025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_sco_create(BOOLEAN is_orig) 2723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta tBTM_STATUS status; 2743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT8 *p_bd_addr = NULL; 2753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta tBTM_ESCO_PARAMS params; 2761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 277e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s %d", __FUNCTION__, is_orig); 2783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Make sure this sco handle is not already in use */ 2801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) 2813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 282e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("%s: Index 0x%04x already in use", __FUNCTION__, 2831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_idx); 2843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta return; 2853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta params = bta_hf_client_esco_params[1]; 2883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* if initiating set current scb and peer bd addr */ 2903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (is_orig) 2913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Attempt to use eSCO if remote host supports HFP >= 1.5 */ 2931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.peer_version >= HFP_VERSION_1_5 && !bta_hf_client_cb.scb.retry_with_sco_only) 2943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BTM_SetEScoMode(BTM_LINK_TYPE_ESCO, ¶ms); 2963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* If ESCO or EDR ESCO, retry with SCO only in case of failure */ 2973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if((params.packet_types & BTM_ESCO_LINK_ONLY_MASK) 2981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta ||!((params.packet_types & ~(BTM_ESCO_LINK_ONLY_MASK | BTM_SCO_LINK_ONLY_MASK)) ^ BTA_HF_CLIENT_NO_EDR_ESCO)) 2993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.retry_with_sco_only = TRUE; 301e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("Setting retry_with_sco_only to TRUE"); 3023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 3053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if(bta_hf_client_cb.scb.retry_with_sco_only) 307e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("retrying with SCO only"); 3081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.retry_with_sco_only = FALSE; 3093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BTM_SetEScoMode(BTM_LINK_TYPE_SCO, ¶ms); 3113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* tell sys to stop av if any */ 3141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_use(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 3153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 3173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.retry_with_sco_only = FALSE; 3193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_bd_addr = bta_hf_client_cb.scb.peer_addr; 3223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta status = BTM_CreateSco(p_bd_addr, is_orig, params.packet_types, 3241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta &bta_hf_client_cb.scb.sco_idx, bta_hf_client_sco_conn_cback, 3251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_disc_cback); 3261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (status == BTM_CMD_STARTED && !is_orig) 3273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if(!BTM_RegForEScoEvts(bta_hf_client_cb.scb.sco_idx, bta_hf_client_esco_connreq_cback)) 329e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s SCO registration success", __FUNCTION__); 3303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 332e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_API("%s: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", 3331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta __FUNCTION__, is_orig, bta_hf_client_cb.scb.sco_idx, 3341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta status, params.packet_types); 3353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_event 3413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Handle SCO events 3433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3481025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_sco_event(UINT8 event) 3493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 350e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s state: %d event: %d", __FUNCTION__, 3511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state, event); 3523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta switch (bta_hf_client_cb.scb.sco_state) 3543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_ST: 3563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 3573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_LISTEN_E: 3593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* create sco listen connection */ 3601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 3611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 3623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 365e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTDOWN_ST: Ignoring event %d", event); 3663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_LISTEN_ST: 3713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 3723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_LISTEN_E: 3743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* create sco listen connection (Additional channel) */ 3751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 3763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPEN_E: 3793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* remove listening connection */ 3801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_remove(FALSE); 3813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* create sco connection to peer */ 3831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(TRUE); 3841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 3853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 3883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* remove listening connection */ 3891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_remove(FALSE); 3903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 3923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSE_E: 3953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* remove listening connection */ 3963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Ignore the event. We need to keep listening SCO for the active SLC */ 397e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", event); 3983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 3993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* sco failed; create sco listen connection */ 4021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 4031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 4043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 407e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", event); 4083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPENING_ST: 4133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 4143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4151025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSE_E: 4161025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_CL_ST; 4173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 4213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 4241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPEN_ST; 4253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* sco failed; create sco listen connection */ 4291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 4301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 4313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 434e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPENING_ST: Ignoring event %d", event); 4353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPEN_CL_ST: 4403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 4413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPEN_E: 4431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 4443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 4483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 4513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* close sco connection */ 4521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_remove(TRUE); 4533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 4553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* sco failed; create sco listen connection */ 4593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 4613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 464e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_CL_ST: Ignoring event %d", event); 4653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPEN_ST: 4703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 4713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSE_E: 4733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* close sco connection if active */ 4741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_sco_remove(TRUE)) 4753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 4773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* remove all listening connections */ 4821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_remove(FALSE); 4833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 4853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* peer closed sco; create sco listen connection */ 4891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 4901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 4913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 494e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_ST: Ignoring event %d", event); 4953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 4983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSING_ST: 5003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 5013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_OPEN_E: 5031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSE_OP_ST; 5043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 5071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 5083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 5113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* peer closed sco; create sco listen connection */ 5121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(FALSE); 5133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 5153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 518e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSING_ST: Ignoring event %d", event); 5193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSE_OP_ST: 5243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 5253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CLOSE_E: 5271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 5283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 5311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 5323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 5353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* open sco connection */ 5361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(TRUE); 5371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 5383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSE_OP_ST: Ignoring event %d", event); 5423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTTING_ST: 5473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 5483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 5503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* close sco connection; wait for conn close event */ 5511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_remove(TRUE); 5523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 5551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 5563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 5591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 5603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 563e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTTING_ST: Ignoring event %d", event); 5643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 5693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_listen 5763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Initialize SCO listener 5783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 5813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5831025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_listen(tBTA_HF_CLIENT_DATA *p_data) 5843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 5853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 5863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 587e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 5883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_LISTEN_E); 5903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_shutdown 5953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description 5973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6021025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_shutdown(tBTA_HF_CLIENT_DATA *p_data) 6033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 6053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 606e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 6073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_SHUTDOWN_E); 6093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_conn_open 6143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description 6163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6211025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA *p_data) 6223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 6243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 625e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 6263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_OPEN_E); 6283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 6303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.negotiated_codec == BTM_SCO_CODEC_MSBC) 6321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 6331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT); 6341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 6351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 6361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 6371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_OPEN_EVT); 6381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 6393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.retry_with_sco_only = FALSE; 6413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_conn_close 6463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description 6483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6531025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA *p_data) 6543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 655e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 6563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* clear current scb */ 6581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; 6593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* retry_with_sco_only, will be set only when initiator 6611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta ** and HFClient is first trying to establish an eSCO connection */ 6621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.retry_with_sco_only && bta_hf_client_cb.scb.svc_conn) 6633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 6641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_create(TRUE); 6653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 6673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 6681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CONN_CLOSE_E); 6693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 6713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 6733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* call app callback */ 6751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_sco(BTA_HF_CLIENT_AUDIO_CLOSE_EVT); 6763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_close_rfc == TRUE) 6783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 6791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_close_rfc = FALSE; 6801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_rfc_do_close(p_data); 6813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.retry_with_sco_only = FALSE; 6843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_open 6893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description 6913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6961025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_open(tBTA_HF_CLIENT_DATA *p_data) 6973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 6993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 700e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 7011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_OPEN_E); 7033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 7043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 7053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 7063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sco_close 7083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description 7103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 7133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 7151025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sco_close(tBTA_HF_CLIENT_DATA *p_data) 7163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 7171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UNUSED(p_data); 7183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 719e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s 0x%x", __FUNCTION__, bta_hf_client_cb.scb.sco_idx); 7203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 7211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_idx != BTM_INVALID_SCO_INDEX) 7223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 7231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_event(BTA_HF_CLIENT_SCO_CLOSE_E); 7243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 7253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 726