blob: 32f8ef69322b18a1e0057bd0995150f7a5d3764f [file] [log] [blame]
Ganesh Ganapathi Battafefb3342013-02-05 15:23:45 -08001/*
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 */
28typedef 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 */
38typedef 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 */
47typedef 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 */
Andre Eisenbach33317182013-04-10 11:18:03 -070051typedef void (*connection_callback)(int conn_id, int server_if, int connected,
Ganesh Ganapathi Battafefb3342013-02-05 15:23:45 -080052 bt_bdaddr_t *bda);
53
54/** Callback invoked in response to create_service */
55typedef 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 */
59typedef 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 */
63typedef 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 */
67typedef 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 */
71typedef void (*service_started_callback)(int status, int server_if,
72 int srvc_handle);
73
74/** Callback invoked in response to stop_service */
75typedef void (*service_stopped_callback)(int status, int server_if,
76 int srvc_handle);
77
78/** Callback triggered when a service has been deleted */
79typedef 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 */
86typedef 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 */
93typedef 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 */
98typedef 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 */
105typedef void (*response_confirmation_callback)(int status, int handle);
106
107typedef 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. */
124typedef 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 */
Ganesh Ganapathi Battaf9f4d102014-04-18 10:02:49 -0700132 bt_status_t (*connect)(int server_if, const bt_bdaddr_t *bd_addr,
133 bool is_direct, int transport);
Ganesh Ganapathi Battafefb3342013-02-05 15:23:45 -0800134
135 /** Disconnect an established connection or cancel a pending one */
136 bt_status_t (*disconnect)(int server_if, const bt_bdaddr_t *bd_addr,
137 int conn_id );
138
139 /** Create a new service */
140 bt_status_t (*add_service)( int server_if, btgatt_srvc_id_t *srvc_id, int num_handles);
141
142 /** Assign an included service to it's parent service */
143 bt_status_t (*add_included_service)( int server_if, int service_handle, int included_handle);
144
145 /** Add a characteristic to a service */
146 bt_status_t (*add_characteristic)( int server_if,
147 int service_handle, bt_uuid_t *uuid,
148 int properties, int permissions);
149
150 /** Add a descriptor to a given service */
151 bt_status_t (*add_descriptor)(int server_if, int service_handle,
152 bt_uuid_t *uuid, int permissions);
153
154 /** Starts a local service */
155 bt_status_t (*start_service)(int server_if, int service_handle,
156 int transport);
157
158 /** Stops a local service */
159 bt_status_t (*stop_service)(int server_if, int service_handle);
160
161 /** Delete a local service */
162 bt_status_t (*delete_service)(int server_if, int service_handle);
163
164 /** Send value indication to a remote device */
165 bt_status_t (*send_indication)(int server_if, int attribute_handle,
166 int conn_id, int len, int confirm,
167 char* p_value);
168
169 /** Send a response to a read/write operation */
170 bt_status_t (*send_response)(int conn_id, int trans_id,
171 int status, btgatt_response_t *response);
Ganesh Ganapathi Battaf9f4d102014-04-18 10:02:49 -0700172
Ganesh Ganapathi Battafefb3342013-02-05 15:23:45 -0800173} btgatt_server_interface_t;
174
175__END_DECLS
176
177#endif /* ANDROID_INCLUDE_BT_GATT_CLIENT_H */