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