1/****************************************************************************** 2 * 3 * Copyright (C) 2009-2013 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 20#ifndef GAP_INT_H 21#define GAP_INT_H 22 23#include "bt_target.h" 24#include "gap_api.h" 25#include "gki.h" 26#include "gatt_api.h" 27#define GAP_MAX_BLOCKS 2 /* Concurrent GAP commands pending at a time*/ 28/* Define the Generic Access Profile control structure */ 29typedef struct 30{ 31 void *p_data; /* Pointer to any data returned in callback */ 32 tGAP_CALLBACK *gap_cback; /* Pointer to users callback function */ 33 tGAP_CALLBACK *gap_inq_rslt_cback; /* Used for inquiry results */ 34 UINT16 event; /* Passed back in the callback */ 35 UINT8 index; /* Index of this control block and callback */ 36 BOOLEAN in_use; /* True when structure is allocated */ 37} tGAP_INFO; 38 39/* Define the control block for the FindAddrByName operation (Only 1 active at a time) */ 40typedef struct 41{ 42 tGAP_CALLBACK *p_cback; 43 tBTM_INQ_INFO *p_cur_inq; /* Pointer to the current inquiry database entry */ 44 tGAP_FINDADDR_RESULTS results; 45 BOOLEAN in_use; 46} tGAP_FINDADDR_CB; 47 48/* Define the GAP Connection Control Block. 49*/ 50typedef struct 51{ 52#define GAP_CCB_STATE_IDLE 0 53#define GAP_CCB_STATE_LISTENING 1 54#define GAP_CCB_STATE_CONN_SETUP 2 55#define GAP_CCB_STATE_CFG_SETUP 3 56#define GAP_CCB_STATE_WAIT_SEC 4 57#define GAP_CCB_STATE_CONNECTED 5 58 UINT8 con_state; 59 60#define GAP_CCB_FLAGS_IS_ORIG 0x01 61#define GAP_CCB_FLAGS_HIS_CFG_DONE 0x02 62#define GAP_CCB_FLAGS_MY_CFG_DONE 0x04 63#define GAP_CCB_FLAGS_SEC_DONE 0x08 64#define GAP_CCB_FLAGS_CONN_DONE 0x0E 65 UINT8 con_flags; 66 67 UINT8 service_id; /* Used by BTM */ 68 UINT16 gap_handle; /* GAP handle */ 69 UINT16 connection_id; /* L2CAP CID */ 70 BOOLEAN rem_addr_specified; 71 UINT8 chan_mode_mask; /* Supported channel modes (FCR) */ 72 BD_ADDR rem_dev_address; 73 UINT16 psm; 74 UINT16 rem_mtu_size; 75 76 BOOLEAN is_congested; 77 BUFFER_Q tx_queue; /* Queue of buffers waiting to be sent */ 78 BUFFER_Q rx_queue; /* Queue of buffers waiting to be read */ 79 80 UINT32 rx_queue_size; /* Total data count in rx_queue */ 81 82 tGAP_CONN_CALLBACK *p_callback; /* Users callback function */ 83 84 tL2CAP_CFG_INFO cfg; /* Configuration */ 85 tL2CAP_ERTM_INFO ertm_info; /* Pools and modes for ertm */ 86} tGAP_CCB; 87 88typedef struct 89{ 90#if AMP_INCLUDED == TRUE 91 tAMP_APPL_INFO reg_info; 92#else 93 tL2CAP_APPL_INFO reg_info; /* L2CAP Registration info */ 94#endif 95 tGAP_CCB ccb_pool[GAP_MAX_CONNECTIONS]; 96} tGAP_CONN; 97 98 99#if BLE_INCLUDED == TRUE 100#define GAP_MAX_CHAR_NUM 4 101 102typedef struct 103{ 104 UINT16 handle; 105 UINT16 uuid; 106 tGAP_BLE_ATTR_VALUE attr_value; 107}tGAP_ATTR; 108#endif 109/********************************************************************** 110** M A I N C O N T R O L B L O C K 111***********************************************************************/ 112 113#define GAP_MAX_CL GATT_CL_MAX_LCB 114 115typedef struct 116{ 117 UINT16 uuid; 118 tGAP_BLE_CMPL_CBACK *p_cback; 119} tGAP_BLE_REQ; 120 121typedef struct 122{ 123 BD_ADDR bda; 124 tGAP_BLE_CMPL_CBACK *p_cback; 125 UINT16 conn_id; 126 UINT16 cl_op_uuid; 127 BOOLEAN in_use; 128 BOOLEAN connected; 129 BUFFER_Q pending_req_q; 130 131}tGAP_CLCB; 132 133typedef struct 134{ 135 tGAP_INFO blk[GAP_MAX_BLOCKS]; 136 tBTM_CMPL_CB *btm_cback[GAP_MAX_BLOCKS]; 137 UINT8 trace_level; 138 tGAP_FINDADDR_CB findaddr_cb; /* Contains the control block for finding a device addr */ 139 tBTM_INQ_INFO *cur_inqptr; 140 141#if GAP_CONN_INCLUDED == TRUE 142 tGAP_CONN conn; 143#endif 144 145 /* LE GAP attribute database */ 146#if BLE_INCLUDED == TRUE 147 tGAP_ATTR gatt_attr[GAP_MAX_CHAR_NUM]; 148 tGAP_CLCB clcb[GAP_MAX_CL]; /* connection link*/ 149 tGATT_IF gatt_if; 150#endif 151} tGAP_CB; 152 153 154extern tGAP_CB gap_cb; 155#if (GAP_CONN_INCLUDED == TRUE) 156 extern void gap_conn_init(void); 157#endif 158#if (BLE_INCLUDED == TRUE) 159 extern void gap_attr_db_init(void); 160#endif 161 162#endif 163