Upgrade bluez5_37 :Merge the code from private
[platform/upstream/bluez.git] / src / adapter.h
1 /*
2  *
3  *  BlueZ - Bluetooth protocol stack for Linux
4  *
5  *  Copyright (C) 2006-2010  Nokia Corporation
6  *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
7  *
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or
12  *  (at your option) any later version.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22  *
23  */
24
25 #include <stdbool.h>
26 #include <dbus/dbus.h>
27 #include <glib.h>
28 #ifdef __TIZEN_PATCH__
29 #include <bluetooth/bluetooth.h>
30 #include <bluetooth/sdp.h>
31 #include <bluetooth/hci.h>
32 #include <bluetooth/hci_lib.h>
33 #endif
34
35 #define MAX_NAME_LENGTH         248
36
37 /* Invalid SSP passkey value used to indicate negative replies */
38 #define INVALID_PASSKEY         0xffffffff
39
40 #ifdef __TIZEN_PATCH__
41 #define BT_DISC_TYPE_DEFAULT    0
42 #define BT_DISC_TYPE_BREDR_ONLY 1
43 #define BT_DISC_TYPE_LE_ONLY    2
44 #define BT_DISC_TYPE_LE_BREDR   3
45 #endif
46
47 struct btd_adapter;
48 struct btd_device;
49
50 struct btd_adapter *btd_adapter_get_default(void);
51 bool btd_adapter_is_default(struct btd_adapter *adapter);
52 uint16_t btd_adapter_get_index(struct btd_adapter *adapter);
53
54 typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
55
56 typedef void (*oob_read_local_cb_t) (struct btd_adapter *adapter,
57                                         const uint8_t *hash,
58                                         const uint8_t *randomizer,
59                                         void *user_data);
60 typedef void (*oob_bonding_cb_t) (struct btd_adapter *adapter,
61                                         const bdaddr_t *bdaddr, uint8_t status,
62                                         void *user_data);
63
64 struct oob_handler {
65         oob_read_local_cb_t read_local_cb;
66         oob_bonding_cb_t bonding_cb;
67         bdaddr_t remote_addr;
68         void *user_data;
69 };
70
71 #ifdef __TIZEN_PATCH__
72 #ifdef TIZEN_WEARABLE
73 typedef enum {
74         NONE_CHARGING,
75         WIRE_CHARGING,
76         WIRELESS_CHARGING,
77 } charging_state_e;
78 #endif  /* TIZEN_WEARABLE */
79 #endif
80
81 int adapter_init(void);
82 void adapter_cleanup(void);
83 void adapter_shutdown(void);
84
85 typedef void (*btd_disconnect_cb) (struct btd_device *device, uint8_t reason);
86 void btd_add_disconnect_cb(btd_disconnect_cb func);
87 void btd_remove_disconnect_cb(btd_disconnect_cb func);
88
89 typedef void (*btd_conn_fail_cb) (struct btd_device *device, uint8_t status);
90 void btd_add_conn_fail_cb(btd_conn_fail_cb func);
91 void btd_remove_conn_fail_cb(btd_conn_fail_cb func);
92
93 struct btd_adapter *adapter_find(const bdaddr_t *sba);
94 struct btd_adapter *adapter_find_by_id(int id);
95 void adapter_foreach(adapter_cb func, gpointer user_data);
96
97 bool btd_adapter_get_pairable(struct btd_adapter *adapter);
98 bool btd_adapter_get_powered(struct btd_adapter *adapter);
99 bool btd_adapter_get_connectable(struct btd_adapter *adapter);
100
101 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter);
102
103 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
104 const char *btd_adapter_get_name(struct btd_adapter *adapter);
105 void btd_adapter_remove_device(struct btd_adapter *adapter,
106                                 struct btd_device *dev);
107 struct btd_device *btd_adapter_get_device(struct btd_adapter *adapter,
108                                         const bdaddr_t *addr,
109                                         uint8_t addr_type);
110 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
111
112 struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
113                                                         const bdaddr_t *dst,
114                                                         uint8_t dst_type);
115
116 const char *adapter_get_path(struct btd_adapter *adapter);
117 const bdaddr_t *btd_adapter_get_address(struct btd_adapter *adapter);
118 int adapter_set_name(struct btd_adapter *adapter, const char *name);
119
120 int adapter_service_add(struct btd_adapter *adapter, sdp_record_t *rec);
121 void adapter_service_remove(struct btd_adapter *adapter, uint32_t handle);
122
123 struct agent *adapter_get_agent(struct btd_adapter *adapter);
124
125 struct btd_adapter *btd_adapter_ref(struct btd_adapter *adapter);
126 void btd_adapter_unref(struct btd_adapter *adapter);
127
128 void btd_adapter_set_class(struct btd_adapter *adapter, uint8_t major,
129                                                         uint8_t minor);
130
131 struct btd_adapter_driver {
132         const char *name;
133         int (*probe) (struct btd_adapter *adapter);
134         void (*remove) (struct btd_adapter *adapter);
135 };
136
137 typedef void (*service_auth_cb) (DBusError *derr, void *user_data);
138
139 void adapter_add_profile(struct btd_adapter *adapter, gpointer p);
140 void adapter_remove_profile(struct btd_adapter *adapter, gpointer p);
141 int btd_register_adapter_driver(struct btd_adapter_driver *driver);
142 void btd_unregister_adapter_driver(struct btd_adapter_driver *driver);
143 guint btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst,
144                 const char *uuid, service_auth_cb cb, void *user_data);
145 int btd_cancel_authorization(guint id);
146
147 int btd_adapter_restore_powered(struct btd_adapter *adapter);
148
149 typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
150                         struct btd_device *dev, char *out, bool *display,
151                                                         unsigned int attempt);
152 void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
153                                                 btd_adapter_pin_cb_t cb);
154 void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
155                                                 btd_adapter_pin_cb_t cb);
156
157 struct btd_adapter_pin_cb_iter *btd_adapter_pin_cb_iter_new(
158                                                 struct btd_adapter *adapter);
159 void btd_adapter_pin_cb_iter_free(struct btd_adapter_pin_cb_iter *iter);
160 bool btd_adapter_pin_cb_iter_end(struct btd_adapter_pin_cb_iter *iter);
161
162 typedef void (*btd_msd_cb_t) (struct btd_adapter *adapter,
163                                                         struct btd_device *dev,
164                                                         uint16_t company,
165                                                         const uint8_t *data,
166                                                         uint8_t data_len);
167 void btd_adapter_register_msd_cb(struct btd_adapter *adapter,
168                                                         btd_msd_cb_t cb);
169 void btd_adapter_unregister_msd_cb(struct btd_adapter *adapter,
170                                                         btd_msd_cb_t cb);
171
172 /* If TRUE, enables fast connectabe, i.e. reduces page scan interval and changes
173  * type. If FALSE, disables fast connectable, i.e. sets page scan interval and
174  * type to default values. Valid for both connectable and discoverable modes. */
175 int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
176                                                         gboolean enable);
177
178 int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
179                                 int which, int timeout, uint32_t *clock,
180                                 uint16_t *accuracy);
181
182 int btd_adapter_block_address(struct btd_adapter *adapter,
183                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
184 int btd_adapter_unblock_address(struct btd_adapter *adapter,
185                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
186
187 int btd_adapter_disconnect_device(struct btd_adapter *adapter,
188                                                         const bdaddr_t *bdaddr,
189                                                         uint8_t bdaddr_type);
190
191 int btd_adapter_remove_bonding(struct btd_adapter *adapter,
192                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
193
194 int btd_adapter_pincode_reply(struct btd_adapter *adapter,
195                                         const  bdaddr_t *bdaddr,
196                                         const char *pin, size_t pin_len);
197 int btd_adapter_confirm_reply(struct btd_adapter *adapter,
198                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
199                                 gboolean success);
200 int btd_adapter_passkey_reply(struct btd_adapter *adapter,
201                                 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
202                                 uint32_t passkey);
203
204 int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
205                                         uint8_t addr_type, uint8_t io_cap);
206
207 int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
208                                         uint8_t addr_type, uint8_t io_cap);
209
210 int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
211                                                         uint8_t addr_type);
212
213 int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
214
215 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
216
217 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
218                                         const bdaddr_t *bdaddr,
219                                         uint8_t *hash, uint8_t *randomizer);
220
221 int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
222                                                         const bdaddr_t *bdaddr);
223
224 int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
225 void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
226
227 bool btd_adapter_ssp_enabled(struct btd_adapter *adapter);
228
229 int adapter_connect_list_add(struct btd_adapter *adapter,
230                                         struct btd_device *device);
231 void adapter_connect_list_remove(struct btd_adapter *adapter,
232                                                 struct btd_device *device);
233 void adapter_auto_connect_add(struct btd_adapter *adapter,
234                                         struct btd_device *device);
235 void adapter_auto_connect_remove(struct btd_adapter *adapter,
236                                         struct btd_device *device);
237 void adapter_whitelist_add(struct btd_adapter *adapter,
238                                                 struct btd_device *dev);
239 void adapter_whitelist_remove(struct btd_adapter *adapter,
240                                                 struct btd_device *dev);
241
242 void btd_adapter_set_oob_handler(struct btd_adapter *adapter,
243                                                 struct oob_handler *handler);
244 gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter);
245
246 void btd_adapter_for_each_device(struct btd_adapter *adapter,
247                         void (*cb)(struct btd_device *device, void *data),
248                         void *data);
249
250 bool btd_le_connect_before_pairing(void);
251
252 #ifdef __TIZEN_PATCH__
253 #if 0 // Not used
254 int btd_adapter_read_rssi(struct btd_adapter *adapter, bdaddr_t *bdaddr,
255                         struct btd_device *device);
256
257 int btd_adapter_l2cap_conn_param_update(struct btd_adapter *adapter,
258                         bdaddr_t *bdaddr, uint16_t interval_min,
259                         uint16_t interval_max, uint16_t latency,
260                         uint16_t supervision_time_out);
261
262 int btd_adapter_write_auth_payload_timeout(struct btd_adapter *adapter,
263                                 bdaddr_t *bdaddr, uint32_t payload_timeout,
264                                 struct btd_device *device);
265 int btd_adapter_read_auth_payload_timeout(struct btd_adapter *adapter,
266                                 bdaddr_t *bdaddr, struct btd_device *device);
267 #endif
268
269 int btd_adapter_le_conn_update(struct btd_adapter *adapter, bdaddr_t *bdaddr,
270                         uint16_t interval_min, uint16_t interval_max,
271                         uint16_t latency, uint16_t supervision_time_out);
272 gboolean adapter_clear_le_white_list(struct btd_adapter *adapter);
273 gboolean adapter_add_le_white_list(struct btd_adapter *adapter, struct btd_device *device);
274
275 gboolean btd_adapter_is_le_auto_connect(struct btd_adapter *adapter);
276 void btd_adapter_set_le_auto_connect(struct btd_adapter *adapter, gboolean auto_connect);
277 gboolean btd_adapter_disable_le_auto_connect(struct btd_adapter *adapter);
278 void adapter_check_version(struct btd_adapter *adapter, uint8_t hci_ver);
279 GSList *btd_adapter_get_connections(struct btd_adapter *adapter);
280 int btd_adapter_connect_ipsp(struct btd_adapter *adapter,
281                                                 const bdaddr_t *bdaddr,
282                                                 uint8_t bdaddr_type);
283 int btd_adapter_disconnect_ipsp(struct btd_adapter *adapter,
284                                                 const bdaddr_t *bdaddr,
285                                                 uint8_t bdaddr_type);
286
287 uint8_t btd_adapter_get_rpa_res_support_value(
288                 struct btd_adapter *adapter);
289
290 int btd_adapter_set_dev_rpa_res_support(struct btd_adapter *adapter,
291                                                 struct btd_device *device);
292
293 typedef void (*read_max_data_length_cb_t) (struct btd_adapter *adapter,
294                                         const uint16_t max_txOctects,
295                                         const uint16_t max_txTime,
296                                         const uint16_t max_rxOctects,
297                                         const uint16_t max_rxTime,
298                                         void *user_data);
299
300 struct le_data_length_read_handler {
301         read_max_data_length_cb_t read_callback;
302         void *user_data;
303 };
304
305 typedef void (*read_host_suggested_default_data_length_cb_t) (struct btd_adapter *adapter,
306                                         const uint16_t def_txOctects,
307                                         const uint16_t def_txTime,
308                                         void *user_data);
309
310 struct le_data_length_read_default_data_length_handler {
311         read_host_suggested_default_data_length_cb_t read_callback;
312         void *user_data;
313 };
314
315 int btd_adapter_le_set_data_length(struct btd_adapter *adapter, bdaddr_t *bdaddr,
316                 uint16_t max_tx_octets, uint16_t max_tx_time);
317 #ifdef TIZEN_WEARABLE
318 charging_state_e get_charging_state(struct btd_adapter *adapter);
319 #endif  /* TIZEN_WEARABLE */
320 #endif