| /****************************************************************************** |
| * |
| * Copyright (C) 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 "bt_target.h" |
| #include "bta_sys.h" |
| #include "bta_gatt_api.h" |
| #include "gatt_api.h" |
| |
| #include "gki.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_CREATE_SRVC_EVT, |
| BTA_GATTS_API_INDICATION_EVT, |
| |
| BTA_GATTS_API_ADD_INCL_SRVC_EVT, |
| BTA_GATTS_API_ADD_CHAR_EVT, |
| BTA_GATTS_API_ADD_DESCR_EVT, |
| BTA_GATTS_API_DEL_SRVC_EVT, |
| BTA_GATTS_API_START_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_LISTEN_EVT |
| |
| }; |
| typedef UINT16 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 hdr; |
| tBT_UUID app_uuid; |
| tBTA_GATTS_CBACK *p_cback; |
| }tBTA_GATTS_API_REG; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| tBTA_GATTS_IF server_if; |
| }tBTA_GATTS_INT_START_IF; |
| |
| typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| tBTA_GATTS_IF server_if; |
| tBT_UUID service_uuid; |
| UINT16 num_handle; |
| UINT8 inst; |
| BOOLEAN is_pri; |
| |
| } tBTA_GATTS_API_CREATE_SRVC; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| tBT_UUID char_uuid; |
| tBTA_GATT_PERM perm; |
| tBTA_GATT_CHAR_PROP property; |
| |
| }tBTA_GATTS_API_ADD_CHAR; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| UINT16 included_service_id; |
| |
| }tBTA_GATTS_API_ADD_INCL_SRVC; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| tBT_UUID descr_uuid; |
| tBTA_GATT_PERM perm; |
| }tBTA_GATTS_API_ADD_DESCR; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| UINT16 attr_id; |
| UINT16 len; |
| BOOLEAN need_confirm; |
| UINT8 value[BTA_GATT_MAX_ATTR_LEN]; |
| }tBTA_GATTS_API_INDICATION; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| UINT32 trans_id; |
| tBTA_GATT_STATUS status; |
| tBTA_GATTS_RSP *p_rsp; |
| }tBTA_GATTS_API_RSP; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| tBTA_GATT_TRANSPORT transport; |
| }tBTA_GATTS_API_START; |
| |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| BD_ADDR remote_bda; |
| tBTA_GATTS_IF server_if; |
| BOOLEAN is_direct; |
| }tBTA_GATTS_API_OPEN; |
| |
| typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN; |
| |
| typedef struct |
| { |
| BT_HDR hdr; |
| BD_ADDR_PTR remote_bda; |
| tBTA_GATTS_IF server_if; |
| BOOLEAN start; |
| } tBTA_GATTS_API_LISTEN; |
| |
| typedef union |
| { |
| BT_HDR hdr; |
| tBTA_GATTS_API_REG api_reg; |
| tBTA_GATTS_API_DEREG api_dereg; |
| tBTA_GATTS_API_CREATE_SRVC api_create_svc; |
| tBTA_GATTS_API_ADD_INCL_SRVC api_add_incl_srvc; |
| tBTA_GATTS_API_ADD_CHAR api_add_char; |
| tBTA_GATTS_API_ADD_DESCR api_add_char_descr; |
| tBTA_GATTS_API_START api_start; |
| 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; |
| /* if peripheral role is supported */ |
| tBTA_GATTS_API_LISTEN api_listen; |
| } tBTA_GATTS_DATA; |
| |
| /* application registration control block */ |
| typedef struct |
| { |
| BOOLEAN in_use; |
| tBT_UUID app_uuid; |
| tBTA_GATTS_CBACK *p_cback; |
| tBTA_GATTS_IF gatt_if; |
| }tBTA_GATTS_RCB; |
| |
| /* service registration control block */ |
| typedef struct |
| { |
| tBT_UUID service_uuid; /* service UUID */ |
| UINT16 service_id; /* service handle */ |
| UINT8 inst_num; /* instance ID */ |
| UINT8 rcb_idx; |
| UINT8 idx; /* self index of serviec CB */ |
| BOOLEAN in_use; |
| |
| }tBTA_GATTS_SRVC_CB; |
| |
| |
| /* GATT server control block */ |
| typedef struct |
| { |
| BOOLEAN 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 */ |
| #if BTA_DYNAMIC_MEMORY == FALSE |
| extern tBTA_GATTS_CB bta_gatts_cb; |
| #else |
| extern tBTA_GATTS_CB *bta_gatts_cb_ptr; |
| #define bta_gatts_cb (*bta_gatts_cb_ptr) |
| #endif |
| |
| /***************************************************************************** |
| ** Function prototypes |
| *****************************************************************************/ |
| extern BOOLEAN bta_gatts_hdl_event(BT_HDR *p_msg); |
| |
| 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_create_srvc(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); |
| extern void bta_gatts_add_include_srvc(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); |
| extern void bta_gatts_add_char(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg); |
| extern void bta_gatts_add_char_descr(tBTA_GATTS_SRVC_CB *p_srvc_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_start_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 void bta_gatts_listen(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg); |
| |
| extern BOOLEAN bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src); |
| extern tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if); |
| extern UINT8 bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if); |
| extern UINT8 bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, UINT8 rcb_idx); |
| extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, UINT16 service_id); |
| extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, UINT16 attr_id); |
| |
| |
| #endif /* BTA_GATTS_INT_H */ |
| |