• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2003-2012 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  *
21  *  This is the private file for the BTA GATT server.
22  *
23  ******************************************************************************/
24 #ifndef BTA_GATTS_INT_H
25 #define BTA_GATTS_INT_H
26 
27 #include "bt_target.h"
28 #include "bta_sys.h"
29 #include "bta_gatt_api.h"
30 #include "gatt_api.h"
31 //#include "bta_gatts_co.h"
32 
33 #include "gki.h"
34 
35 /*****************************************************************************
36 **  Constants and data types
37 *****************************************************************************/
38 enum
39 {
40     BTA_GATTS_API_REG_EVT  = BTA_SYS_EVT_START(BTA_ID_GATTS),
41     BTA_GATTS_INT_START_IF_EVT,
42     BTA_GATTS_API_DEREG_EVT,
43     BTA_GATTS_API_CREATE_SRVC_EVT,
44     BTA_GATTS_API_INDICATION_EVT,
45 
46     BTA_GATTS_API_ADD_INCL_SRVC_EVT,
47     BTA_GATTS_API_ADD_CHAR_EVT,
48     BTA_GATTS_API_ADD_DESCR_EVT,
49     BTA_GATTS_API_DEL_SRVC_EVT,
50     BTA_GATTS_API_START_SRVC_EVT,
51     BTA_GATTS_API_STOP_SRVC_EVT,
52     BTA_GATTS_API_RSP_EVT,
53     BTA_GATTS_API_OPEN_EVT,
54     BTA_GATTS_API_CANCEL_OPEN_EVT,
55     BTA_GATTS_API_CLOSE_EVT
56 
57 };
58 typedef UINT16 tBTA_GATTS_INT_EVT;
59 
60 /* max number of application allowed on device */
61 #define BTA_GATTS_MAX_APP_NUM   GATT_MAX_SR_PROFILES
62 
63 /* max number of services allowed in the device */
64 #define BTA_GATTS_MAX_SRVC_NUM   GATT_MAX_SR_PROFILES
65 
66 /* internal strucutre for GATTC register API  */
67 typedef struct
68 {
69     BT_HDR                  hdr;
70     tBT_UUID                app_uuid;
71     tBTA_GATTS_CBACK        *p_cback;
72 }tBTA_GATTS_API_REG;
73 
74 typedef struct
75 {
76     BT_HDR                  hdr;
77     tBTA_GATTS_IF           server_if;
78 }tBTA_GATTS_INT_START_IF;
79 
80 typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG;
81 
82 typedef struct
83 {
84     BT_HDR                  hdr;
85     tBTA_GATTS_IF           server_if;
86     tBT_UUID                service_uuid;
87     UINT16                  num_handle;
88     UINT8                   inst;
89     BOOLEAN                 is_pri;
90 
91 } tBTA_GATTS_API_CREATE_SRVC;
92 
93 typedef struct
94 {
95     BT_HDR                  hdr;
96     tBT_UUID                char_uuid;
97     tBTA_GATT_PERM          perm;
98     tBTA_GATT_CHAR_PROP     property;
99 
100 }tBTA_GATTS_API_ADD_CHAR;
101 
102 typedef struct
103 {
104     BT_HDR                  hdr;
105     UINT16                  included_service_id;
106 
107 }tBTA_GATTS_API_ADD_INCL_SRVC;
108 
109 typedef struct
110 {
111     BT_HDR                      hdr;
112     tBT_UUID                    descr_uuid;
113     tBTA_GATT_PERM              perm;
114 }tBTA_GATTS_API_ADD_DESCR;
115 
116 typedef struct
117 {
118     BT_HDR  hdr;
119     //todo BD_ADDR bd_addr;
120     UINT16  attr_id;
121     UINT16  len;
122     BOOLEAN need_confirm;
123     UINT8   value[BTA_GATT_MAX_ATTR_LEN];
124 }tBTA_GATTS_API_INDICATION;
125 
126 typedef struct
127 {
128     BT_HDR              hdr;
129     UINT32              trans_id;
130     tBTA_GATT_STATUS    status;
131     tBTA_GATTS_RSP      *p_rsp;
132 }tBTA_GATTS_API_RSP;
133 
134 typedef struct
135 {
136     BT_HDR                  hdr;
137     tBTA_GATT_TRANSPORT     transport;
138 }tBTA_GATTS_API_START;
139 
140 
141 typedef struct
142 {
143     BT_HDR              hdr;
144     BD_ADDR             remote_bda;
145     tBTA_GATTS_IF       server_if;
146     BOOLEAN             is_direct;
147 }tBTA_GATTS_API_OPEN;
148 
149 typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN;
150 
151 typedef union
152 {
153     BT_HDR                          hdr;
154     tBTA_GATTS_API_REG              api_reg;
155     tBTA_GATTS_API_DEREG            api_dereg;
156     tBTA_GATTS_API_CREATE_SRVC      api_create_svc;
157     tBTA_GATTS_API_ADD_INCL_SRVC    api_add_incl_srvc;
158     tBTA_GATTS_API_ADD_CHAR         api_add_char;
159     tBTA_GATTS_API_ADD_DESCR        api_add_char_descr;
160     tBTA_GATTS_API_START            api_start;
161     tBTA_GATTS_API_INDICATION       api_indicate;
162     tBTA_GATTS_API_RSP              api_rsp;
163     tBTA_GATTS_API_OPEN             api_open;
164     tBTA_GATTS_API_CANCEL_OPEN      api_cancel_open;
165 
166     tBTA_GATTS_INT_START_IF         int_start_if;
167 } tBTA_GATTS_DATA;
168 
169 /* application registration control block */
170 typedef struct
171 {
172     BOOLEAN             in_use;
173     tBT_UUID            app_uuid;
174     tBTA_GATTS_CBACK    *p_cback;
175     tBTA_GATTS_IF        gatt_if;  //todo cahneg to server_if
176 }tBTA_GATTS_RCB;
177 
178 /* service registration control block */
179 typedef struct
180 {
181     tBT_UUID    service_uuid;   /* service UUID */
182     UINT16      service_id;     /* service handle */
183     UINT8       inst_num;       /* instance ID */
184     UINT8       rcb_idx;
185     UINT8       idx;            /* self index of serviec CB */
186     BOOLEAN     in_use;
187 
188 }tBTA_GATTS_SRVC_CB;
189 
190 
191 /* GATT server control block */
192 typedef struct
193 {
194     BOOLEAN             enabled;
195     tBTA_GATTS_RCB      rcb[BTA_GATTS_MAX_APP_NUM];
196     tBTA_GATTS_SRVC_CB  srvc_cb[BTA_GATTS_MAX_SRVC_NUM];
197 }tBTA_GATTS_CB;
198 
199 
200 
201 /*****************************************************************************
202 **  Global data
203 *****************************************************************************/
204 
205 /* GATTC control block */
206 #if BTA_DYNAMIC_MEMORY == FALSE
207 extern tBTA_GATTS_CB  bta_gatts_cb;
208 #else
209 extern tBTA_GATTS_CB *bta_gatts_cb_ptr;
210     #define bta_gatts_cb (*bta_gatts_cb_ptr)
211 #endif
212 
213 /*****************************************************************************
214 **  Function prototypes
215 *****************************************************************************/
216 extern BOOLEAN bta_gatts_hdl_event(BT_HDR *p_msg);
217 
218 extern void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
219 extern void bta_gatts_start_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
220 extern void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
221 extern void bta_gatts_create_srvc(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
222 extern void bta_gatts_add_include_srvc(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
223 extern void bta_gatts_add_char(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
224 extern void bta_gatts_add_char_descr(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
225 extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
226 extern void bta_gatts_start_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
227 extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
228 
229 extern void bta_gatts_send_rsp(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
230 extern void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
231 
232 
233 extern void bta_gatts_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
234 extern void bta_gatts_cancel_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
235 extern void bta_gatts_close (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
236 
237 extern BOOLEAN bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src);
238 extern tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if);
239 extern UINT8 bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if);
240 extern UINT8 bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, UINT8 rcb_idx);
241 extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, UINT16 service_id);
242 extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, UINT16 attr_id);
243 
244 
245 #endif /* BTA_GATTS_INT_H */
246 
247