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 file contains action functions for the handsfree client. 233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta * 243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta ******************************************************************************/ 253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "bta_api.h" 273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "bd.h" 281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_api.h" 291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_int.h" 301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_dm_int.h" 311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "l2c_api.h" 323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "port_api.h" 331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_sys.h" 343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "utl.h" 351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bt_utils.h" 363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include <string.h> 373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/***************************************************************************** 393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Constants 403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*****************************************************************************/ 413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* maximum length of data to read from RFCOMM */ 431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_RFC_READ_MAX 512 443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_register 483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This function initializes values of the scb and sets up 501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** the SDP record for the services. 513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 561025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_register(tBTA_HF_CLIENT_DATA *p_data) 573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_UTL_COD cod; 603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* initialize control block */ 641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_scb_init(); 653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.serv_sec_mask = p_data->api_register.sec_mask; 671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.features = p_data->api_register.features; 681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* initialize AT control block */ 701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_at_init(); 711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* create SDP records */ 731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_create_record(p_data); 741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Set the Audio service class bit */ 761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta cod.service = BTM_COD_SERVICE_AUDIO; 771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta utl_set_device_class(&cod, BTA_UTL_SET_COD_SERVICE_CLASS); 781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* start RFCOMM server */ 801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_server(); 811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* call app callback with register event */ 831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.reg.status = BTA_HF_CLIENT_SUCCESS; 841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_REGISTER_EVT, &evt); 853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_deregister 903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This function removes the sdp records, closes the RFCOMM 921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** servers, and deallocates the service control block. 933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 981025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_deregister(tBTA_HF_CLIENT_DATA *p_data) 993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.deregister = TRUE; 1013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* remove sdp record */ 1031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_del_record(p_data); 1043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* remove rfcomm server */ 1061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_close_server(); 1073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* disable */ 1091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_scb_disable(); 1103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_start_dereg 1153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1161025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Start a deregister event. 1173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1221025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_start_dereg(tBTA_HF_CLIENT_DATA *p_data) 1233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.deregister = TRUE; 1253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* remove sdp record */ 1271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_del_record(p_data); 1283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_start_close 1333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Start the process of closing SCO and RFCOMM connection. 1353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1401025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_start_close(tBTA_HF_CLIENT_DATA *p_data) 1413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Take the link out of sniff and set L2C idle time to 0 */ 1431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_dm_pm_active(bta_hf_client_cb.scb.peer_addr); 1441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta L2CA_SetIdleTimeoutByBdAddr(bta_hf_client_cb.scb.peer_addr, 0); 1451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 1461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* if SCO is open close SCO and wait on RFCOMM close */ 1471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.sco_state == BTA_HF_CLIENT_SCO_OPEN_ST) 1481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 1491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_close_rfc = TRUE; 1501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 1511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 1521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 1531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_rfc_do_close(p_data); 1541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 1553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* always do SCO shutdown to handle all SCO corner cases */ 1571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_shutdown(NULL); 1583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 1593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 1613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_start_open 1633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This starts an HF Client open. 1653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 1683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 1693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 1701025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_start_open(tBTA_HF_CLIENT_DATA *p_data) 1713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta BD_ADDR pending_bd_addr; 1733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* store parameters */ 1753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (p_data) 1763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bdcpy(bta_hf_client_cb.scb.peer_addr, p_data->api_open.bd_addr); 1781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.cli_sec_mask = p_data->api_open.sec_mask; 1793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Check if RFCOMM has any incoming connection to avoid collision. */ 1823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (PORT_IsOpening (pending_bd_addr)) 1833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 1843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Let the incoming connection goes through. */ 1851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Issue collision for now. */ 1861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* We will decide what to do when we find incoming connection later.*/ 1871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_collision_cback (0, BTA_ID_HS, 0, bta_hf_client_cb.scb.peer_addr); 1883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta return; 1893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 1903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* close server */ 1921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_close_server(); 1933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* set role */ 1951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.role = BTA_HF_CLIENT_INT; 1963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* do service search */ 1981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_do_disc(); 1993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_cback_open 2043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send open callback event to application. 2063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2111025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_cback_open(tBTA_HF_CLIENT_DATA *p_data, tBTA_HF_CLIENT_STATUS status) 2123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 2143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2151025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 2163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* call app callback with open event */ 2181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.open.status = status; 2191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if(p_data) 2203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* if p_data is provided then we need to pick the bd address from the open api structure */ 2221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bdcpy(evt.open.bd_addr, p_data->api_open.bd_addr); 2233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 2253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bdcpy(evt.open.bd_addr, bta_hf_client_cb.scb.peer_addr); 2273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPEN_EVT, &evt); 2303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_rfc_open 2353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Handle RFCOMM channel open. 2373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2421025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_rfc_open(tBTA_HF_CLIENT_DATA *p_data) 2433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UNUSED(p_data); 2453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_conn_open(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 2471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_SUCCESS); 2491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* start SLC procedure */ 2511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_slc_seq(FALSE); 2523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_rfc_acp_open 2573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Handle RFCOMM channel open when accepting connection. 2593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2641025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_rfc_acp_open(tBTA_HF_CLIENT_DATA *p_data) 2653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UINT16 lcid; 2671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta int i; 2681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BD_ADDR dev_addr; 2691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta int status; 2703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* set role */ 2721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; 2733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 274e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG ("bta_hf_client_rfc_acp_open: serv_handle = %d rfc.port_handle = %d", 2751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.serv_handle, p_data->rfc.port_handle); 2763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* get bd addr of peer */ 2781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (PORT_SUCCESS != (status=PORT_CheckConnection(p_data->rfc.port_handle, dev_addr, &lcid))) 2791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 280e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG ("bta_hf_client_rfc_acp_open error PORT_CheckConnection returned status %d", status); 2811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 2821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Collision Handling */ 2841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.colli_tmr_on) 2851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 2861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* stop collision timer */ 2871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.colli_tmr_on = FALSE; 2881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_stop_timer (&bta_hf_client_cb.scb.colli_timer); 2891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 2901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bdcmp (dev_addr, bta_hf_client_cb.scb.peer_addr) == 0) 2911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 2921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* If incoming and outgoing device are same, nothing more to do. */ 2931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Outgoing conn will be aborted because we have successful incoming conn. */ 2941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 2951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 2961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 2971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Resume outgoing connection. */ 2981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_resume_open (); 2991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 3001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 3011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bdcpy (bta_hf_client_cb.scb.peer_addr, dev_addr); 3031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.conn_handle = p_data->rfc.port_handle; 3041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* do service discovery to get features */ 3061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_do_disc(); 3071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* continue with open processing */ 3091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_rfc_open(p_data); 3103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_rfc_fail 3153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3161025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description RFCOMM connection failed. 3173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3221025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_rfc_fail(tBTA_HF_CLIENT_DATA *p_data) 3233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 3241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UNUSED(p_data); 3251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* reinitialize stuff */ 3271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.conn_handle = 0; 3281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.peer_features = 0; 3291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.chld_features = 0; 3301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; 3311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.svc_conn = FALSE; 3321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.send_at_reply = FALSE; 3331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; 3341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_at_reset(); 3361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* reopen server */ 3381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_server(); 3391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* call open cback w. failure */ 3411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_RFCOMM); 3423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_disc_fail 3473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This function handles a discovery failure. 3493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3541025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_disc_fail(tBTA_HF_CLIENT_DATA *p_data) 3553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 3563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 3573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* reopen server */ 3591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_server(); 3601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* reinitialize stuff */ 3623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* call open cback w. failure */ 3641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_open(NULL, BTA_HF_CLIENT_FAIL_SDP); 3653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_open_fail 3701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 3711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description open connection failed. 3721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 3731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 3741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 3751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 3761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 3771025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_open_fail(tBTA_HF_CLIENT_DATA *p_data) 3781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 3791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* call open cback w. failure */ 3801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cback_open(p_data, BTA_HF_CLIENT_FAIL_RESOURCES); 3811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 3821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 3841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 3851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_rfc_close 3863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description RFCOMM connection closed. 3883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3931025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_rfc_close(tBTA_HF_CLIENT_DATA *p_data) 3943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 3953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta int i, num_active_conn = 0; 3963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 3973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* reinitialize stuff */ 3991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.peer_features = 0; 4001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.chld_features = 0; 4011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.role = BTA_HF_CLIENT_ACP; 4021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.svc_conn = FALSE; 4031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.send_at_reply = FALSE; 4041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; 4051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 4061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_at_reset(); 4071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 4081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_conn_close(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 4093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* call close cback */ 4111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLOSE_EVT, NULL); 4123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* if not deregistering reopen server */ 4141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.deregister == FALSE) 4153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Clear peer bd_addr so instance can be reused */ 4171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bdcpy(bta_hf_client_cb.scb.peer_addr, bd_addr_null); 4183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* start server as it might got closed on open*/ 4201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_server(); 4213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.conn_handle = 0; 4233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Make sure SCO is shutdown */ 4251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sco_shutdown(NULL); 4263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_sco_unuse(BTA_ID_HS, 1, bta_hf_client_cb.scb.peer_addr); 4283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* else close port and deallocate scb */ 4303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 4313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_close_server(); 4331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_scb_disable(); 4343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_disc_int_res 4403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This function handles a discovery result when initiator. 4423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 4453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 4471025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_disc_int_res(tBTA_HF_CLIENT_DATA *p_data) 4483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 4491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UINT16 event = BTA_HF_CLIENT_DISC_FAIL_EVT; 4503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 451e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG ("bta_hf_client_disc_int_res: Status: %d", p_data->disc_result.status); 4523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* if found service */ 4541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (p_data->disc_result.status == SDP_SUCCESS || 4551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_data->disc_result.status == SDP_DB_FULL) 4563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* get attributes */ 4581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_sdp_find_attr()) 4591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 4601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta event = BTA_HF_CLIENT_DISC_OK_EVT; 4611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 4623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 4641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* free discovery db */ 4651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_free_db(p_data); 4661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 4671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* send ourselves sdp ok/fail event */ 4681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sm_execute(event, p_data); 4693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_disc_acp_res 4743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description This function handles a discovery result when acceptor. 4763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 4793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 4811025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_disc_acp_res(tBTA_HF_CLIENT_DATA *p_data) 4823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 4831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* if found service */ 4841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (p_data->disc_result.status == SDP_SUCCESS || 4851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta p_data->disc_result.status == SDP_DB_FULL) 4863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* get attributes */ 4881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sdp_find_attr(); 4893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* free discovery db */ 4921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_free_db(p_data); 4933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_rfc_data 4983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description Read and process data from RFCOMM. 5003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 5033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5051025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_rfc_data(tBTA_HF_CLIENT_DATA *p_data) 5063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 5073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT16 len; 5081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta char buf[BTA_HF_CLIENT_RFC_READ_MAX]; 5093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(p_data); 5103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(buf, 0, sizeof(buf)); 5123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* read data from rfcomm; if bad status, we're done */ 5141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta while (PORT_ReadData(bta_hf_client_cb.scb.conn_handle, buf, BTA_HF_CLIENT_RFC_READ_MAX, &len) == PORT_SUCCESS) 5153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* if no data, we're done */ 5173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (len == 0) 5183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_at_parse(buf, len); 5233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* no more data to read, we're done */ 5251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (len < BTA_HF_CLIENT_RFC_READ_MAX) 5263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_svc_conn_open 5353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Service level connection opened 5373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 5403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5421025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_svc_conn_open(tBTA_HF_CLIENT_DATA *p_data) 5433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 5441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 5451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UNUSED(p_data); 5463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 5481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (!bta_hf_client_cb.scb.svc_conn) 5503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* set state variable */ 5521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.svc_conn = TRUE; 5533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* call callback */ 5551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.conn.peer_feat = bta_hf_client_cb.scb.peer_features; 5561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.conn.chld_feat = bta_hf_client_cb.scb.chld_features; 5571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CONN_EVT, &evt); 5591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 5603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_cback_ind 5653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send indicator callback event to application. 5673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 5693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5711025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_ind(tBTA_HF_CLIENT_IND_TYPE type, UINT16 value) 5723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 5731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 5743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 5763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.ind.type = type; 5781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.ind.value = value; 5791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_IND_EVT, &evt); 5813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_evt_val 5863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send event to application. 5881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** This is a generic helper for events with common data. 5893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 5923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5941025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_evt_val(tBTA_HF_CLIENT_EVT type, UINT16 value) 5953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 5961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 5973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 5993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.val.value = value; 6013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(type, &evt); 6031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 6043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 6061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_operator_name 6081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send operator name event to application. 6101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 6131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 6151025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_operator_name(char *name) 6161025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 6171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 6183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 6201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.operator.name, name, BTA_HF_CLIENT_OPERATOR_NAME_LEN + 1); 6221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.operator.name[BTA_HF_CLIENT_OPERATOR_NAME_LEN] = '\0'; 6231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_OPERATOR_NAME_EVT, &evt); 6253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_clip 6313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send CLIP event to application. 6333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6381025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_clip(char *number) 6393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 6413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 6433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); 6451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 6463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLIP_EVT, &evt); 6481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 6493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 6511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_ccwa 6531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send CLIP event to application. 6551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 6581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 6601025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_ccwa(char *number) 6611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 6621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 6633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 6651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); 6671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 6681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CCWA_EVT, &evt); 6703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_at_result 6751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send AT result event to application. 6773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6783fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 6803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 6821025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_at_result(tBTA_HF_CLIENT_AT_RESULT_TYPE type, UINT16 cme) 6833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 6851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 6871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.result.type = type; 6891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.result.cme = cme; 6903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_AT_RESULT_EVT, &evt); 6923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 6953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 6961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_clcc 6971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 6981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send clcc event to application. 6993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 7023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 7033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 7041025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_clcc(UINT32 idx, BOOLEAN incoming, UINT8 status, BOOLEAN mpty, char *number) 7053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 7061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 7073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 7081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 7093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 7101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.idx = idx; 7111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.inc = incoming; 7121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.status = status; 7131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.mpty = mpty; 7141025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7151025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (number) 7163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 7171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.number_present = TRUE; 7181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.clcc.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); 7191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.clcc.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 7203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 7211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CLCC_EVT, &evt); 7233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 7243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 7251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 7261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_cnum 7281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send cnum event to application. 7301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 7331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 7351025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_cnum(char *number, UINT16 service) 7361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 7371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 7381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 7401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.cnum.service = service; 7421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.cnum.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); 7431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.cnum.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 7441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_CNUM_EVT, &evt); 7461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 7471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/******************************************************************************* 7491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_binp 7511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Send BINP event to application. 7531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 7561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** 7571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta*******************************************************************************/ 7581025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_binp(char *number) 7591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 7601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT evt; 7611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&evt, 0, sizeof(evt)); 7631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta strlcpy(evt.number.number, number, BTA_HF_CLIENT_NUMBER_LEN + 1); 7651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta evt.number.number[BTA_HF_CLIENT_NUMBER_LEN] = '\0'; 7661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 7671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_BINP_EVT, &evt); 7681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 769