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 */ 29 typedef 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) */ 40 typedef 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 */ 50 typedef 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 88 typedef 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 102 typedef 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 115 typedef struct 116 { 117 UINT16 uuid; 118 tGAP_BLE_CMPL_CBACK *p_cback; 119 } tGAP_BLE_REQ; 120 121 typedef 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 133 typedef 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 154 extern 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