15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2003-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This is the private file for the BTA GATT server. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_GATTS_INT_H 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_GATTS_INT_H 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h" 29cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gatt_api.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 32258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Constants and data types 368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 37cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum { 38cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS), 39cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_INT_START_IF_EVT, 40cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_DEREG_EVT, 41cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_INDICATION_EVT, 42cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 43cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_DEL_SRVC_EVT, 44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_STOP_SRVC_EVT, 45cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_RSP_EVT, 46cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_OPEN_EVT, 47cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_CANCEL_OPEN_EVT, 48cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_CLOSE_EVT, 49cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTS_API_DISABLE_EVT 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 51e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint16_t tBTA_GATTS_INT_EVT; 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max number of application allowed on device */ 54cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max number of services allowed in the device */ 57cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* internal strucutre for GATTC register API */ 60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBT_UUID app_uuid; 63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_CBACK* p_cback; 64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_REG; 65cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 67cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 68cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF server_if; 69cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_INT_START_IF; 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG; 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 73cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 74cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 75cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF server_if; 76cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson btgatt_db_element_t* service; 77cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t count; 78a641b6fa2a25e1b5382945d13c4fa49d36084a78Jakub Pawlowski} tBTA_GATTS_API_ADD_SERVICE; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 80cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 81cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 82cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t attr_id; 83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t len; 84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool need_confirm; 85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t value[BTA_GATT_MAX_ATTR_LEN]; 86cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_INDICATION; 87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 89cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 90cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint32_t trans_id; 91cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_STATUS status; 92cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_RSP* p_rsp; 93cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_RSP; 94cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 95cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 96cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 97cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_TRANSPORT transport; 98cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_START; 99cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 101cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 1029e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski RawAddress remote_bda; 103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF server_if; 104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool is_direct; 105cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_TRANSPORT transport; 106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_OPEN; 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN; 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef union { 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_REG api_reg; 114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_DEREG api_dereg; 115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_ADD_SERVICE api_add_service; 116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_INDICATION api_indicate; 117cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_RSP api_rsp; 118cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_OPEN api_open; 119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_API_CANCEL_OPEN api_cancel_open; 120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_INT_START_IF int_start_if; 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTS_DATA; 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* application registration control block */ 125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBT_UUID app_uuid; 128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_CBACK* p_cback; 129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF gatt_if; 130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_RCB; 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* service registration control block */ 133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBT_UUID service_uuid; /* service UUID */ 135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t service_id; /* service start handle */ 136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t rcb_idx; 137cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t idx; /* self index of serviec CB */ 138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_SRVC_CB; 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATT server control block */ 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool enabled; 144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM]; 145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM]; 146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_CB; 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Global data 1508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATTC control block */ 153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_CB bta_gatts_cb; 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function prototypes 1578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 158cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gatts_hdl_event(BT_HDR* p_msg); 159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb); 161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_api_enable(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_data); 162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_start_if(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 164cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, 166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_DATA* p_msg); 167cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb, 168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_DATA* p_msg); 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_send_rsp(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb, 172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_DATA* p_msg); 173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_cancel_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_close(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg); 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 178e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenextern bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src); 179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if( 180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF server_if); 181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb, 182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_IF server_if); 183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx); 184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id( 185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_CB* p_cb, uint16_t service_id); 186cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id( 187cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTS_CB* p_cb, uint16_t attr_id); 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATTS_INT_H */ 190