13fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/****************************************************************************** 23fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 31025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * Copyright (c) 2014 The Android Open Source Project 43fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * Copyright (C) 2003-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 203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/****************************************************************************** 213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * This is the implementation of the API for the handsfree (HF role) 231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta * subsystem of BTA 243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta ******************************************************************************/ 263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include <string.h> 281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_api.h" 291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_int.h" 301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bd.h" 313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/***************************************************************************** 331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Constants and data types 343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*****************************************************************************/ 351025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic const tBTA_SYS_REG bta_hf_client_reg = 363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_hdl_event, 381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HfClientDisable 393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/***************************************************************************** 431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** External Function Declarations 441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*****************************************************************************/ 451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientEnable 493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Enable the HF CLient service. When the enable 513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** operation is complete the callback function will be 521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** called with a BTA_HF_CLIENT_ENABLE_EVT. This function must 531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** be called before other function in the HF CLient API are 543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** called. 553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns BTA_SUCCESS if OK, BTA_FAILURE otherwise. 573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 591025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API tBTA_STATUS BTA_HfClientEnable(tBTA_HF_CLIENT_CBACK *p_cback) 603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT_API_ENABLE *p_buf; 623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT8 idx; 633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_sys_is_register (BTA_ID_HS)) 653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 66e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("BTA HF Client is already enabled, ignoring ..."); 671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return BTA_FAILURE; 683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* register with BTA system manager */ 711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_register(BTA_ID_HS, &bta_hf_client_reg); 723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((p_buf = (tBTA_HF_CLIENT_API_ENABLE *) GKI_getbuf(sizeof(tBTA_HF_CLIENT_API_ENABLE))) != NULL) 743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->hdr.event = BTA_HF_CLIENT_API_ENABLE_EVT; 763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->p_cback = p_cback; 773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta return BTA_SUCCESS; 813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientDisable 863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Disable the HF Client service 883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 931025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientDisable(void) 943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BT_HDR *p_buf; 963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->event = BTA_HF_CLIENT_API_DISABLE_EVT; 1003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 1013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientRegister 1073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Register an HF Client service. 1093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1141025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientRegister(tBTA_SEC sec_mask, tBTA_HF_CLIENT_FEAT features, 1151025687c6679608fe9df918f37011414ffc72b62Hemant Gupta char *p_service_name) 1163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT_API_REGISTER *p_buf; 1183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((p_buf = (tBTA_HF_CLIENT_API_REGISTER *) GKI_getbuf(sizeof(tBTA_HF_CLIENT_API_REGISTER))) != NULL) 1203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->hdr.event = BTA_HF_CLIENT_API_REGISTER_EVT; 1223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->features = features; 1233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->sec_mask = sec_mask; 1241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if(p_service_name) 1253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BCM_STRNCPY_S(p_buf->name, BTA_SERVICE_NAME_LEN+1, p_service_name, BTA_SERVICE_NAME_LEN); 1271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->name[BTA_SERVICE_NAME_LEN] = 0; 1281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 1291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 1301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 1311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->name[0] = '\0'; 1323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 1343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientDeregister 1403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Deregister an HF Client service. 1423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1471025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientDeregister(UINT16 handle) 1483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BT_HDR *p_buf; 1503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 1521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 1531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->event = BTA_HF_CLIENT_API_DEREGISTER_EVT; 1541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->layer_specific = handle; 1551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sendmsg(p_buf); 1561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 1573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientOpen 1623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Opens a connection to an audio gateway. 1643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** When connection is open callback function is called 1653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** with a BTA_AG_OPEN_EVT. Only the data connection is 1663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** opened. The audio connection is not opened. 1673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1721025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientOpen(UINT16 handle, BD_ADDR bd_addr, tBTA_SEC sec_mask) 1733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT_API_OPEN *p_buf; 1753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((p_buf = (tBTA_HF_CLIENT_API_OPEN *) GKI_getbuf(sizeof(tBTA_HF_CLIENT_API_OPEN))) != NULL) 1773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->hdr.event = BTA_HF_CLIENT_API_OPEN_EVT; 1793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->hdr.layer_specific = handle; 1803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bdcpy(p_buf->bd_addr, bd_addr); 1813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->sec_mask = sec_mask; 1823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 1833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientClose 1893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Close the current connection to an audio gateway. 1911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Any current audio connection will also be closed 1923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1971025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientClose(UINT16 handle) 1983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BT_HDR *p_buf; 2003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 2023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->event = BTA_HF_CLIENT_API_CLOSE_EVT; 2043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->layer_specific = handle; 2053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 2063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfCllientAudioOpen 2123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description Opens an audio connection to the currently connected 2141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** audio gateway 2153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2201025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientAudioOpen(UINT16 handle) 2213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BT_HDR *p_buf; 2233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 2253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->event = BTA_HF_CLIENT_API_AUDIO_OPEN_EVT; 2273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->layer_specific = handle; 2283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 2293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientAudioClose 2353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Close the currently active audio connection to an audio 2371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** gateway. The data connection remains open 2383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2431025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientAudioClose(UINT16 handle) 2443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BT_HDR *p_buf; 2463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if ((p_buf = (BT_HDR *) GKI_getbuf(sizeof(BT_HDR))) != NULL) 2483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->event = BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT; 2503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->layer_specific = handle; 2513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 2523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function BTA_HfClientSendAT 2583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description send AT command 2603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2651025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBTA_API void BTA_HfClientSendAT(UINT16 handle, tBTA_HF_CLIENT_AT_CMD_TYPE at, UINT32 val1, UINT32 val2, const char *str) 2663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT_DATA_VAL *p_buf; 2683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((p_buf = (tBTA_HF_CLIENT_DATA_VAL *) GKI_getbuf(sizeof(tBTA_HF_CLIENT_DATA_VAL))) != NULL) 2703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->hdr.event = BTA_HF_CLIENT_SEND_AT_CMD_EVT; 2721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->uint8_val = at; 2731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->uint32_val1 = val1; 2741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->uint32_val2 = val2; 2751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (str) 2773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(p_buf->str, str, BTA_HF_CLIENT_NUMBER_LEN + 1); 2791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->str[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 2801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 2811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 2821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 2831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_buf->str[0] = '\0'; 2843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta p_buf->hdr.layer_specific = handle; 2873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta bta_sys_sendmsg(p_buf); 2883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 290