16ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************
26ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
36ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  Copyright (C) 2003-2012 Broadcom Corporation
46ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
56ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  Licensed under the Apache License, Version 2.0 (the "License");
66ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  you may not use this file except in compliance with the License.
76ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  You may obtain a copy of the License at:
86ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
96ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  http://www.apache.org/licenses/LICENSE-2.0
106ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
116ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  Unless required by applicable law or agreed to in writing, software
126ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  distributed under the License is distributed on an "AS IS" BASIS,
136ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  See the License for the specific language governing permissions and
156ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  limitations under the License.
166ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
176ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach ******************************************************************************/
186ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach
196ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/******************************************************************************
206ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
216ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *  This file contains the GATT client main functions and state machine.
226ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach *
236ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach ******************************************************************************/
24e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
25e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "bt_target.h"
26e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
27e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if defined(BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE)
28e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
29e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include <string.h>
30e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
31e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "bta_gattc_int.h"
32e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#include "gki.h"
33e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
34e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
35e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*****************************************************************************
36e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Constants and types
37e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*****************************************************************************/
38e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
39e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
40e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state machine action enumeration list */
41e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachenum
42e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
43e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_OPEN,
44e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_OPEN_FAIL,
45e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    //BTA_GATTC_OPEN_FAIL_IN_CONN,        //<--- need to remove this?
46e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_OPEN_ERROR,
47e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CANCEL_OPEN,
486ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach    BTA_GATTC_CANCEL_OPEN_OK,
49e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CANCEL_OPEN_ERROR,
50e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CONN,
51e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_START_DISCOVER,
52e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_DISC_CMPL,
53e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
54e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_Q_CMD,
55e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CLOSE,
56e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CLOSE_FAIL,
57e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_READ,
58e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_WRITE,
59e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
60e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_OP_CMPL,
61e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_SEARCH,
62e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_FAIL,
63e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CONFIRM,
64e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_EXEC,
65e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_READ_MULTI,
66e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CI_OPEN,
67e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CI_LOAD,
68e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CI_SAVE,
69e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_CACHE_OPEN,
70e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_IGNORE_OP_CMPL,
71e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
72e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    BTA_GATTC_IGNORE
73e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
74e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* type for action functions */
75e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachtypedef void (*tBTA_GATTC_ACTION)(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data);
76e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
77e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* action function list */
78e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachconst tBTA_GATTC_ACTION bta_gattc_action[] =
79e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
80e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_open,
81e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_open_fail,
82e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    //bta_gattc_open_fail_in_conn,            //<--- need to remove this?
83e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_open_error,
84e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_cancel_open,
85e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_cancel_open_ok,
86e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_cancel_open_error,
876ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach    bta_gattc_conn,
88e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_start_discover,
89e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_disc_cmpl,
90e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
91e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_q_cmd,
92e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_close,
93e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_close_fail,
94e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_read,
95e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_write,
96e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
97e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_op_cmpl,
98e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_search,
99e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_fail,
1006ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach    bta_gattc_confirm,
101e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_execute,
102e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_read_multi,
103e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_ci_open,
104e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_ci_load,
105e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_ci_save,
106e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_cache_open,
107e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_ignore_op_cmpl
108e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
109e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
110e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
111e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table information */
112e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTA_GATTC_ACTIONS           1       /* number of actions */
113e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTA_GATTC_NEXT_STATE          1       /* position of next state */
114e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#define BTA_GATTC_NUM_COLS            2       /* number of columns in state tables */
115e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
116e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table for idle state */
117e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic const UINT8 bta_gattc_st_idle[][BTA_GATTC_NUM_COLS] =
118e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
119e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* Event                            Action 1                  Next state */
120e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_OPEN_EVT           */   {BTA_GATTC_OPEN,              BTA_GATTC_W4_CONN_ST},
121e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_OPEN_FAIL_EVT      */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
122e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CANCEL_OPEN_EVT    */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
123e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
124e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
125e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_EVT           */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
126e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_WRITE_EVT          */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
127e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_EXEC_EVT           */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
128e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
129e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CLOSE_EVT          */   {BTA_GATTC_CLOSE_FAIL,        BTA_GATTC_IDLE_ST},
130e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
131e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_SEARCH_EVT         */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
132e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CONFIRM_EVT        */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
133e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_MULTI_EVT     */   {BTA_GATTC_FAIL,              BTA_GATTC_IDLE_ST},
134e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CONN_EVT           */   {BTA_GATTC_CONN,              BTA_GATTC_CONN_ST},
135e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCOVER_EVT       */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
136e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_DISCOVER_CMPL_EVT      */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
137e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_OP_CMPL_EVT            */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
138e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCONN_EVT       */    {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
139e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
140e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
1416ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* ===> for cache loading, saving   */
142e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_START_CACHE_EVT        */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
143e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_OPEN_EVT      */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
144e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_LOAD_EVT      */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST},
145e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_SAVE_EVT      */   {BTA_GATTC_IGNORE,            BTA_GATTC_IDLE_ST}
146e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
147e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
148e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table for wait for open state */
149e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic const UINT8 bta_gattc_st_w4_conn[][BTA_GATTC_NUM_COLS] =
150e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
151e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* Event                            Action 1                             Next state */
152e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_OPEN_EVT           */   {BTA_GATTC_OPEN,              BTA_GATTC_W4_CONN_ST},
153e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_OPEN_FAIL_EVT      */   {BTA_GATTC_OPEN_FAIL,         BTA_GATTC_IDLE_ST},
154e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CANCEL_OPEN_EVT    */   {BTA_GATTC_CANCEL_OPEN,       BTA_GATTC_W4_CONN_ST},
155e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */   {BTA_GATTC_CANCEL_OPEN_OK,    BTA_GATTC_IDLE_ST},
156e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
157e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_EVT           */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
158e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_WRITE_EVT          */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
159e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_EXEC_EVT           */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
160e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
161e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CLOSE_EVT          */   {BTA_GATTC_CLOSE_FAIL,         BTA_GATTC_W4_CONN_ST},
162e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
163e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_SEARCH_EVT         */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
164e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CONFIRM_EVT        */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
165e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_MULTI_EVT     */   {BTA_GATTC_FAIL,               BTA_GATTC_W4_CONN_ST},
166e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
167e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CONN_EVT           */   {BTA_GATTC_CONN,               BTA_GATTC_CONN_ST},
168e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCOVER_EVT       */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
169e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_DISCOVER_CMPL_EVT       */  {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
170e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_OP_CMPL_EVT            */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
171e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCONN_EVT      */     {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST},
172e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
173e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* ===> for cache loading, saving   */
174e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_START_CACHE_EVT        */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
175e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_OPEN_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
176e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_LOAD_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST},
177e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_SAVE_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_W4_CONN_ST}
178e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
179e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
180e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table for open state */
181e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic const UINT8 bta_gattc_st_connected[][BTA_GATTC_NUM_COLS] =
182e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
183e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* Event                            Action 1                            Next state */
184e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_OPEN_EVT           */   {BTA_GATTC_OPEN_ERROR,         BTA_GATTC_CONN_ST},
185e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_OPEN_FAIL_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
186e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CANCEL_OPEN_EVT    */   {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_CONN_ST},
1876ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */   {BTA_GATTC_IGNORE,            BTA_GATTC_CONN_ST},
188e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
189e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_EVT           */   {BTA_GATTC_READ,               BTA_GATTC_CONN_ST},
190e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_WRITE_EVT          */   {BTA_GATTC_WRITE,              BTA_GATTC_CONN_ST},
191e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_EXEC_EVT           */   {BTA_GATTC_EXEC,               BTA_GATTC_CONN_ST},
192e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
193e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CLOSE_EVT          */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST}, //BTA_GATTC_CLOSING_ST
194e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
195e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_SEARCH_EVT         */   {BTA_GATTC_SEARCH,             BTA_GATTC_CONN_ST},
196e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CONFIRM_EVT        */   {BTA_GATTC_CONFIRM,            BTA_GATTC_CONN_ST},
197e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_MULTI_EVT     */   {BTA_GATTC_READ_MULTI,         BTA_GATTC_CONN_ST},
198e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CONN_EVT           */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
199e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCOVER_EVT       */   {BTA_GATTC_START_DISCOVER,     BTA_GATTC_DISCOVER_ST},
200e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_DISCOVER_CMPL_EVT       */  {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
201e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_OP_CMPL_EVT            */   {BTA_GATTC_OP_CMPL,            BTA_GATTC_CONN_ST},
202e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
203e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCONN_EVT        */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST},
204e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
2056ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* ===> for cache loading, saving   */
206e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_START_CACHE_EVT        */   {BTA_GATTC_CACHE_OPEN,         BTA_GATTC_DISCOVER_ST},
207e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_OPEN_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
208e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_LOAD_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST},
209e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_SAVE_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_CONN_ST}
210e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
211e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
212e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table for discover state */
213e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic const UINT8 bta_gattc_st_discover[][BTA_GATTC_NUM_COLS] =
214e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
215e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* Event                            Action 1                            Next state */
216e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_OPEN_EVT           */   {BTA_GATTC_OPEN_ERROR,         BTA_GATTC_DISCOVER_ST},
217e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_OPEN_FAIL_EVT      */   {BTA_GATTC_IGNORE,             BTA_GATTC_DISCOVER_ST},
218e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CANCEL_OPEN_EVT    */   {BTA_GATTC_CANCEL_OPEN_ERROR,  BTA_GATTC_DISCOVER_ST},
2196ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */   {BTA_GATTC_FAIL,               BTA_GATTC_DISCOVER_ST},
220e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
221e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_EVT           */   {BTA_GATTC_Q_CMD,              BTA_GATTC_DISCOVER_ST},
222e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_WRITE_EVT          */   {BTA_GATTC_Q_CMD,              BTA_GATTC_DISCOVER_ST},
223e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_EXEC_EVT           */   {BTA_GATTC_Q_CMD,              BTA_GATTC_DISCOVER_ST},
224e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
225e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CLOSE_EVT          */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST    },    //BTA_GATTC_CLOSING_ST
226e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
227e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_SEARCH_EVT         */   {BTA_GATTC_Q_CMD,              BTA_GATTC_DISCOVER_ST},
228e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_CONFIRM_EVT        */   {BTA_GATTC_CONFIRM,            BTA_GATTC_DISCOVER_ST},
229e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_API_READ_MULTI_EVT     */   {BTA_GATTC_Q_CMD,              BTA_GATTC_DISCOVER_ST},
230e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_CONN_EVT           */   {BTA_GATTC_IGNORE,             BTA_GATTC_DISCOVER_ST},
231e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCOVER_EVT       */   {BTA_GATTC_START_DISCOVER,     BTA_GATTC_DISCOVER_ST},
2326ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* BTA_GATTC_DISCOVER_CMPL_EVT      */   {BTA_GATTC_DISC_CMPL,          BTA_GATTC_CONN_ST},
233e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_OP_CMPL_EVT            */   {BTA_GATTC_IGNORE_OP_CMPL,     BTA_GATTC_DISCOVER_ST},
234e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_INT_DISCONN_EVT        */   {BTA_GATTC_CLOSE,              BTA_GATTC_IDLE_ST},
235e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
2366ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach/* ===> for cache loading, saving       */
237e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_START_CACHE_EVT        */   {BTA_GATTC_IGNORE,             BTA_GATTC_DISCOVER_ST},
238e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_OPEN_EVT      */   {BTA_GATTC_CI_OPEN,            BTA_GATTC_DISCOVER_ST},
239e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_LOAD_EVT      */   {BTA_GATTC_CI_LOAD,            BTA_GATTC_DISCOVER_ST},
240e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* BTA_GATTC_CI_CACHE_SAVE_EVT      */   {BTA_GATTC_CI_SAVE,            BTA_GATTC_DISCOVER_ST}
241e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
242e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
243e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* type for state table */
244e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachtypedef const UINT8 (*tBTA_GATTC_ST_TBL)[BTA_GATTC_NUM_COLS];
245e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
246e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* state table */
247e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachconst tBTA_GATTC_ST_TBL bta_gattc_st_tbl[] =
248e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
249e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_st_idle,
250e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_st_w4_conn,
251e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_st_connected,
252e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    bta_gattc_st_discover
253e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach};
254e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
255e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*****************************************************************************
256e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Global data
257e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*****************************************************************************/
258e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
259e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/* GATTC control block */
260e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_DYNAMIC_MEMORY == FALSE
261e448862a47c08eb23185aaed574b39264f5005fcAndre EisenbachtBTA_GATTC_CB  bta_gattc_cb;
262e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif
263e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
264e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_GATT_DEBUG == TRUE
265e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic char *gattc_evt_code(tBTA_GATTC_INT_EVT evt_code);
266e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic char *gattc_state_code(tBTA_GATTC_STATE state_code);
267e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif
268e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
269e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*******************************************************************************
270e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
271e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Function         bta_gattc_sm_execute
272e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
273e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Description      State machine event handling function for GATTC
2746ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach**
275e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
276e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Returns          void
277e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
278e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*******************************************************************************/
279e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachvoid bta_gattc_sm_execute(tBTA_GATTC_CLCB *p_clcb, UINT16 event, tBTA_GATTC_DATA *p_data)
280e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
281e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    tBTA_GATTC_ST_TBL     state_table;
282e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    UINT8               action;
283e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    int                 i;
284e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_GATT_DEBUG == TRUE
285e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    tBTA_GATTC_STATE in_state = p_clcb->state;
286e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    UINT16         in_event = event;
287e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    APPL_TRACE_DEBUG4("bta_gattc_sm_execute: State 0x%02x [%s], Event 0x%x[%s]", in_state,
288e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                      gattc_state_code(in_state),
289e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                      in_event,
290e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                      gattc_evt_code(in_event));
291e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif
292e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
293e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
294e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    /* look up the state table for the current state */
295e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    state_table = bta_gattc_st_tbl[p_clcb->state];
296e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
297e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    event &= 0x00FF;
298e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
299e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    /* set next state */
300e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    p_clcb->state = state_table[event][BTA_GATTC_NEXT_STATE];
301e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
302e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    /* execute action functions */
303e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    for (i = 0; i < BTA_GATTC_ACTIONS; i++)
304e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    {
305e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        if ((action = state_table[event][i]) != BTA_GATTC_IGNORE)
306e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        {
307e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            (*bta_gattc_action[action])(p_clcb, p_data);
308e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        }
309e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        else
310e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        {
311e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
312e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        }
313e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    }
314e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
315e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_GATT_DEBUG == TRUE
316e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    if (in_state != p_clcb->state)
317e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    {
318e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        APPL_TRACE_DEBUG3("GATTC State Change: [%s] -> [%s] after Event [%s]",
319e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                          gattc_state_code(in_state),
320e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                          gattc_state_code(p_clcb->state),
321e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                          gattc_evt_code(in_event));
322e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    }
323e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif
324e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}
325e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
326e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*******************************************************************************
327e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
328e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Function         bta_gattc_hdl_event
329e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
330e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Description      GATT client main event handling function.
3316ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach**
332e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
333e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Returns          void
334e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
335e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*******************************************************************************/
336e448862a47c08eb23185aaed574b39264f5005fcAndre EisenbachBOOLEAN bta_gattc_hdl_event(BT_HDR *p_msg)
337e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
338e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    tBTA_GATTC_CB *p_cb = &bta_gattc_cb;
339e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    tBTA_GATTC_CLCB *p_clcb = NULL;
340e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
341e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_GATT_DEBUG == TRUE
342e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    APPL_TRACE_DEBUG1("bta_gattc_hdl_event: Event [%s]", gattc_evt_code(p_msg->event));
343e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif
344e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    switch (p_msg->event)
345e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    {
346e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_REG_EVT:
347e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_register(p_cb, (tBTA_GATTC_DATA *) p_msg);
348e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
349e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
350e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_START_IF_EVT:
351e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_start_if(p_cb, (tBTA_GATTC_DATA *) p_msg);
352e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
353e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
354e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_DEREG_EVT:
355e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_deregister(p_cb, (tBTA_GATTC_DATA *) p_msg);
356e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
357e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
358e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_DEREG_EVT:
359e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_int_deregister(p_cb, (tBTA_GATTC_DATA *) p_msg);
360e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
361e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
362e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_OPEN_EVT:
363e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_process_api_open(p_cb, (tBTA_GATTC_DATA *) p_msg);
364e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
365e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
366e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_CANCEL_OPEN_EVT:
367e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            bta_gattc_process_api_open_cancel(p_cb, (tBTA_GATTC_DATA *) p_msg);
368e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
369e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
370e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        default:
371e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            if ((p_clcb = bta_gattc_find_clcb_by_conn_id(p_msg->layer_specific))
372e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                != NULL)
373e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            {
374e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                bta_gattc_sm_execute(p_clcb, p_msg->event, (tBTA_GATTC_DATA *) p_msg);
375e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            }
376e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            else
377e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            {
378e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach                APPL_TRACE_ERROR1("Unknown conn ID: %d", p_msg->layer_specific);
379e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            }
380e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
381e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            break;
382e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    }
383e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
384e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
385e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    return(TRUE);
386e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}
387e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
388e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
389e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*****************************************************************************
390e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**  Debug Functions
391e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*****************************************************************************/
392e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#if BTA_GATT_DEBUG == TRUE
393e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
394e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*******************************************************************************
395e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
396e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Function         gattc_evt_code
397e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
3986ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach** Description
399e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
400e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Returns          void
401e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
402e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*******************************************************************************/
403e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic char *gattc_evt_code(tBTA_GATTC_INT_EVT evt_code)
404e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
405e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    switch (evt_code)
406e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    {
407e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_OPEN_EVT:
408e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_OPEN_EVT";
409e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_OPEN_FAIL_EVT:
410e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_OPEN_FAIL_EVT";
411e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_CANCEL_OPEN_EVT:
412e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_CANCEL_OPEN_EVT";
413e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_CANCEL_OPEN_OK_EVT:
414e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_CANCEL_OPEN_OK_EVT";
415e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_READ_EVT:
416e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_READ_EVT";
417e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_WRITE_EVT:
418e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_WRITE_EVT";
419e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_EXEC_EVT:
420e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_EXEC_EVT";
421e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_CLOSE_EVT:
422e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_CLOSE_EVT";
423e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_SEARCH_EVT:
424e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_SEARCH_EVT";
425e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_CONFIRM_EVT:
426e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_CONFIRM_EVT";
427e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_READ_MULTI_EVT:
428e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_READ_MULTI_EVT";
429e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_CONN_EVT:
430e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_CONN_EVT";
431e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_DISCOVER_EVT:
432e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_DISCOVER_EVT";
433e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_DISCOVER_CMPL_EVT:
434e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_DISCOVER_CMPL_EVT";
435e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_OP_CMPL_EVT:
436e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_OP_CMPL_EVT";
437e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_DISCONN_EVT:
438e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_DISCONN_EVT";
439e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_START_CACHE_EVT:
440e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_START_CACHE_EVT";
441e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_CI_CACHE_OPEN_EVT:
442e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_CI_CACHE_OPEN_EVT";
443e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_CI_CACHE_LOAD_EVT:
444e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_CI_CACHE_LOAD_EVT";
445e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_CI_CACHE_SAVE_EVT:
446e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_CI_CACHE_SAVE_EVT";
447e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_INT_START_IF_EVT:
448e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_INT_START_IF_EVT";
449e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_REG_EVT:
450e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_REG_EVT";
451e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_API_DEREG_EVT:
452e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "BTA_GATTC_API_DEREG_EVT";
453e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
454e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        default:
455e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "unknown GATTC event code";
456e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    }
457e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}
458e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
459e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach/*******************************************************************************
460e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
461e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Function         gattc_state_code
462e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
4636ef101187774e30ddba6b46bbedef549a42196adAndre Eisenbach** Description
464e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
465e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach** Returns          void
466e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach**
467e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach*******************************************************************************/
468e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbachstatic char *gattc_state_code(tBTA_GATTC_STATE state_code)
469e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach{
470e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    switch (state_code)
471e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    {
472e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_IDLE_ST:
473e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "GATTC_IDLE_ST";
474e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_W4_CONN_ST:
475e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "GATTC_W4_CONN_ST";
476e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_CONN_ST:
477e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "GATTC_CONN_ST";
478e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        case BTA_GATTC_DISCOVER_ST:
479e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "GATTC_DISCOVER_ST";
480e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach        default:
481e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach            return "unknown GATTC state code";
482e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach    }
483e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach}
484e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach
485e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif  /* Debug Functions */
486e448862a47c08eb23185aaed574b39264f5005fcAndre Eisenbach#endif /* BTA_GATT_INCLUDED */
487