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