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 *) &reg);
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