OSDN Git Service

am 1d0c7e05: am 6e5236ee: am 5c8f84a1: am 3a18bccc: (-s ours) am 431cd416: (-s ours...
[android-x86/hardware-libhardware.git] / include / hardware / bt_gatt_server.h
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 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 */