15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This is the main implementation file for the BTA audio gateway. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_api.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_sys.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_ag_co.h" 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_ag_int.h" 305cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "utl.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants and types 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_AG_DEBUG 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_AG_DEBUG FALSE 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovextern fixed_queue_t *btu_bta_alarm_queue; 4078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_AG_DEBUG == TRUE 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_ag_evt_str(UINT16 event, tBTA_AG_RES result); 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_ag_state_str(UINT8 state); 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine states */ 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_INIT_ST, 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_OPENING_ST, 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_OPEN_ST, 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_CLOSING_ST 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state machine action enumeration list */ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_REGISTER, 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_DEREGISTER, 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_START_OPEN, 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_DO_OPEN, 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_DO_CLOSE, 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_START_DEREG, 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_START_CLOSE, 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_OPEN, 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_OPEN_FAIL, 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_ACP_OPEN, 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_CLOSE, 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_FAIL, 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RFC_DATA, 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_DISC_INT_RES, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_DISC_FAIL, 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_DISC_ACP_RES, 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_FREE_DB, 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_CONN_OPEN, 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_CONN_CLOSE, 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_LISTEN, 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_OPEN, 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_CLOSE, 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SCO_SHUTDOWN, 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_POST_SCO_OPEN, 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_POST_SCO_CLOSE, 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SVC_CONN_OPEN, 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RESULT, 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SETCODEC, 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_SEND_RING, 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_CI_SCO_DATA, 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_CI_RX_DATA, 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_RCVD_SLC_READY, 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BTA_AG_NUM_ACTIONS 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_AG_IGNORE BTA_AG_NUM_ACTIONS 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for action functions */ 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (*tBTA_AG_ACTION)(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data); 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* action functions */ 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_AG_ACTION bta_ag_action[] = 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_register, 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_deregister, 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_start_open, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_do_open, 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_do_close, 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_start_dereg, 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_start_close, 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_open, 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_open_fail, 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_acp_open, 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_close, 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_fail, 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rfc_data, 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_disc_int_res, 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_disc_fail, 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_disc_acp_res, 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_free_db, 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_conn_open, 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_conn_close, 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_listen, 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_open, 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_close, 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sco_shutdown, 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_post_sco_open, 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_post_sco_close, 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_svc_conn_open, 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_result, 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_setcodec, 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_send_ring, 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_ci_sco_data, 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_ci_rx_data, 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_rcvd_slc_ready 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table information */ 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_AG_ACTIONS 2 /* number of actions */ 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_AG_NEXT_STATE 2 /* position of next state */ 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_AG_NUM_COLS 3 /* number of columns in state tables */ 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for init state */ 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_ag_st_init[][BTA_AG_NUM_COLS] = 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event Action 1 Action 2 Next state */ 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_REGISTER_EVT */ {BTA_AG_REGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DEREGISTER_EVT */ {BTA_AG_DEREGISTER, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_OPEN_EVT */ {BTA_AG_START_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_OPEN_EVT */ {BTA_AG_RFC_ACP_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_INIT_ST} 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for opening state */ 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_ag_st_opening[][BTA_AG_NUM_COLS] = 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event Action 1 Action 2 Next state */ 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DEREGISTER_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST}, 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CLOSE_EVT */ {BTA_AG_RFC_DO_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_OPEN_EVT */ {BTA_AG_RFC_OPEN, BTA_AG_SCO_LISTEN, BTA_AG_OPEN_ST}, 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_CLOSE_EVT */ {BTA_AG_RFC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_ACP_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_INT_RES_EVT */ {BTA_AG_DISC_INT_RES, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_OK_EVT */ {BTA_AG_RFC_DO_OPEN, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_FAIL_EVT */ {BTA_AG_DISC_FAIL, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST}, 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPENING_ST} 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for open state */ 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_ag_st_open[][BTA_AG_NUM_COLS] = 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event Action 1 Action 2 Next state */ 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DEREGISTER_EVT */ {BTA_AG_START_CLOSE, BTA_AG_START_DEREG, BTA_AG_CLOSING_ST}, 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CLOSE_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_OPEN_EVT */ {BTA_AG_SCO_OPEN, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_CLOSE_EVT */ {BTA_AG_SCO_CLOSE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_RESULT_EVT */ {BTA_AG_RESULT, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SETCODEC_EVT */ {BTA_AG_SETCODEC, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_DATA_EVT */ {BTA_AG_RFC_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_POST_SCO_OPEN, BTA_AG_OPEN_ST}, 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_OPEN_ST}, 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_ACP_RES_EVT */ {BTA_AG_DISC_ACP_RES, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_INT_RES_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_RX_WRITE_EVT */ {BTA_AG_CI_RX_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RING_TOUT_EVT */ {BTA_AG_SEND_RING, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SVC_TOUT_EVT */ {BTA_AG_START_CLOSE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SCO_DATA_EVT */ {BTA_AG_CI_SCO_DATA, BTA_AG_IGNORE, BTA_AG_OPEN_ST}, 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SLC_READY_EVT */ {BTA_AG_RCVD_SLC_READY, BTA_AG_IGNORE, BTA_AG_OPEN_ST} 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table for closing state */ 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst UINT8 bta_ag_st_closing[][BTA_AG_NUM_COLS] = 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Event Action 1 Action 2 Next state */ 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_REGISTER_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_DEREGISTER_EVT */ {BTA_AG_START_DEREG, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_OPEN_EVT */ {BTA_AG_OPEN_FAIL, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_AUDIO_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_RESULT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API_SETCODEC_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_OPEN_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_CLOSE_EVT */ {BTA_AG_RFC_CLOSE, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_SRV_CLOSE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RFC_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_OPEN_EVT */ {BTA_AG_SCO_CONN_OPEN, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SCO_CLOSE_EVT */ {BTA_AG_SCO_CONN_CLOSE, BTA_AG_POST_SCO_CLOSE, BTA_AG_CLOSING_ST}, 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_ACP_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_INT_RES_EVT */ {BTA_AG_FREE_DB, BTA_AG_IGNORE, BTA_AG_INIT_ST}, 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_OK_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* DISC_FAIL_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_RX_WRITE_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* RING_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SVC_TOUT_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SCO_DATA_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST}, 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CI_SLC_READY_EVT */ {BTA_AG_IGNORE, BTA_AG_IGNORE, BTA_AG_CLOSING_ST} 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* type for state table */ 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef const UINT8 (*tBTA_AG_ST_TBL)[BTA_AG_NUM_COLS]; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* state table */ 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectconst tBTA_AG_ST_TBL bta_ag_st_tbl[] = 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_st_init, 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_st_opening, 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_st_open, 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_st_closing 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Global data 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/ 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* AG control block */ 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_DYNAMIC_MEMORY == FALSE 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_AG_CB bta_ag_cb; 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_scb_alloc 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Allocate an AG service control block. 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns pointer to the scb, or NULL if none could be allocated. 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic tBTA_AG_SCB *bta_ag_scb_alloc(void) 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_scb->in_use) 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize variables */ 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->in_use = TRUE; 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->sco_idx = BTM_INVALID_SCO_INDEX; 29966432dcffe211e317d35978283a04a96d5620bdfMatthew Xie#if (BTM_WBS_INCLUDED == TRUE ) 30066432dcffe211e317d35978283a04a96d5620bdfMatthew Xie p_scb->codec_updated = FALSE; 30165e9c8251cd9f70153861aabe09f8767b82ce434Satish Kodishala p_scb->peer_codecs = BTA_AG_CODEC_CVSD; 30265e9c8251cd9f70153861aabe09f8767b82ce434Satish Kodishala p_scb->sco_codec = BTA_AG_CODEC_CVSD; 30366432dcffe211e317d35978283a04a96d5620bdfMatthew Xie#endif 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set up timers */ 30578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov p_scb->ring_timer = alarm_new("bta_ag.scb_ring_timer"); 30678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov p_scb->collision_timer = alarm_new("bta_ag.scb_collision_timer"); 30766432dcffe211e317d35978283a04a96d5620bdfMatthew Xie#if (BTM_WBS_INCLUDED == TRUE) 30878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov p_scb->codec_negotiation_timer = 30978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_new("bta_ag.scb_codec_negotiation_timer"); 31066432dcffe211e317d35978283a04a96d5620bdfMatthew Xie /* set eSCO mSBC setting to T2 as the preferred */ 31166432dcffe211e317d35978283a04a96d5620bdfMatthew Xie p_scb->codec_msbc_settings = BTA_AG_SCO_MSBC_SETTINGS_T2; 31266432dcffe211e317d35978283a04a96d5620bdfMatthew Xie#endif 313e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_scb_alloc %d", bta_ag_scb_to_idx(p_scb)); 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (i == BTA_AG_NUM_SCB) 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* out of scbs */ 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = NULL; 322e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("Out of ag scbs"); 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_scb; 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_scb_dealloc 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Deallocate a service control block. 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ag_scb_dealloc(tBTA_AG_SCB *p_scb) 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 idx; 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN allocated = FALSE; 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 342e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_scb_dealloc %d", bta_ag_scb_to_idx(p_scb)); 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 34478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov /* stop and free timers */ 34578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(p_scb->ring_timer); 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (BTM_WBS_INCLUDED == TRUE) 34778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(p_scb->codec_negotiation_timer); 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 34978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(p_scb->collision_timer); 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize control block */ 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(p_scb, 0, sizeof(tBTA_AG_SCB)); 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->sco_idx = BTM_INVALID_SCO_INDEX; 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* If all scbs are deallocated, callback with disable event */ 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_sys_is_register (BTA_ID_AG)) 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (idx = 0; idx < BTA_AG_NUM_SCB; idx++) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ag_cb.scb[idx].in_use) 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project allocated = TRUE; 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!allocated) 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_scb_to_idx 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given a pointer to an scb, return its index. 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Index of scb. 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 bta_ag_scb_to_idx(tBTA_AG_SCB *p_scb) 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* use array arithmetic to determine index */ 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((UINT16) (p_scb - bta_ag_cb.scb)) + 1; 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_scb_by_idx 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given an scb index return pointer to scb. 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Pointer to scb or NULL if not allocated. 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_AG_SCB *bta_ag_scb_by_idx(UINT16 idx) 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb; 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify index */ 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (idx > 0 && idx <= BTA_AG_NUM_SCB) 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = &bta_ag_cb.scb[idx - 1]; 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!p_scb->in_use) 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = NULL; 412e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("ag scb idx %d not allocated", idx); 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = NULL; 418e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("ag scb idx %d out of range", idx); 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_scb; 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_service_to_idx 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given a BTA service mask convert to profile index. 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Profile ndex of scb. 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_ag_service_to_idx(tBTA_SERVICE_MASK services) 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (services & BTA_HFP_SERVICE_MASK) 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTA_AG_HFP; 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return BTA_AG_HSP; 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_idx_by_bdaddr 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Find SCB associated with peer BD address. 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Index of SCB or zero if none found. 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT16 bta_ag_idx_by_bdaddr(BD_ADDR peer_addr) 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 i; 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_addr != NULL) 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->in_use && !bdcmp(peer_addr, p_scb->peer_addr)) 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (i + 1); 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no scb found */ 472e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING("No ag scb for peer addr"); 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_other_scb_open 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Check whether any other scb is in open state. 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns TRUE if another scb is in open state, FALSE otherwise. 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_ag_other_scb_open(tBTA_AG_SCB *p_curr_scb) 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->in_use && p_scb != p_curr_scb && p_scb->state == BTA_AG_OPEN_ST) 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no other scb found */ 500e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("No other ag scb open"); 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return FALSE; 5028f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB} 5038f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB 5048f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB/******************************************************************************* 5058f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** 5068f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** Function bta_ag_scb_open 5078f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** 5088f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** Description Check whether given scb is in open state. 5098f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** 5108f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** 5118f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** Returns TRUE if scb is in open state, FALSE otherwise. 5128f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB** 5138f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB*******************************************************************************/ 5148f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GBBOOLEAN bta_ag_scb_open(tBTA_AG_SCB *p_curr_scb) 5158f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB{ 5168f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB if (p_curr_scb && p_curr_scb->in_use && p_curr_scb->state == BTA_AG_OPEN_ST) 5178f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB { 5188f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB return TRUE; 5198f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB } 5208f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB 5218f4fb27a66a83cc65eb7923b6912d0aaba279a8bMallikarjuna GB return FALSE; 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_get_other_idle_scb 5275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Return other scb if it is in INIT st. 5295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns Pointer to other scb if INIT st, NULL otherwise. 5325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_AG_SCB *bta_ag_get_other_idle_scb (tBTA_AG_SCB *p_curr_scb) 5355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; 5375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 xx; 5385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (xx = 0; xx < BTA_AG_NUM_SCB; xx++, p_scb++) 5405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->in_use && (p_scb != p_curr_scb) && (p_scb->state == BTA_AG_INIT_ST)) 5425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return p_scb; 5445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* no other scb found */ 548e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_get_other_idle_scb: No idle AG scb"); 5495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return NULL; 5505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 55478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov** Function bta_ag_collision_timer_cback 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description AG connection collision timer callback 5575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 56278bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavovstatic void bta_ag_collision_timer_cback(void *data) 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 56478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov tBTA_AG_SCB *p_scb = (tBTA_AG_SCB *)data; 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 56678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov APPL_TRACE_DEBUG("%s", __func__); 5675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 56878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov /* If the peer haven't opened AG connection */ 56978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov /* we will restart opening process. */ 57078bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov bta_ag_resume_open(p_scb); 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_collision_cback 5765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Get notified about collision. 5785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ag_collision_cback (tBTA_SYS_CONN_STATUS status, UINT8 id, 5845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 app_id, BD_ADDR peer_addr) 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 handle; 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb; 5885cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(status); 5895cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(app_id); 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if we have opening scb for the peer device. */ 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project handle = bta_ag_idx_by_bdaddr (peer_addr); 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb = bta_ag_scb_by_idx (handle); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb && (p_scb->state == BTA_AG_OPENING_ST)) 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (id == BTA_ID_SYS) /* ACL collision */ 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 599e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("AG found collision (ACL) ..."); 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (id == BTA_ID_AG) /* RFCOMM collision */ 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 603e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("AG found collision (RFCOMM) ..."); 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 607e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_WARNING ("AG found collision (\?\?\?) ..."); 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->state = BTA_AG_INIT_ST; 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Cancel SDP if it had been started. */ 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(p_scb->p_disc_db) 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (void)SDP_CancelServiceSearch (p_scb->p_disc_db); 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_free_db(p_scb, NULL); 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* reopen registered servers */ 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Collision may be detected before or after we close servers. */ 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_ag_is_server_closed (p_scb)) 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_start_servers(p_scb, p_scb->reg_services); 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Start timer to han */ 62578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_set_on_queue(p_scb->collision_timer, BTA_AG_COLLISION_TIMEOUT_MS, 62678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov bta_ag_collision_timer_cback, p_scb, 62778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov btu_bta_alarm_queue); 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_resume_open 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Resume opening process. 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ag_resume_open (tBTA_AG_SCB *p_scb) 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb) 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 645e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG ("bta_ag_resume_open, Handle(%d)", bta_ag_scb_to_idx(p_scb)); 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* resume opening process. */ 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->state == BTA_AG_INIT_ST) 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->state = BTA_AG_OPENING_ST; 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_start_open (p_scb, NULL); 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 656e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR ("bta_ag_resume_open, Null p_scb"); 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_api_enable 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API enable event. 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_ag_api_enable(tBTA_AG_DATA *p_data) 6715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* initialize control block */ 67378bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov for (size_t i = 0; i < BTA_AG_NUM_SCB; i++) { 67478bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(bta_ag_cb.scb[i].ring_timer); 67578bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#if (BTM_WBS_INCLUDED == TRUE) 67678bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(bta_ag_cb.scb[i].codec_negotiation_timer); 67778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov#endif 67878bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov alarm_free(bta_ag_cb.scb[i].collision_timer); 67978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov } 6805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project memset(&bta_ag_cb, 0, sizeof(tBTA_AG_CB)); 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* store callback function */ 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_cb.p_cback = p_data->api_enable.p_cback; 6845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_cb.parse_mode = p_data->api_enable.parse_mode; 6855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call init call-out */ 6875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_co_init(); 6885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_collision_register (BTA_ID_AG, bta_ag_collision_cback); 6905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* call callback with enable event */ 6925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ag_cb.p_cback)(BTA_AG_ENABLE_EVT, NULL); 6935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_api_disable 6985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API disable event. 7005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_ag_api_disable(tBTA_AG_DATA *p_data) 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* deregister all scbs in use */ 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb = &bta_ag_cb.scb[0]; 7095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BOOLEAN do_dereg = FALSE; 7105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 7115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!bta_sys_is_register (BTA_ID_AG)) 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 714e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("BTA AG is already disabled, ignoring ..."); 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 7165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* De-register with BTA system manager */ 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_deregister(BTA_ID_AG); 7205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_AG_NUM_SCB; i++, p_scb++) 7225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->in_use) 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sm_execute(p_scb, BTA_AG_API_DEREGISTER_EVT, p_data); 7265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do_dereg = TRUE; 7275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (!do_dereg) 7315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Done, send callback evt to app */ 7335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ag_cb.p_cback)(BTA_AG_DISABLE_EVT, NULL); 7345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_sys_collision_register (BTA_ID_AG, NULL); 7375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_api_register 7425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API event registers a new service. 7445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_ag_api_register(tBTA_AG_DATA *p_data) 7505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb; 7525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_REGISTER reg; 7535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocate an scb */ 7555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_ag_scb_alloc()) != NULL) 7565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 757e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_api_register: p_scb 0x%08x ", p_scb); 7585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sm_execute(p_scb, p_data->hdr.event, p_data); 7595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project reg.status = BTA_AG_FAIL_RESOURCES; 7635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ag_cb.p_cback)(BTA_AG_REGISTER_EVT, (tBTA_AG *) ®); 7645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 7685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_api_result 7705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Handle an API result event. 7725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 7755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 7765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 7775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic void bta_ag_api_result(tBTA_AG_DATA *p_data) 7785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 7795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb; 7805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 7815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_data->hdr.layer_specific != BTA_AG_HANDLE_ALL) 7835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_ag_scb_by_idx(p_data->hdr.layer_specific)) != NULL) 7855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 786e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_api_result: p_scb 0x%08x ", p_scb); 7875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); 7885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 7915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0, p_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, p_scb++) 7935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 7942cb90bc58fc075ec2f814ada5ae8f728380566c1Nitin Srivastava if (p_scb->in_use && p_scb->svc_conn) 7955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 796e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_api_result p_scb 0x%08x ", p_scb); 7975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data); 7985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 7995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_sm_execute 8065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description State machine event handling function for AG 8085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 8115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_ag_sm_execute(tBTA_AG_SCB *p_scb, UINT16 event, tBTA_AG_DATA *p_data) 8145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_ST_TBL state_table; 8165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 action; 8175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 8185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_AG_DEBUG == TRUE 8205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 in_event = event; 8215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 in_state = p_scb->state; 8225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Ignore displaying of AT results when not connected (Ignored in state machine) */ 8245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (in_event != BTA_AG_API_RESULT_EVT || p_scb->state == BTA_AG_OPEN_ST) 8255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 826e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d (%s), Event 0x%04x (%s)", 8275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_scb_to_idx(p_scb), 8285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->state, bta_ag_state_str(p_scb->state), 8295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event, bta_ag_evt_str(event, p_data->api_result.result)); 8305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else 832e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("AG evt (hdl 0x%04x): State %d, Event 0x%04x", 8335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_scb_to_idx(p_scb), p_scb->state, event); 8345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 8355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project event &= 0x00FF; 8375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (event >= (BTA_AG_MAX_EVT & 0x00FF)) 8385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 839e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("AG evt out of range, ignoring..."); 8405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return; 8415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* look up the state table for the current state */ 8445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project state_table = bta_ag_st_tbl[p_scb->state]; 8455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* set next state */ 8475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_scb->state = state_table[event][BTA_AG_NEXT_STATE]; 8485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* execute action functions */ 8505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for (i = 0; i < BTA_AG_ACTIONS; i++) 8515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((action = state_table[event][i]) != BTA_AG_IGNORE) 8535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project (*bta_ag_action[action])(p_scb, p_data); 8555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 8575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_AG_DEBUG == TRUE 8625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_scb->state != in_state) 8635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 864e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_EVENT("BTA AG State Change: [%s] -> [%s] after Event [%s]", 8655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_state_str(in_state), 8665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_state_str(p_scb->state), 8675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_evt_str(in_event, p_data->api_result.result)); 8685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 8695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 8705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 8715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 8735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_ag_hdl_event 8755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Data gateway main event handling function. 8775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns BOOLEAN 8805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 8815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 8825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectBOOLEAN bta_ag_hdl_event(BT_HDR *p_msg) 8835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 8845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AG_SCB *p_scb; 8855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 886e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_hdl_event: Event 0x%04x ", p_msg->event); 8875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (p_msg->event) 8885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 8895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle enable event */ 8905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_ENABLE_EVT: 8915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_api_enable((tBTA_AG_DATA *) p_msg); 8925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle disable event */ 8955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_DISABLE_EVT: 8965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_api_disable((tBTA_AG_DATA *) p_msg); 8975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 8985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 8995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle register event */ 9005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_REGISTER_EVT: 9015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_api_register((tBTA_AG_DATA *) p_msg); 9025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* handle result event */ 9055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_RESULT_EVT: 9065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_api_result((tBTA_AG_DATA *) p_msg); 9075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* all others reference scb by handle */ 9105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 9115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((p_scb = bta_ag_scb_by_idx(p_msg->layer_specific)) != NULL) 9125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 913e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG("bta_ag_hdl_event: p_scb 0x%08x ", p_scb); 9145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_ag_sm_execute(p_scb, p_msg->event, (tBTA_AG_DATA *) p_msg); 9155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project break; 9175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return TRUE; 9195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 9205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if BTA_AG_DEBUG == TRUE 9225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_ag_evt_str(UINT16 event, tBTA_AG_RES result) 9235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 9245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (event) 9255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_REGISTER_EVT: 9275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Register Request"; 9285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_DEREGISTER_EVT: 9295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Deregister Request"; 9305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_OPEN_EVT: 9315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Open SLC Request"; 9325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_CLOSE_EVT: 9335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Close SLC Request"; 9345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_AUDIO_OPEN_EVT: 9355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Open Audio Request"; 9365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_AUDIO_CLOSE_EVT: 9375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Close Audio Request"; 9385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_RESULT_EVT: 9395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (result) 9405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 9415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_SPK_RES: return ("AT Result BTA_AG_SPK_RES"); 9425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_MIC_RES: return ("AT Result BTA_AG_MIC_RES"); 9435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_INBAND_RING_RES: return ("AT Result BTA_AG_INBAND_RING_RES"); 9445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CIND_RES: return ("AT Result BTA_AG_CIND_RES"); 9455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_BINP_RES: return ("AT Result BTA_AG_BINP_RES"); 9465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_IND_RES: return ("AT Result BTA_AG_IND_RES"); 9475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_BVRA_RES: return ("AT Result BTA_AG_BVRA_RES"); 9485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CNUM_RES: return ("AT Result BTA_AG_CNUM_RES"); 9495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_BTRH_RES: return ("AT Result BTA_AG_BTRH_RES"); 9505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CLCC_RES: return ("AT Result BTA_AG_CLCC_RES"); 9515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_COPS_RES: return ("AT Result BTA_AG_COPS_RES"); 9525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_IN_CALL_RES: return ("AT Result BTA_AG_IN_CALL_RES"); 9535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_IN_CALL_CONN_RES: return ("AT Result BTA_AG_IN_CALL_CONN_RES"); 9545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CALL_WAIT_RES: return ("AT Result BTA_AG_CALL_WAIT_RES"); 9555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_OUT_CALL_ORIG_RES: return ("AT Result BTA_AG_OUT_CALL_ORIG_RES"); 9565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_OUT_CALL_ALERT_RES: return ("AT Result BTA_AG_OUT_CALL_ALERT_RES"); 9575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_OUT_CALL_CONN_RES: return ("AT Result BTA_AG_OUT_CALL_CONN_RES"); 9585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CALL_CANCEL_RES: return ("AT Result BTA_AG_CALL_CANCEL_RES"); 9595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_END_CALL_RES: return ("AT Result BTA_AG_END_CALL_RES"); 9605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_UNAT_RES: return ("AT Result BTA_AG_UNAT_RES"); 9615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: return ("Unknown AG Result"); 9625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 9635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_SETCODEC_EVT: 9645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Set Codec Request"; 9655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_RFC_OPEN_EVT: 9665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "RFC Opened"; 9675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_RFC_CLOSE_EVT: 9685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "RFC Closed"; 9695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_RFC_SRV_CLOSE_EVT: 9705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "RFC SRV Closed"; 9715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_RFC_DATA_EVT: 9725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "RFC Data"; 9735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_SCO_OPEN_EVT: 9745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Audio Opened"; 9755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_SCO_CLOSE_EVT: 9765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Audio Closed"; 9775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_DISC_ACP_RES_EVT: 9785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Discovery ACP Result"; 9795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_DISC_INT_RES_EVT: 9805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Discovery INT Result"; 9815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_DISC_OK_EVT: 9825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Discovery OK"; 9835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_DISC_FAIL_EVT: 9845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Discovery Failed"; 9855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CI_RX_WRITE_EVT: 9865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "CI RX Write"; 98778bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov case BTA_AG_RING_TIMEOUT_EVT: 9885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Ring Timeout"; 98978bcff79e1b1f0efce436b33bdd6da88745bfc8aPavlin Radoslavov case BTA_AG_SVC_TIMEOUT_EVT: 9905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Service Timeout"; 9915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_ENABLE_EVT: 9925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Enable AG"; 9935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_API_DISABLE_EVT: 9945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Disable AG"; 9955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CI_SCO_DATA_EVT: 9965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "SCO data Callin"; 9975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CI_SLC_READY_EVT: 9985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "SLC Ready Callin"; 9995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 10005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Unknown AG Event"; 10015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic char *bta_ag_state_str(UINT8 state) 10055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 10065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project switch (state) 10075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 10085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_INIT_ST: 10095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Initial"; 10105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_OPENING_ST: 10115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Opening"; 10125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_OPEN_ST: 10135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Open"; 10145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project case BTA_AG_CLOSING_ST: 10155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Closing"; 10165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project default: 10175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return "Unknown AG State"; 10185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 10195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 10205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 10215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 1022