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 32#include "gki.h" 33 34/***************************************************************************** 35** Constants and data types 36*****************************************************************************/ 37enum 38{ 39 BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS), 40 BTA_GATTS_INT_START_IF_EVT, 41 BTA_GATTS_API_DEREG_EVT, 42 BTA_GATTS_API_CREATE_SRVC_EVT, 43 BTA_GATTS_API_INDICATION_EVT, 44 45 BTA_GATTS_API_ADD_INCL_SRVC_EVT, 46 BTA_GATTS_API_ADD_CHAR_EVT, 47 BTA_GATTS_API_ADD_DESCR_EVT, 48 BTA_GATTS_API_DEL_SRVC_EVT, 49 BTA_GATTS_API_START_SRVC_EVT, 50 BTA_GATTS_API_STOP_SRVC_EVT, 51 BTA_GATTS_API_RSP_EVT, 52 BTA_GATTS_API_OPEN_EVT, 53 BTA_GATTS_API_CANCEL_OPEN_EVT, 54 BTA_GATTS_API_CLOSE_EVT, 55 BTA_GATTS_API_LISTEN_EVT, 56 BTA_GATTS_API_DISABLE_EVT 57}; 58typedef 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 */ 67typedef struct 68{ 69 BT_HDR hdr; 70 tBT_UUID app_uuid; 71 tBTA_GATTS_CBACK *p_cback; 72}tBTA_GATTS_API_REG; 73 74typedef struct 75{ 76 BT_HDR hdr; 77 tBTA_GATTS_IF server_if; 78}tBTA_GATTS_INT_START_IF; 79 80typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG; 81 82typedef 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 93typedef 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 102typedef struct 103{ 104 BT_HDR hdr; 105 UINT16 included_service_id; 106 107}tBTA_GATTS_API_ADD_INCL_SRVC; 108 109typedef struct 110{ 111 BT_HDR hdr; 112 tBT_UUID descr_uuid; 113 tBTA_GATT_PERM perm; 114}tBTA_GATTS_API_ADD_DESCR; 115 116typedef struct 117{ 118 BT_HDR hdr; 119 UINT16 attr_id; 120 UINT16 len; 121 BOOLEAN need_confirm; 122 UINT8 value[BTA_GATT_MAX_ATTR_LEN]; 123}tBTA_GATTS_API_INDICATION; 124 125typedef struct 126{ 127 BT_HDR hdr; 128 UINT32 trans_id; 129 tBTA_GATT_STATUS status; 130 tBTA_GATTS_RSP *p_rsp; 131}tBTA_GATTS_API_RSP; 132 133typedef struct 134{ 135 BT_HDR hdr; 136 tBTA_GATT_TRANSPORT transport; 137}tBTA_GATTS_API_START; 138 139 140typedef struct 141{ 142 BT_HDR hdr; 143 BD_ADDR remote_bda; 144 tBTA_GATTS_IF server_if; 145 BOOLEAN is_direct; 146 tBTA_GATT_TRANSPORT transport; 147 148}tBTA_GATTS_API_OPEN; 149 150typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN; 151 152typedef struct 153{ 154 BT_HDR hdr; 155 BD_ADDR_PTR remote_bda; 156 tBTA_GATTS_IF server_if; 157 BOOLEAN start; 158} tBTA_GATTS_API_LISTEN; 159 160typedef union 161{ 162 BT_HDR hdr; 163 tBTA_GATTS_API_REG api_reg; 164 tBTA_GATTS_API_DEREG api_dereg; 165 tBTA_GATTS_API_CREATE_SRVC api_create_svc; 166 tBTA_GATTS_API_ADD_INCL_SRVC api_add_incl_srvc; 167 tBTA_GATTS_API_ADD_CHAR api_add_char; 168 tBTA_GATTS_API_ADD_DESCR api_add_char_descr; 169 tBTA_GATTS_API_START api_start; 170 tBTA_GATTS_API_INDICATION api_indicate; 171 tBTA_GATTS_API_RSP api_rsp; 172 tBTA_GATTS_API_OPEN api_open; 173 tBTA_GATTS_API_CANCEL_OPEN api_cancel_open; 174 175 tBTA_GATTS_INT_START_IF int_start_if; 176 /* if peripheral role is supported */ 177 tBTA_GATTS_API_LISTEN api_listen; 178} tBTA_GATTS_DATA; 179 180/* application registration control block */ 181typedef struct 182{ 183 BOOLEAN in_use; 184 tBT_UUID app_uuid; 185 tBTA_GATTS_CBACK *p_cback; 186 tBTA_GATTS_IF gatt_if; 187}tBTA_GATTS_RCB; 188 189/* service registration control block */ 190typedef struct 191{ 192 tBT_UUID service_uuid; /* service UUID */ 193 UINT16 service_id; /* service handle */ 194 UINT8 inst_num; /* instance ID */ 195 UINT8 rcb_idx; 196 UINT8 idx; /* self index of serviec CB */ 197 BOOLEAN in_use; 198 199}tBTA_GATTS_SRVC_CB; 200 201 202/* GATT server control block */ 203typedef struct 204{ 205 BOOLEAN enabled; 206 tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM]; 207 tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM]; 208}tBTA_GATTS_CB; 209 210 211 212/***************************************************************************** 213** Global data 214*****************************************************************************/ 215 216/* GATTC control block */ 217#if BTA_DYNAMIC_MEMORY == FALSE 218extern tBTA_GATTS_CB bta_gatts_cb; 219#else 220extern tBTA_GATTS_CB *bta_gatts_cb_ptr; 221 #define bta_gatts_cb (*bta_gatts_cb_ptr) 222#endif 223 224/***************************************************************************** 225** Function prototypes 226*****************************************************************************/ 227extern BOOLEAN bta_gatts_hdl_event(BT_HDR *p_msg); 228 229extern void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb); 230extern void bta_gatts_api_enable(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_data); 231extern void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); 232extern void bta_gatts_start_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); 233extern void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg); 234extern void bta_gatts_create_srvc(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 235extern void bta_gatts_add_include_srvc(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 236extern void bta_gatts_add_char(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 237extern void bta_gatts_add_char_descr(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 238extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 239extern void bta_gatts_start_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 240extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); 241 242extern void bta_gatts_send_rsp(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 243extern void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 244 245 246extern void bta_gatts_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 247extern void bta_gatts_cancel_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 248extern void bta_gatts_close (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 249extern void bta_gatts_listen(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); 250 251extern BOOLEAN bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src); 252extern tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if); 253extern UINT8 bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if); 254extern UINT8 bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, UINT8 rcb_idx); 255extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, UINT16 service_id); 256extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, UINT16 attr_id); 257 258 259#endif /* BTA_GATTS_INT_H */ 260 261