3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2006-2010 Nokia Corporation
6 * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
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.
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.
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
26 #include <dbus/dbus.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>
35 #define MAX_NAME_LENGTH 248
37 /* Invalid SSP passkey value used to indicate negative replies */
38 #define INVALID_PASSKEY 0xffffffff
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
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);
54 typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
56 typedef void (*oob_read_local_cb_t) (struct btd_adapter *adapter,
58 const uint8_t *randomizer,
60 typedef void (*oob_bonding_cb_t) (struct btd_adapter *adapter,
61 const bdaddr_t *bdaddr, uint8_t status,
65 oob_read_local_cb_t read_local_cb;
66 oob_bonding_cb_t bonding_cb;
71 #ifdef __TIZEN_PATCH__
78 #endif /* TIZEN_WEARABLE */
81 int adapter_init(void);
82 void adapter_cleanup(void);
83 void adapter_shutdown(void);
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);
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);
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);
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);
101 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter);
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,
110 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
112 struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
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);
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);
123 struct agent *adapter_get_agent(struct btd_adapter *adapter);
125 struct btd_adapter *btd_adapter_ref(struct btd_adapter *adapter);
126 void btd_adapter_unref(struct btd_adapter *adapter);
128 void btd_adapter_set_class(struct btd_adapter *adapter, uint8_t major,
131 struct btd_adapter_driver {
133 int (*probe) (struct btd_adapter *adapter);
134 void (*remove) (struct btd_adapter *adapter);
137 typedef void (*service_auth_cb) (DBusError *derr, void *user_data);
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);
147 int btd_adapter_restore_powered(struct btd_adapter *adapter);
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);
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);
162 typedef void (*btd_msd_cb_t) (struct btd_adapter *adapter,
163 struct btd_device *dev,
167 void btd_adapter_register_msd_cb(struct btd_adapter *adapter,
169 void btd_adapter_unregister_msd_cb(struct btd_adapter *adapter,
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,
178 int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
179 int which, int timeout, uint32_t *clock,
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);
187 int btd_adapter_disconnect_device(struct btd_adapter *adapter,
188 const bdaddr_t *bdaddr,
189 uint8_t bdaddr_type);
191 int btd_adapter_remove_bonding(struct btd_adapter *adapter,
192 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
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,
200 int btd_adapter_passkey_reply(struct btd_adapter *adapter,
201 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
204 int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
205 uint8_t addr_type, uint8_t io_cap);
207 int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
208 uint8_t addr_type, uint8_t io_cap);
210 int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
213 int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
215 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
217 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
218 const bdaddr_t *bdaddr,
219 uint8_t *hash, uint8_t *randomizer);
221 int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
222 const bdaddr_t *bdaddr);
224 int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
225 void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
227 bool btd_adapter_ssp_enabled(struct btd_adapter *adapter);
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);
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);
246 void btd_adapter_for_each_device(struct btd_adapter *adapter,
247 void (*cb)(struct btd_device *device, void *data),
250 bool btd_le_connect_before_pairing(void);
252 #ifdef __TIZEN_PATCH__
254 int btd_adapter_read_rssi(struct btd_adapter *adapter, bdaddr_t *bdaddr,
255 struct btd_device *device);
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);
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);
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);
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);
287 uint8_t btd_adapter_get_rpa_res_support_value(
288 struct btd_adapter *adapter);
290 int btd_adapter_set_dev_rpa_res_support(struct btd_adapter *adapter,
291 struct btd_device *device);
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,
300 struct le_data_length_read_handler {
301 read_max_data_length_cb_t read_callback;
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,
310 struct le_data_length_read_default_data_length_handler {
311 read_host_suggested_default_data_length_cb_t read_callback;
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 */