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#include <string.h> 211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include <stdlib.h> 221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include <cutils/properties.h> 231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bt_utils.h" 243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "bta_api.h" 253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#include "bta_sys.h" 261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_api.h" 271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#include "bta_hf_client_int.h" 281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* uncomment to enable extra debug */ 301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* #define BTA_HF_CLIENT_DEBUG TRUE */ 311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#ifndef BTA_HF_CLIENT_DEBUG 331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_DEBUG FALSE 343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#endif 353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#if BTA_HF_CLIENT_DEBUG == TRUE 371025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic char *bta_hf_client_evt_str(UINT16 event); 381025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic char *bta_hf_client_state_str(UINT8 state); 393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#endif 403fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state machine states */ 423fe1b49071420903cb8e3082ec04e76296352690Hemant Guptaenum 433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_INIT_ST, 451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_OPENING_ST, 461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_OPEN_ST, 471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_CLOSING_ST 483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state machine action enumeration list */ 513fe1b49071420903cb8e3082ec04e76296352690Hemant Guptaenum 523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_REGISTER, 541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_DEREGISTER, 551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_START_DEREG, 561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_DO_CLOSE, 571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_START_CLOSE, 581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_START_OPEN, 591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_ACP_OPEN, 601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_LISTEN, 611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CONN_OPEN, 621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CONN_CLOSE, 631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_OPEN, 641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_CLOSE, 651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SCO_SHUTDOWN, 661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_FREE_DB, 671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_OPEN_FAIL, 681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_OPEN, 691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_FAIL, 701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_DISC_INT_RES, 711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_DO_OPEN, 721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_DISC_FAIL, 731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_CLOSE, 741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_RFC_DATA, 751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_DISC_ACP_RES, 761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SVC_CONN_OPEN, 771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_SEND_AT_CMD, 781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTA_HF_CLIENT_NUM_ACTIONS, 793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_IGNORE BTA_HF_CLIENT_NUM_ACTIONS 823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 833fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* type for action functions */ 841025687c6679608fe9df918f37011414ffc72b62Hemant Guptatypedef void (*tBTA_HF_CLIENT_ACTION)(tBTA_HF_CLIENT_DATA *p_data); 853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* action functions table, indexed with action enum */ 871025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst tBTA_HF_CLIENT_ACTION bta_hf_client_action[] = 883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_REGISTER */ bta_hf_client_register, 901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_DEREGISTER */ bta_hf_client_deregister, 911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_START_DEREG */ bta_hf_client_start_dereg, 921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_DO_CLOSE */ bta_hf_client_rfc_do_close, 931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_START_CLOSE */ bta_hf_client_start_close, 941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_START_OPEN */ bta_hf_client_start_open, 951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_ACP_OPEN */ bta_hf_client_rfc_acp_open, 961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_LISTEN */ bta_hf_client_sco_listen, 971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_CONN_OPEN */ bta_hf_client_sco_conn_open, 981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_CONN_CLOSE*/ bta_hf_client_sco_conn_close, 991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_OPEN */ bta_hf_client_sco_open, 1001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_CLOSE */ bta_hf_client_sco_close, 1011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SCO_SHUTDOWN */ bta_hf_client_sco_shutdown, 1021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_FREE_DB */ bta_hf_client_free_db, 1031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_OPEN_FAIL */ bta_hf_client_open_fail, 1041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_OPEN */ bta_hf_client_rfc_open, 1051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_FAIL */ bta_hf_client_rfc_fail, 1061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_DISC_INT_RES */ bta_hf_client_disc_int_res, 1071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_DO_OPEN */ bta_hf_client_rfc_do_open, 1081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_DISC_FAIL */ bta_hf_client_disc_fail, 1091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_CLOSE */ bta_hf_client_rfc_close, 1101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_RFC_DATA */ bta_hf_client_rfc_data, 1111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_DISC_ACP_RES */ bta_hf_client_disc_acp_res, 1121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SVC_CONN_OPEN */ bta_hf_client_svc_conn_open, 1131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* BTA_HF_CLIENT_SEND_AT_CMD */ bta_hf_client_send_at_cmd, 1143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 1153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table information */ 1171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_ACTIONS 2 /* number of actions */ 1181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_NEXT_STATE 2 /* position of next state */ 1191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define BTA_HF_CLIENT_NUM_COLS 3 /* number of columns in state tables */ 1203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table for init state */ 1221025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst UINT8 bta_hf_client_st_init[][BTA_HF_CLIENT_NUM_COLS] = 1233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* Event Action 1 Action 2 Next state */ 1251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_REGISTER_EVT */ {BTA_HF_CLIENT_REGISTER, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_DEREGISTER, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_OPEN_EVT */ {BTA_HF_CLIENT_START_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_ACP_OPEN, BTA_HF_CLIENT_SCO_LISTEN, BTA_HF_CLIENT_OPEN_ST}, 1321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 1433fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table for opening state */ 1451025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst UINT8 bta_hf_client_st_opening[][BTA_HF_CLIENT_NUM_COLS] = 1463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* Event Action 1 Action 2 Next state */ 1481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_CLOSING_ST}, 1501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_DO_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_RFC_OPEN, BTA_HF_CLIENT_SCO_LISTEN, BTA_HF_CLIENT_OPEN_ST}, 1551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_DISC_INT_RES, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_OK_EVT */ {BTA_HF_CLIENT_RFC_DO_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_DISC_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPENING_ST}, 1653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 1663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table for open state */ 1681025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst UINT8 bta_hf_client_st_open[][BTA_HF_CLIENT_NUM_COLS] = 1693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* Event Action 1 Action 2 Next state */ 1711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1721025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_CLOSE, BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_CLOSING_ST}, 1731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_CLOSE_EVT */ {BTA_HF_CLIENT_START_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1771025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 1791025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_DATA_EVT */ {BTA_HF_CLIENT_RFC_DATA, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_DISC_ACP_RES, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_SCO_CONN_OPEN, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_SCO_CONN_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_SEND_AT_CMD, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_OPEN_ST}, 1883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 1893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 1903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table for closing state */ 1911025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst UINT8 bta_hf_client_st_closing[][BTA_HF_CLIENT_NUM_COLS] = 1923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 1931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* Event Action 1 Action 2 Next state */ 1941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_REGISTER_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_DEREGISTER_EVT */ {BTA_HF_CLIENT_START_DEREG, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_OPEN_EVT */ {BTA_HF_CLIENT_OPEN_FAIL, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 1991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* API_AUDIO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_CLOSE_EVT */ {BTA_HF_CLIENT_RFC_CLOSE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 2021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_SRV_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* RFC_DATA_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_ACP_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_INT_RES_EVT */ {BTA_HF_CLIENT_FREE_DB, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_INIT_ST}, 2061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_OK_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* DISC_FAIL_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_OPEN_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SCO_CLOSE_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* SEND_AT_CMD_EVT */ {BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_IGNORE, BTA_HF_CLIENT_CLOSING_ST}, 2113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 2123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* type for state table */ 2141025687c6679608fe9df918f37011414ffc72b62Hemant Guptatypedef const UINT8 (*tBTA_HF_CLIENT_ST_TBL)[BTA_HF_CLIENT_NUM_COLS]; 2153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/* state table */ 2171025687c6679608fe9df918f37011414ffc72b62Hemant Guptaconst tBTA_HF_CLIENT_ST_TBL bta_hf_client_st_tbl[] = 2183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 2191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_st_init, 2201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_st_opening, 2211025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_st_open, 2221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_st_closing 2233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta}; 2243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta/* HF Client control block */ 2261025687c6679608fe9df918f37011414ffc72b62Hemant GuptatBTA_HF_CLIENT_CB bta_hf_client_cb; 2273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_scb_init 2313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Initialize an HF_Client service control block. 2333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2343fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2381025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_scb_init(void) 2393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 240e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 2413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&bta_hf_client_cb.scb, 0, sizeof(tBTA_HF_CLIENT_SCB)); 2431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.sco_idx = BTM_INVALID_SCO_INDEX; 2441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; 2453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2483fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_scb_disable 2503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Disable a service control block. 2523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2563fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2571025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_scb_disable(void) 2583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 259e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 2603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_scb_init(); 2623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_DISABLE_EVT, NULL); 2643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2681025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_resume_open 2693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Resume opening process. 2713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 2743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2761025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_resume_open (void) 2773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 278e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG ("%s", __FUNCTION__); 2793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* resume opening process. */ 2811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_INIT_ST) 2823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 2831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.state = BTA_HF_CLIENT_OPENING_ST; 2841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_open (NULL); 2853fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 2863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 2873fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 2883fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 2893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_colli_timer_cback 2913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description HF Client connection collision timer callback 2933fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2953fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 2963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 2973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 2981025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_colli_timer_cback (TIMER_LIST_ENT *p_tle) 2993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 300e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("%s", __FUNCTION__); 3013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (p_tle) 3033fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.colli_tmr_on = FALSE; 3053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* If the peer haven't opened connection, restart opening process */ 3071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_resume_open (); 3083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_collision_cback 3143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description Get notified about collision. 3163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3211025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_collision_cback (tBTA_SYS_CONN_STATUS status, UINT8 id, 3223fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT8 app_id, BD_ADDR peer_addr) 3233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 3243fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(status); 3253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UNUSED(app_id); 3261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UNUSED(peer_addr); 3273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3281025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPENING_ST) 3293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta if (id == BTA_ID_SYS) /* ACL collision */ 3313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 332e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("HF Client found collision (ACL) ..."); 3333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else if (id == BTA_ID_HS) /* RFCOMM collision */ 3353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 336e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("HF Client found collision (RFCOMM) ..."); 3373fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 3393fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 340e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("HF Client found collision (\?\?\?) ..."); 3413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.state = BTA_HF_CLIENT_INIT_ST; 3443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3453fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Cancel SDP if it had been started. */ 3461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if(bta_hf_client_cb.scb.p_disc_db) 3473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 3481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (void)SDP_CancelServiceSearch (bta_hf_client_cb.scb.p_disc_db); 3491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_free_db(NULL); 3503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* reopen registered server */ 3533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Collision may be detected before or after we close servers. */ 3541025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_start_server(); 3553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* Start timer to handle connection opening restart */ 3571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.colli_timer.p_cback = (TIMER_CBACK*)&bta_hf_client_colli_timer_cback; 3581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_start_timer(&bta_hf_client_cb.scb.colli_timer, 0, BTA_HF_CLIENT_COLLISION_TIMER); 3591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.colli_tmr_on = TRUE; 3603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 3613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 3623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 3643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_api_enable 3663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description Handle an API enable event. 3683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 3713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 3723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 3731025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_api_enable(tBTA_HF_CLIENT_DATA *p_data) 3743fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 3751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta char value[PROPERTY_VALUE_MAX]; 3761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* initialize control block */ 3781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta memset(&bta_hf_client_cb, 0, sizeof(tBTA_HF_CLIENT_CB)); 3793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3803fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* store callback function */ 3811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.p_cback = p_data->api_enable.p_cback; 3821025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* check if mSBC support enabled */ 3841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta property_get("ro.bluetooth.hfp.ver", value, "0"); 3851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (strcmp(value,"1.6") == 0) 3861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 3871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.msbc_enabled = TRUE; 3881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 3893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.negotiated_codec = BTM_SCO_CODEC_CVSD; 3913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* set same setting as AG does */ 3931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta BTM_WriteVoiceSettings(AG_VOICE_SETTINGS); 3941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 3951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_collision_register (BTA_ID_HS, bta_hf_client_collision_cback); 3963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 3973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* call callback with enable event */ 3981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_cb.p_cback)(BTA_HF_CLIENT_ENABLE_EVT, NULL); 3993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4003fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_api_disable 4043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Description Handle an API disable event. 4063fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4083fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 4093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4103fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 4111025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void bta_hf_client_api_disable(tBTA_HF_CLIENT_DATA *p_data) 4123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 4131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (!bta_sys_is_register (BTA_ID_HS)) 4143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 415e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("BTA HF Client is already disabled, ignoring ..."); 4163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta return; 4173fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4183fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* De-register with BTA system manager */ 4201025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_deregister(BTA_ID_HS); 4213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sm_execute(BTA_HF_CLIENT_API_DEREGISTER_EVT, p_data); 4233fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_sys_collision_register (BTA_ID_HS, NULL); 4253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4291025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_hdl_event 4303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Data HF Client main event handling function. 4323fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4333fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns BOOLEAN 4353fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4363fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 4371025687c6679608fe9df918f37011414ffc72b62Hemant GuptaBOOLEAN bta_hf_client_hdl_event(BT_HDR *p_msg) 4383fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 4391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#if BTA_HF_CLIENT_DEBUG == TRUE 440e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hf_client_hdl_event %s (0x%x)", bta_hf_client_evt_str(p_msg->event), p_msg->event); 4411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#endif 4423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta switch (p_msg->event) 4443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 4451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* handle enable event */ 4461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_API_ENABLE_EVT: 4471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_api_enable((tBTA_HF_CLIENT_DATA *) p_msg); 4481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 4493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* handle disable event */ 4511025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_API_DISABLE_EVT: 4521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_api_disable((tBTA_HF_CLIENT_DATA *) p_msg); 4531025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 4543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta default: 4561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sm_execute(p_msg->event, (tBTA_HF_CLIENT_DATA *) p_msg); 4571025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 4583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return TRUE; 4603fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 4613fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4623fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 4633fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_sm_execute 4653fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description State machine event handling function for HF Client 4673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4693fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** Returns void 4703fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 4713fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 4721025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_sm_execute(UINT16 event, tBTA_HF_CLIENT_DATA *p_data) 4733fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 4741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta tBTA_HF_CLIENT_ST_TBL state_table; 4753fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT8 action; 4763fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta int i; 4773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#if BTA_HF_CLIENT_DEBUG == TRUE 4793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta UINT16 in_event = event; 4801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta UINT8 in_state = bta_hf_client_cb.scb.state; 4813fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* Ignore displaying of AT results when not connected (Ignored in state machine) */ 4831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.state == BTA_HF_CLIENT_OPEN_ST) 4843fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 485e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("HF Client evt : State %d (%s), Event 0x%04x (%s)", 4861025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.state, 4871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_state_str(bta_hf_client_cb.scb.state), 4881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta event, bta_hf_client_evt_str(event)); 4893fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4903fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#endif 4913fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4923fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta event &= 0x00FF; 4931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (event >= (BTA_HF_CLIENT_MAX_EVT & 0x00FF)) 4943fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 495e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("HF Client evt out of range, ignoring..."); 4963fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta return; 4973fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 4983fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 4993fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* look up the state table for the current state */ 5001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta state_table = bta_hf_client_st_tbl[bta_hf_client_cb.scb.state]; 5013fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5023fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* set next state */ 5031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.state = state_table[event][BTA_HF_CLIENT_NEXT_STATE]; 5043fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5053fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta /* execute action functions */ 5061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta for (i = 0; i < BTA_HF_CLIENT_ACTIONS; i++) 5073fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if ((action = state_table[event][i]) != BTA_HF_CLIENT_IGNORE) 5093fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta (*bta_hf_client_action[action])(p_data); 5113fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5123fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta else 5133fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5143fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5153fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5163fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#if BTA_HF_CLIENT_DEBUG == TRUE 5191025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.state != in_state) 5203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 521e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("BTA HF Client State Change: [%s] -> [%s] after Event [%s]", 5221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_state_str(in_state), 5231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_state_str(bta_hf_client_cb.scb.state), 5241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_evt_str(in_event)); 5253fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 5263fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#endif 5273fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 5283fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5291025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic void send_post_slc_cmd(void) 5301025687c6679608fe9df918f37011414ffc72b62Hemant Gupta{ 5311025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.at_cb.current_cmd = BTA_HF_CLIENT_AT_NONE; 5321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_bia(); 5341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_ccwa(TRUE); 5351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cmee(TRUE); 5361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cops(FALSE); 5371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_btrh(TRUE, 0); 5381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_clip(TRUE); 5391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta} 5401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5413fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta/******************************************************************************* 5423fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Function bta_hf_client_slc_seq 5443fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Description Handles AT commands sequence required for SLC creation 5463fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5473fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta** Returns void 5493fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta** 5503fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta*******************************************************************************/ 5511025687c6679608fe9df918f37011414ffc72b62Hemant Guptavoid bta_hf_client_slc_seq(BOOLEAN error) 5523fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 553e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_hf_client_slc_seq cmd: %u", bta_hf_client_cb.scb.at_cb.current_cmd); 5543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5551025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (error) { 5561025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* SLC establishment error, sent close rfcomm event */ 557e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("HFPClient: Failed to create SLC due to AT error, disconnecting (%u)", 5581025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.at_cb.current_cmd); 5591025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); 5611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return; 5621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 5631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5641025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.svc_conn) 5651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return; 5661025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5671025687c6679608fe9df918f37011414ffc72b62Hemant Gupta switch (bta_hf_client_cb.scb.at_cb.current_cmd) 5683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 5691025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_NONE: 5701025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_brsf(); 5711025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 5723fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5731025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_BRSF: 5741025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_CODEC) 5751025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 5761025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_bac(); 5773fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta break; 5781025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 5793fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5801025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cind(FALSE); 5811025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 5823fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5831025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_BAC: 5841025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cind(FALSE); 5851025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 5863fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 5871025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_CIND: 5881025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cind(TRUE); 5891025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 5901025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5911025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_CIND_STATUS: 5921025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_cmer(TRUE); 5931025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 5941025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 5951025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_CMER: 5961025687c6679608fe9df918f37011414ffc72b62Hemant Gupta if (bta_hf_client_cb.scb.peer_features & BTA_HF_CLIENT_PEER_FEAT_3WAY) 5971025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 5981025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_send_at_chld('?', 0); 5991025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 6001025687c6679608fe9df918f37011414ffc72b62Hemant Gupta else 6011025687c6679608fe9df918f37011414ffc72b62Hemant Gupta { 6021025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_svc_conn_open(NULL); 6031025687c6679608fe9df918f37011414ffc72b62Hemant Gupta send_post_slc_cmd(); 6041025687c6679608fe9df918f37011414ffc72b62Hemant Gupta } 6051025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 6061025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6071025687c6679608fe9df918f37011414ffc72b62Hemant Gupta case BTA_HF_CLIENT_AT_CHLD: 6081025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_svc_conn_open(NULL); 6091025687c6679608fe9df918f37011414ffc72b62Hemant Gupta send_post_slc_cmd(); 6101025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 6111025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6121025687c6679608fe9df918f37011414ffc72b62Hemant Gupta default: 6131025687c6679608fe9df918f37011414ffc72b62Hemant Gupta /* If happen there is a bug in SLC creation procedure... */ 614e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("HFPClient: Failed to create SLCdue to unexpected AT command, disconnecting (%u)", 6151025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_cb.scb.at_cb.current_cmd); 6161025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6171025687c6679608fe9df918f37011414ffc72b62Hemant Gupta bta_hf_client_sm_execute(BTA_HF_CLIENT_API_CLOSE_EVT, NULL); 6181025687c6679608fe9df918f37011414ffc72b62Hemant Gupta break; 6193fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6203fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6213fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6221025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#if BTA_HF_CLIENT_DEBUG == TRUE 6231025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6241025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#ifndef CASE_RETURN_STR 6251025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#define CASE_RETURN_STR(const) case const: return #const; 6261025687c6679608fe9df918f37011414ffc72b62Hemant Gupta#endif 6271025687c6679608fe9df918f37011414ffc72b62Hemant Gupta 6281025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic char *bta_hf_client_evt_str(UINT16 event) 6293fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6303fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (event) 6313fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 6321025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_REGISTER_EVT) 6331025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_DEREGISTER_EVT) 6341025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_OPEN_EVT) 6351025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_CLOSE_EVT) 6361025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_AUDIO_OPEN_EVT) 6371025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_AUDIO_CLOSE_EVT) 6381025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_RFC_OPEN_EVT) 6391025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_RFC_CLOSE_EVT) 6401025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_RFC_SRV_CLOSE_EVT) 6411025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_RFC_DATA_EVT) 6421025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_DISC_ACP_RES_EVT) 6431025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_DISC_INT_RES_EVT) 6441025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_DISC_OK_EVT) 6451025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_DISC_FAIL_EVT) 6461025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_ENABLE_EVT) 6471025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_API_DISABLE_EVT) 6481025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_SCO_OPEN_EVT) 6491025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_SCO_CLOSE_EVT) 6501025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_SEND_AT_CMD_EVT) 6513fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 6521025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return "Unknown HF Client Event"; 6533fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6543fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6553fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta 6561025687c6679608fe9df918f37011414ffc72b62Hemant Guptastatic char *bta_hf_client_state_str(UINT8 state) 6573fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta{ 6583fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta switch (state) 6593fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta { 6601025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_INIT_ST) 6611025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_OPENING_ST) 6621025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_OPEN_ST) 6631025687c6679608fe9df918f37011414ffc72b62Hemant Gupta CASE_RETURN_STR(BTA_HF_CLIENT_CLOSING_ST) 6643fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta default: 6651025687c6679608fe9df918f37011414ffc72b62Hemant Gupta return "Unknown HF Client State"; 6663fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta } 6673fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta} 6683fe1b49071420903cb8e3082ec04e76296352690Hemant Gupta#endif 669