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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
/******************************************************************************
*
* Copyright 2003-2012 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.
*
******************************************************************************/
/******************************************************************************
*
* This is the private file for the BTA GATT server.
*
******************************************************************************/
#ifndef BTA_GATTS_INT_H
#define BTA_GATTS_INT_H
#include <cstdint>
#include "bt_target.h" // Must be first to define build configuration
#include "bta/include/bta_gatt_api.h"
#include "bta/sys/bta_sys.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/bt_types.h"
#include "stack/include/btm_ble_api_types.h"
#include "stack/include/gatt_api.h"
#include "types/bluetooth/uuid.h"
#include "types/raw_address.h"
/*****************************************************************************
* Constants and data types
****************************************************************************/
enum {
BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS),
BTA_GATTS_INT_START_IF_EVT,
BTA_GATTS_API_DEREG_EVT,
BTA_GATTS_API_INDICATION_EVT,
BTA_GATTS_API_DEL_SRVC_EVT,
BTA_GATTS_API_STOP_SRVC_EVT,
BTA_GATTS_API_RSP_EVT,
BTA_GATTS_API_OPEN_EVT,
BTA_GATTS_API_CANCEL_OPEN_EVT,
BTA_GATTS_API_CLOSE_EVT,
BTA_GATTS_API_DISABLE_EVT
};
typedef uint16_t tBTA_GATTS_INT_EVT;
/* max number of application allowed on device */
#define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES
/* max number of services allowed in the device */
#define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES
/* internal strucutre for GATTC register API */
typedef struct {
BT_HDR_RIGID hdr;
bluetooth::Uuid app_uuid;
tBTA_GATTS_CBACK* p_cback;
bool eatt_support;
} tBTA_GATTS_API_REG;
typedef struct {
BT_HDR_RIGID hdr;
tGATT_IF server_if;
} tBTA_GATTS_INT_START_IF;
typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG;
typedef struct {
BT_HDR_RIGID hdr;
tGATT_IF server_if;
btgatt_db_element_t* service;
uint16_t count;
} tBTA_GATTS_API_ADD_SERVICE;
typedef struct {
BT_HDR_RIGID hdr;
uint16_t attr_id;
uint16_t len;
bool need_confirm;
uint8_t value[GATT_MAX_ATTR_LEN];
} tBTA_GATTS_API_INDICATION;
typedef struct {
BT_HDR_RIGID hdr;
uint32_t trans_id;
tGATT_STATUS status;
tGATTS_RSP* p_rsp;
} tBTA_GATTS_API_RSP;
typedef struct {
BT_HDR_RIGID hdr;
tBT_TRANSPORT transport;
} tBTA_GATTS_API_START;
typedef struct {
BT_HDR_RIGID hdr;
RawAddress remote_bda;
tGATT_IF server_if;
bool is_direct;
tBT_TRANSPORT transport;
} tBTA_GATTS_API_OPEN;
typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN;
typedef union {
BT_HDR_RIGID hdr;
tBTA_GATTS_API_REG api_reg;
tBTA_GATTS_API_DEREG api_dereg;
tBTA_GATTS_API_ADD_SERVICE api_add_service;
tBTA_GATTS_API_INDICATION api_indicate;
tBTA_GATTS_API_RSP api_rsp;
tBTA_GATTS_API_OPEN api_open;
tBTA_GATTS_API_CANCEL_OPEN api_cancel_open;
tBTA_GATTS_INT_START_IF int_start_if;
} tBTA_GATTS_DATA;
/* application registration control block */
typedef struct {
bool in_use;
bluetooth::Uuid app_uuid;
tBTA_GATTS_CBACK* p_cback;
tGATT_IF gatt_if;
} tBTA_GATTS_RCB;
/* service registration control block */
typedef struct {
bluetooth::Uuid service_uuid; /* service UUID */
uint16_t service_id; /* service start handle */
uint8_t rcb_idx;
uint8_t idx; /* self index of serviec CB */
bool in_use;
} tBTA_GATTS_SRVC_CB;
/* GATT server control block */
typedef struct {
bool enabled;
tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM];
tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM];
} tBTA_GATTS_CB;
/*****************************************************************************
* Global data
****************************************************************************/
/* GATTC control block */
extern tBTA_GATTS_CB bta_gatts_cb;
/*****************************************************************************
* Function prototypes
****************************************************************************/
extern bool bta_gatts_hdl_event(BT_HDR_RIGID* p_msg);
extern void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb);
extern void bta_gatts_api_enable(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_data);
extern void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_start_if(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb,
tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb,
tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_send_rsp(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb,
tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_cancel_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern void bta_gatts_close(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
extern tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if(tGATT_IF server_if);
extern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb,
tGATT_IF server_if);
extern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx);
extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id(
tBTA_GATTS_CB* p_cb, uint16_t service_id);
extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id(
tBTA_GATTS_CB* p_cb, uint16_t attr_id);
#endif /* BTA_GATTS_INT_H */
|