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 ******************************************************************************/ 19f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson#include <string.h> 203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 21f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson#include "bt_trace.h" 221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bt_utils.h" 2357f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#include "bta_ag_api.h" 24cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_hf_client_int.h" 2557f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#include "device/include/esco_parameters.h" 26d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2857f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth#define BTA_HF_CLIENT_NO_EDR_ESCO \ 2957f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth (ESCO_PKT_TYPES_MASK_NO_2_EV3 | ESCO_PKT_TYPES_MASK_NO_3_EV3 | \ 3057f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth ESCO_PKT_TYPES_MASK_NO_2_EV5 | ESCO_PKT_TYPES_MASK_NO_3_EV5) 31cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 32cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum { 33cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HF_CLIENT_SCO_LISTEN_E, 34cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HF_CLIENT_SCO_OPEN_E, /* open request */ 35cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HF_CLIENT_SCO_CLOSE_E, /* close request */ 36cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_HF_CLIENT_SCO_SHUTDOWN_E, /* shutdown request */ 374a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo BTA_HF_CLIENT_SCO_CONN_OPEN_E, /* SCO opened */ 384a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo BTA_HF_CLIENT_SCO_CONN_CLOSE_E, /* SCO closed */ 393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_remove_sco 448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Removes the specified SCO from the system. 468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 471baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * Returns bool - true if SCO removal was started 488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 50ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwalstatic bool bta_hf_client_sco_remove(tBTA_HF_CLIENT_CB* client_cb) { 51cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool removed_started = false; 52cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTM_STATUS status; 533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 54ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal APPL_TRACE_DEBUG("%s", __func__); 553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 565eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (client_cb->sco_idx != BTM_INVALID_SCO_INDEX) { 575eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal status = BTM_RemoveSco(client_cb->sco_idx); 58cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 59bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: idx 0x%04x, status:0x%x", __func__, 605eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_idx, status); 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status == BTM_CMD_STARTED) { 63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson removed_started = true; 643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 654a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* If no connection reset the SCO handle */ 66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson else if ((status == BTM_SUCCESS) || (status == BTM_UNKNOWN_ADDR)) { 675eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_idx = BTM_INVALID_SCO_INDEX; 68cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 69cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 70cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return removed_started; 713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_cback_sco 768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Call application callback function with SCO event. 788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 83bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_cback_sco(tBTA_HF_CLIENT_CB* client_cb, uint8_t event) { 84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_HF_CLIENT evt; 853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 86cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(&evt, 0, sizeof(evt)); 87744eeca761b6d52d4e5fbbfa49c2d2adde0e6981Jakub Pawlowski evt.bd_addr = client_cb->peer_addr; 883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 89cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* call app cback */ 905eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal bta_hf_client_app_callback(event, (tBTA_HF_CLIENT*)&evt); 911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_conn_rsp 968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Process the SCO connection request 988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 103bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalstatic void bta_hf_client_sco_conn_rsp(tBTA_HF_CLIENT_CB* client_cb, 104bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTM_ESCO_CONN_REQ_EVT_DATA* p_data) { 10557f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth enh_esco_params_t resp; 106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t hci_status = HCI_SUCCESS; 1071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 1093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1105eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (client_cb->sco_state == BTA_HF_CLIENT_SCO_LISTEN_ST) { 111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_data->link_type == BTM_LINK_TYPE_SCO) { 11257f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); 113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 1144a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo if (client_cb->negotiated_codec == BTA_AG_CODEC_MSBC) { 11557f6508cf7b22788fa2e7a739cec241b785718fbMudumba Ananth resp = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); 1164a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo } else { 1174a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo // default codec 1184a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo resp = esco_parameters_for_codec(ESCO_CODEC_CVSD); 1194a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo } 1203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* tell sys to stop av if any */ 123c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_sco_use(BTA_ID_HS, 1, client_cb->peer_addr); 124cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson hci_status = HCI_ERR_HOST_REJECT_DEVICE; 126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTM_EScoConnRsp(p_data->sco_inx, hci_status, &resp); 1293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_connreq_cback 1348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description BTM eSCO connection requests and eSCO change requests 1368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Only the connection requests are processed by BTA. 1378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hf_client_esco_connreq_cback(tBTM_ESCO_EVT event, 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTM_ESCO_EVT_DATA* p_data) { 143bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: %d", __func__, event); 1441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 145bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 146bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_sco_handle(p_data->conn_evt.sco_inx); 147bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 1484a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo APPL_TRACE_ERROR("%s: wrong SCO handle to control block %d", __func__, 149bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->conn_evt.sco_inx); 150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 151cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 1523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 153bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (event != BTM_ESCO_CONN_REQ_EVT) { 154bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 155bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 1563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 157bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_conn_rsp(client_cb, &p_data->conn_evt); 1583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1595eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 1603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_conn_cback 1658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description BTM SCO connection callback. 1678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hf_client_sco_conn_cback(uint16_t sco_idx) { 173bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: %d", __func__, sco_idx); 174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 175bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = bta_hf_client_find_cb_by_sco_handle(sco_idx); 176bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 177bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong SCO handle to control block %d", __func__, 178bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal sco_idx); 179bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 181bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 182bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 183bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_buf->event = BTA_HF_CLIENT_SCO_OPEN_EVT; 1845eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal p_buf->layer_specific = client_cb->handle; 185bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_sys_sendmsg(p_buf); 1863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_disc_cback 1918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description BTM SCO disconnection callback. 1938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic void bta_hf_client_sco_disc_cback(uint16_t sco_idx) { 199bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: sco_idx %d", __func__, sco_idx); 200bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 201bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = bta_hf_client_find_cb_by_sco_handle(sco_idx); 202bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 203bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, sco_idx); 204bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 206bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 207bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 208bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_buf->event = BTA_HF_CLIENT_SCO_CLOSE_EVT; 2095eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal p_buf->layer_specific = client_cb->handle; 210bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_sys_sendmsg(p_buf); 2113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_create_sco 2168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 2188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 223bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalstatic void bta_hf_client_sco_create(tBTA_HF_CLIENT_CB* client_cb, 224bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bool is_orig) { 225cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTM_STATUS status; 226cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 227bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: %d", __func__, is_orig); 228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2294a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* Make sure this SCO handle is not already in use */ 2305eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (client_cb->sco_idx != BTM_INVALID_SCO_INDEX) { 231cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("%s: Index 0x%04x already in use", __func__, 2325eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_idx); 233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 236fe695a557a92053d4c44428ba08c0b8e945d4711Jack He enh_esco_params_t params = esco_parameters_for_codec(ESCO_CODEC_MSBC_T1); 237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* if initiating set current scb and peer bd addr */ 239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (is_orig) { 240d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He BTM_SetEScoMode(¶ms); 241cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* tell sys to stop av if any */ 242c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_sco_use(BTA_ID_HS, 1, client_cb->peer_addr); 243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 245744eeca761b6d52d4e5fbbfa49c2d2adde0e6981Jakub Pawlowski status = BTM_CreateSco(&client_cb->peer_addr, is_orig, params.packet_types, 246744eeca761b6d52d4e5fbbfa49c2d2adde0e6981Jakub Pawlowski &client_cb->sco_idx, bta_hf_client_sco_conn_cback, 247744eeca761b6d52d4e5fbbfa49c2d2adde0e6981Jakub Pawlowski bta_hf_client_sco_disc_cback); 248cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status == BTM_CMD_STARTED && !is_orig) { 2495eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (!BTM_RegForEScoEvts(client_cb->sco_idx, 250cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_hf_client_esco_connreq_cback)) 251bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_DEBUG("%s: SCO registration success", __func__); 252cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 253cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 254cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_API("%s: orig %d, inx 0x%04x, status 0x%x, pkt types 0x%04x", 2555eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal __func__, is_orig, client_cb->sco_idx, status, 256cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson params.packet_types); 2573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_event 2628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Handle SCO events 2648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 269bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalstatic void bta_hf_client_sco_event(tBTA_HF_CLIENT_CB* client_cb, 270bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal uint8_t event) { 271ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal APPL_TRACE_DEBUG("%s: before state: %d event: %d", __func__, 272ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal client_cb->sco_state, event); 273cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 2745eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal switch (client_cb->sco_state) { 275cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_ST: 276cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 277ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal // For WBS we only listen to SCO requests. Even for outgoing SCO 278ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal // requests we first do a AT+BCC and wait for remote to initiate SCO 279cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_LISTEN_E: 2804a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* create SCO listen connection */ 281bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_create(client_cb, false); 2825eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 283cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 2843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 285ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal // For non WBS cases and enabling outgoing SCO requests we need to force 286ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal // open a SCO channel 287ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal case BTA_HF_CLIENT_SCO_OPEN_E: 288ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal /* remove listening connection */ 289ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal bta_hf_client_sco_remove(client_cb); 290ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal 2914a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* create SCO connection to peer */ 292ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal bta_hf_client_sco_create(client_cb, true); 293ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 294ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal break; 295ad372cfa3376f882046284a5655ed9c6fdf24dafSanket Agarwal 296cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 297cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTDOWN_ST: Ignoring event %d", 298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 299cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 300cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 301cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 302cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 303cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_LISTEN_ST: 304cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 3054a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo case BTA_HF_CLIENT_SCO_LISTEN_E: 3064a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* create SCO listen connection */ 3074a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo bta_hf_client_sco_create(client_cb, false); 3084a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo 309cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPEN_E: 310cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* remove listening connection */ 311ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal bta_hf_client_sco_remove(client_cb); 312cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 3134a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* create SCO connection to peer */ 314bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_create(client_cb, true); 3155eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 316cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 317cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 318cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 319ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal case BTA_HF_CLIENT_SCO_CLOSE_E: 320cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* remove listening connection */ 321ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal bta_hf_client_sco_remove(client_cb); 322cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 3235eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 324cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 325cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 326cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 3274a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* SCO failed; create SCO listen connection */ 328bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_create(client_cb, false); 3295eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 330cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 3313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 333ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal APPL_TRACE_WARNING( 334ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal "%s: BTA_HF_CLIENT_SCO_LISTEN_ST: Ignoring event %d", __func__, 335ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal event); 336cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 337cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 338cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 339cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPENING_ST: 341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 342cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CLOSE_E: 3435eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPEN_CL_ST; 344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 345cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 346cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 3475eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 348cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 349cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 350cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 3515eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPEN_ST; 352cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 353cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 354cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 3554a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* SCO failed; create SCO listen connection */ 3564a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo bta_hf_client_sco_create(client_cb, false); 3574a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPENING_ST: Ignoring event %d", 362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPEN_CL_ST: 368cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 369cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPEN_E: 3705eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 371cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 372cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 373cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 3745eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 375cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 376cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 377cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 3784a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* close SCO connection */ 379ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal bta_hf_client_sco_remove(client_cb); 380cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 3815eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 382cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 383cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 384cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 3854a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* SCO failed; create SCO listen connection */ 386cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 3875eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 388cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 389cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 390cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 391cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_CL_ST: Ignoring event %d", 392cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 393cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 394cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 395cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 396cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 397cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPEN_ST: 398cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 399cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CLOSE_E: 400ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal if (bta_hf_client_sco_remove(client_cb)) { 4015eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 402cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 404cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 406ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal /* remove listening connection */ 407ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal bta_hf_client_sco_remove(client_cb); 408cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 4095eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 410cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 411cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4134a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* peer closed SCO */ 4144a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo bta_hf_client_sco_create(client_cb, false); 4154a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 416cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 417cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 418cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 419cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_OPEN_ST: Ignoring event %d", 420cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 422cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 423cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 424cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 425cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CLOSING_ST: 426cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 427cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_OPEN_E: 4285eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_CLOSE_OP_ST; 429cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 430cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 431cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4325eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 433cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 434cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 435cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4364a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* peer closed sco; create SCO listen connection */ 4374a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo bta_hf_client_sco_create(client_cb, false); 4384a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo client_cb->sco_state = BTA_HF_CLIENT_SCO_LISTEN_ST; 439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 440cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 441cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 442cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSING_ST: Ignoring event %d", 443cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 446cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 447cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CLOSE_OP_ST: 449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 450cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CLOSE_E: 4515eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_CLOSING_ST; 452cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 453cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 454cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4555eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTTING_ST; 456cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 457cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 458cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4594a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* open SCO connection */ 460bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_create(client_cb, true); 4615eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_OPENING_ST; 462cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 463cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 464cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 465cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_CLOSE_OP_ST: Ignoring event %d", 466cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 467cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 468cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 469cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 470cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 471cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTTING_ST: 472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson switch (event) { 473cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_OPEN_E: 4744a3ab51c0c2d3f80601aec0511e210c55f74a1a0Joseph Pirozzo /* close SCO connection; wait for conn close event */ 475ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal bta_hf_client_sco_remove(client_cb); 476cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 477cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_CONN_CLOSE_E: 4795eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 480cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 481cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 482cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson case BTA_HF_CLIENT_SCO_SHUTDOWN_E: 4835eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_state = BTA_HF_CLIENT_SCO_SHUTDOWN_ST; 484cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 485cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 486cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 487cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("BTA_HF_CLIENT_SCO_SHUTTING_ST: Ignoring event %d", 488cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson event); 489cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 490cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 491cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 492cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 493cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson default: 494cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 495cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 496ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal 497ac109dc2256b90c5704bed20e4d15f2400502eaaSanket Agarwal APPL_TRACE_DEBUG("%s: after state: %d", __func__, client_cb->sco_state); 4983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_listen 5038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Initialize SCO listener 5058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 5088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 510bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_sco_listen(tBTA_HF_CLIENT_DATA* p_data) { 511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 5123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 513bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 514bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific); 515bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 516bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, 517bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->hdr.layer_specific); 518bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 519bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 520bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 521bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_LISTEN_E); 5223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_shutdown 5278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 5298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 5328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 534bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_sco_shutdown(tBTA_HF_CLIENT_CB* client_cb) { 535cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 5363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 537bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_SHUTDOWN_E); 5383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_conn_open 5438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 5458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 5488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 550bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_sco_conn_open(tBTA_HF_CLIENT_DATA* p_data) { 551cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 5523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 553bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 554bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific); 555bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 556bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, 557bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->hdr.layer_specific); 558bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 559bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 5603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 561bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_CONN_OPEN_E); 5623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 563c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_sco_open(BTA_ID_HS, 1, client_cb->peer_addr); 564bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 5655eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (client_cb->negotiated_codec == BTM_SCO_CODEC_MSBC) { 566bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_MSBC_OPEN_EVT); 567cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 568bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_OPEN_EVT); 569cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_conn_close 5758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 5778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 5808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 582cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid bta_hf_client_sco_conn_close(tBTA_HF_CLIENT_DATA* p_data) { 583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 5843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 585bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 586bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific); 587bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 588bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, 589bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->hdr.layer_specific); 590bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 591bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 592bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 593cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson /* clear current scb */ 5945eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal client_cb->sco_idx = BTM_INVALID_SCO_INDEX; 5953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 596d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_CONN_CLOSE_E); 5973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 598c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_sco_close(BTA_ID_HS, 1, client_cb->peer_addr); 5993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 600c752e135d66f80c0b2efc35292ab8ddfd8227d61Jakub Pawlowski bta_sys_sco_unuse(BTA_ID_HS, 1, client_cb->peer_addr); 6013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 602d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He /* call app callback */ 603d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He bta_hf_client_cback_sco(client_cb, BTA_HF_CLIENT_AUDIO_CLOSE_EVT); 6043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 605d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He if (client_cb->sco_close_rfc == true) { 606d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He client_cb->sco_close_rfc = false; 607d3ae18b3b3c65e38bbce5e3bf2882f4e050077ddJack He bta_hf_client_rfc_do_close(p_data); 608cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_open 6148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 6168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 6198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 621bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_sco_open(tBTA_HF_CLIENT_DATA* p_data) { 622cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s", __func__); 6231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 624bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 625bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific); 626bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 627bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, 628bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->hdr.layer_specific); 629bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 630bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 631bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 632bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_OPEN_E); 6333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function bta_hf_client_sco_close 6388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description 6408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 6438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 645bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwalvoid bta_hf_client_sco_close(tBTA_HF_CLIENT_DATA* p_data) { 646bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal tBTA_HF_CLIENT_CB* client_cb = 647bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_find_cb_by_handle(p_data->hdr.layer_specific); 648bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal if (client_cb == NULL) { 649bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal APPL_TRACE_ERROR("%s: wrong handle to control block %d", __func__, 650bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal p_data->hdr.layer_specific); 651bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal return; 652bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal } 653bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal 6545eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal APPL_TRACE_DEBUG("%s: sco_idx 0x%x", __func__, client_cb->sco_idx); 6553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6565eccd90936d606e0070872b247fd3462e9c9c19bSanket Agarwal if (client_cb->sco_idx != BTM_INVALID_SCO_INDEX) { 657bdcfc045f9d21afc1510cdad4fddd97a93c26477Sanket Agarwal bta_hf_client_sco_event(client_cb, BTA_HF_CLIENT_SCO_CLOSE_E); 658cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 660