1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 #ifndef ANDROID_INCLUDE_BT_GATT_SERVER_H 19 #define ANDROID_INCLUDE_BT_GATT_SERVER_H 20 21 #include <stdint.h> 22 23 #include "bt_gatt_types.h" 24 25 __BEGIN_DECLS 26 27 /** GATT value type used in response to remote read requests */ 28 typedef struct 29 { 30 uint8_t value[BTGATT_MAX_ATTR_LEN]; 31 uint16_t handle; 32 uint16_t offset; 33 uint16_t len; 34 uint8_t auth_req; 35 } btgatt_value_t; 36 37 /** GATT remote read request response type */ 38 typedef union 39 { 40 btgatt_value_t attr_value; 41 uint16_t handle; 42 } btgatt_response_t; 43 44 /** BT-GATT Server callback structure. */ 45 46 /** Callback invoked in response to register_server */ 47 typedef void (*register_server_callback)(int status, int server_if, 48 bt_uuid_t *app_uuid); 49 50 /** Callback indicating that a remote device has connected or been disconnected */ 51 typedef void (*connection_callback)(int conn_id, int server_if, int connected, 52 bt_bdaddr_t *bda); 53 54 /** Callback invoked in response to create_service */ 55 typedef void (*service_added_callback)(int status, int server_if, 56 btgatt_srvc_id_t *srvc_id, int srvc_handle); 57 58 /** Callback indicating that an included service has been added to a service */ 59 typedef void (*included_service_added_callback)(int status, int server_if, 60 int srvc_handle, int incl_srvc_handle); 61 62 /** Callback invoked when a characteristic has been added to a service */ 63 typedef void (*characteristic_added_callback)(int status, int server_if, 64 bt_uuid_t *uuid, int srvc_handle, int char_handle); 65 66 /** Callback invoked when a descriptor has been added to a characteristic */ 67 typedef void (*descriptor_added_callback)(int status, int server_if, 68 bt_uuid_t *uuid, int srvc_handle, int descr_handle); 69 70 /** Callback invoked in response to start_service */ 71 typedef void (*service_started_callback)(int status, int server_if, 72 int srvc_handle); 73 74 /** Callback invoked in response to stop_service */ 75 typedef void (*service_stopped_callback)(int status, int server_if, 76 int srvc_handle); 77 78 /** Callback triggered when a service has been deleted */ 79 typedef void (*service_deleted_callback)(int status, int server_if, 80 int srvc_handle); 81 82 /** 83 * Callback invoked when a remote device has requested to read a characteristic 84 * or descriptor. The application must respond by calling send_response 85 */ 86 typedef void (*request_read_callback)(int conn_id, int trans_id, bt_bdaddr_t *bda, 87 int attr_handle, int offset, bool is_long); 88 89 /** 90 * Callback invoked when a remote device has requested to write to a 91 * characteristic or descriptor. 92 */ 93 typedef void (*request_write_callback)(int conn_id, int trans_id, bt_bdaddr_t *bda, 94 int attr_handle, int offset, int length, 95 bool need_rsp, bool is_prep, uint8_t* value); 96 97 /** Callback invoked when a previously prepared write is to be executed */ 98 typedef void (*request_exec_write_callback)(int conn_id, int trans_id, 99 bt_bdaddr_t *bda, int exec_write); 100 101 /** 102 * Callback triggered in response to send_response if the remote device 103 * sends a confirmation. 104 */ 105 typedef void (*response_confirmation_callback)(int status, int handle); 106 107 typedef struct { 108 register_server_callback register_server_cb; 109 connection_callback connection_cb; 110 service_added_callback service_added_cb; 111 included_service_added_callback included_service_added_cb; 112 characteristic_added_callback characteristic_added_cb; 113 descriptor_added_callback descriptor_added_cb; 114 service_started_callback service_started_cb; 115 service_stopped_callback service_stopped_cb; 116 service_deleted_callback service_deleted_cb; 117 request_read_callback request_read_cb; 118 request_write_callback request_write_cb; 119 request_exec_write_callback request_exec_write_cb; 120 response_confirmation_callback response_confirmation_cb; 121 } btgatt_server_callbacks_t; 122 123 /** Represents the standard BT-GATT server interface. */ 124 typedef struct { 125 /** Registers a GATT server application with the stack */ 126 bt_status_t (*register_server)( bt_uuid_t *uuid ); 127 128 /** Unregister a server application from the stack */ 129 bt_status_t (*unregister_server)(int server_if ); 130 131 /** Create a connection to a remote peripheral */ 132 bt_status_t (*connect)(int server_if, const bt_bdaddr_t *bd_addr, bool is_direct ); 133 134 /** Disconnect an established connection or cancel a pending one */ 135 bt_status_t (*disconnect)(int server_if, const bt_bdaddr_t *bd_addr, 136 int conn_id ); 137 138 /** Create a new service */ 139 bt_status_t (*add_service)( int server_if, btgatt_srvc_id_t *srvc_id, int num_handles); 140 141 /** Assign an included service to it's parent service */ 142 bt_status_t (*add_included_service)( int server_if, int service_handle, int included_handle); 143 144 /** Add a characteristic to a service */ 145 bt_status_t (*add_characteristic)( int server_if, 146 int service_handle, bt_uuid_t *uuid, 147 int properties, int permissions); 148 149 /** Add a descriptor to a given service */ 150 bt_status_t (*add_descriptor)(int server_if, int service_handle, 151 bt_uuid_t *uuid, int permissions); 152 153 /** Starts a local service */ 154 bt_status_t (*start_service)(int server_if, int service_handle, 155 int transport); 156 157 /** Stops a local service */ 158 bt_status_t (*stop_service)(int server_if, int service_handle); 159 160 /** Delete a local service */ 161 bt_status_t (*delete_service)(int server_if, int service_handle); 162 163 /** Send value indication to a remote device */ 164 bt_status_t (*send_indication)(int server_if, int attribute_handle, 165 int conn_id, int len, int confirm, 166 char* p_value); 167 168 /** Send a response to a read/write operation */ 169 bt_status_t (*send_response)(int conn_id, int trans_id, 170 int status, btgatt_response_t *response); 171 } btgatt_server_interface_t; 172 173 __END_DECLS 174 175 #endif /* ANDROID_INCLUDE_BT_GATT_CLIENT_H */ 176