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_gatt_api.h" 29 #include "bta_sys.h" 30 #include "gatt_api.h" 31 32 #include "bt_common.h" 33 34 /***************************************************************************** 35 * Constants and data types 36 ****************************************************************************/ 37 enum { 38 BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS), 39 BTA_GATTS_INT_START_IF_EVT, 40 BTA_GATTS_API_DEREG_EVT, 41 BTA_GATTS_API_INDICATION_EVT, 42 43 BTA_GATTS_API_DEL_SRVC_EVT, 44 BTA_GATTS_API_STOP_SRVC_EVT, 45 BTA_GATTS_API_RSP_EVT, 46 BTA_GATTS_API_OPEN_EVT, 47 BTA_GATTS_API_CANCEL_OPEN_EVT, 48 BTA_GATTS_API_CLOSE_EVT, 49 BTA_GATTS_API_DISABLE_EVT 50 }; 51 typedef uint16_t tBTA_GATTS_INT_EVT; 52 53 /* max number of application allowed on device */ 54 #define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES 55 56 /* max number of services allowed in the device */ 57 #define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES 58 59 /* internal strucutre for GATTC register API */ 60 typedef struct { 61 BT_HDR hdr; 62 tBT_UUID app_uuid; 63 tBTA_GATTS_CBACK* p_cback; 64 } tBTA_GATTS_API_REG; 65 66 typedef struct { 67 BT_HDR hdr; 68 tBTA_GATTS_IF server_if; 69 } tBTA_GATTS_INT_START_IF; 70 71 typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG; 72 73 typedef struct { 74 BT_HDR hdr; 75 tBTA_GATTS_IF server_if; 76 btgatt_db_element_t* service; 77 uint16_t count; 78 } tBTA_GATTS_API_ADD_SERVICE; 79 80 typedef struct { 81 BT_HDR hdr; 82 uint16_t attr_id; 83 uint16_t len; 84 bool need_confirm; 85 uint8_t value[BTA_GATT_MAX_ATTR_LEN]; 86 } tBTA_GATTS_API_INDICATION; 87 88 typedef struct { 89 BT_HDR hdr; 90 uint32_t trans_id; 91 tBTA_GATT_STATUS status; 92 tBTA_GATTS_RSP* p_rsp; 93 } tBTA_GATTS_API_RSP; 94 95 typedef struct { 96 BT_HDR hdr; 97 tBTA_GATT_TRANSPORT transport; 98 } tBTA_GATTS_API_START; 99 100 typedef struct { 101 BT_HDR hdr; 102 BD_ADDR remote_bda; 103 tBTA_GATTS_IF server_if; 104 bool is_direct; 105 tBTA_GATT_TRANSPORT transport; 106 107 } tBTA_GATTS_API_OPEN; 108 109 typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN; 110 111 typedef union { 112 BT_HDR hdr; 113 tBTA_GATTS_API_REG api_reg; 114 tBTA_GATTS_API_DEREG api_dereg; 115 tBTA_GATTS_API_ADD_SERVICE api_add_service; 116 tBTA_GATTS_API_INDICATION api_indicate; 117 tBTA_GATTS_API_RSP api_rsp; 118 tBTA_GATTS_API_OPEN api_open; 119 tBTA_GATTS_API_CANCEL_OPEN api_cancel_open; 120 121 tBTA_GATTS_INT_START_IF int_start_if; 122 } tBTA_GATTS_DATA; 123 124 /* application registration control block */ 125 typedef struct { 126 bool in_use; 127 tBT_UUID app_uuid; 128 tBTA_GATTS_CBACK* p_cback; 129 tBTA_GATTS_IF gatt_if; 130 } tBTA_GATTS_RCB; 131 132 /* service registration control block */ 133 typedef struct { 134 tBT_UUID service_uuid; /* service UUID */ 135 uint16_t service_id; /* service start handle */ 136 uint8_t rcb_idx; 137 uint8_t idx; /* self index of serviec CB */ 138 bool in_use; 139 } tBTA_GATTS_SRVC_CB; 140 141 /* GATT server control block */ 142 typedef struct { 143 bool enabled; 144 tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM]; 145 tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM]; 146 } tBTA_GATTS_CB; 147 148 /***************************************************************************** 149 * Global data 150 ****************************************************************************/ 151 152 /* GATTC control block */ 153 extern tBTA_GATTS_CB bta_gatts_cb; 154 155 /***************************************************************************** 156 * Function prototypes 157 ****************************************************************************/ 158 extern bool bta_gatts_hdl_event(BT_HDR* p_msg); 159 160 extern void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb); 161 extern void bta_gatts_api_enable(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_data); 162 extern void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 163 extern void bta_gatts_start_if(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 164 extern void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 165 extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, 166 tBTA_GATTS_DATA* p_msg); 167 extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, 168 tBTA_GATTS_DATA* p_msg); 169 170 extern void bta_gatts_send_rsp(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 171 extern void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb, 172 tBTA_GATTS_DATA* p_msg); 173 174 extern void bta_gatts_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 175 extern void bta_gatts_cancel_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 176 extern void bta_gatts_close(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 177 178 extern bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src); 179 extern tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if( 180 tBTA_GATTS_IF server_if); 181 extern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb, 182 tBTA_GATTS_IF server_if); 183 extern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx); 184 extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id( 185 tBTA_GATTS_CB* p_cb, uint16_t service_id); 186 extern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id( 187 tBTA_GATTS_CB* p_cb, uint16_t attr_id); 188 189 #endif /* BTA_GATTS_INT_H */ 190