1 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 * BlueZ - Bluetooth protocol stack for Linux
6 * Copyright (C) 2006-2010 Nokia Corporation
7 * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
13 #include <dbus/dbus.h>
15 #include <lib/bluetooth.h>
18 #define ADAPTER_INTERFACE "org.bluez.Adapter1"
20 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
21 #include <bluetooth/bluetooth.h>
22 #include <bluetooth/sdp.h>
23 #include <bluetooth/hci.h>
24 #include <bluetooth/hci_lib.h>
27 #define MAX_NAME_LENGTH 248
29 /* Invalid SSP passkey value used to indicate negative replies */
30 #define INVALID_PASSKEY 0xffffffff
32 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
33 #define BT_DISC_TYPE_DEFAULT 0
34 #define BT_DISC_TYPE_BREDR_ONLY 1
35 #define BT_DISC_TYPE_LE_ONLY 2
36 #define BT_DISC_TYPE_LE_BREDR 3
38 #define TIZEN_FEATURE_PLATFROM_SCAN_FILTER
39 #ifdef TIZEN_FEATURE_PLATFROM_SCAN_FILTER
41 #define COMPANY_ID_APPLE 0x004C
42 /* Deafult value set to 16(same as vendor specific value)
43 * and value shall be changed when required */
44 #define SCAN_FILTER_SLOTS_MAX 16
46 #define ADV_TYPE_IND 0x00
47 #define ADV_TYPE_DIRECT_IND 0x01
48 #define ADV_TYPE_SCAN_IND 0x02
49 #define ADV_TYPE_NONCONN_IND 0x03
50 #define ADV_TYPE_SCAN_RESPONSE 0x04
56 } adapter_le_scan_report_type;
61 } adapter_le_scan_type;
62 #endif /* TIZEN_FEATURE_PLATFROM_SCAN_FILTER */
69 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
71 BLUETOOTH_A2DP_SOURCE_ROLE = 0,
72 BLUETOOTH_A2DP_SINK_ROLE,
73 } bluetooth_a2dp_role_t;
76 struct btd_adapter *btd_adapter_get_default(void);
77 bool btd_adapter_is_default(struct btd_adapter *adapter);
78 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
79 bluetooth_a2dp_role_t btd_adapter_get_a2dp_role(struct btd_adapter *adapter);
80 void btd_adapter_set_a2dp_role(struct btd_adapter *adapter, bluetooth_a2dp_role_t role);
81 void btd_adapter_emit_a2dp_role_changed(struct btd_adapter *adapter);
83 uint16_t btd_adapter_get_index(struct btd_adapter *adapter);
85 typedef void (*adapter_cb) (struct btd_adapter *adapter, gpointer user_data);
87 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
88 typedef void (*oob_ext_read_local_cb_t) (struct btd_adapter *adapter,
89 const uint8_t *hash192,
90 const uint8_t *randomizer192,
91 const uint8_t *hash256,
92 const uint8_t *randomizer256,
94 typedef void (*le_oob_read_local_cb_t) (struct btd_adapter *adapter,
95 const uint16_t eir_len, const uint8_t *eir, void *user_data);
97 typedef void (*oob_read_local_cb_t) (struct btd_adapter *adapter,
99 const uint8_t *randomizer,
101 typedef void (*oob_bonding_cb_t) (struct btd_adapter *adapter,
102 const bdaddr_t *bdaddr, uint8_t status,
106 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
107 oob_ext_read_local_cb_t read_local_cb;
108 le_oob_read_local_cb_t le_read_local_cb;
110 oob_read_local_cb_t read_local_cb;
112 oob_bonding_cb_t bonding_cb;
113 bdaddr_t remote_addr;
117 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
118 #ifdef TIZEN_FEATURE_BLUEZ_BATTERY_WATCH
124 #endif /* TIZEN_FEATURE_BLUEZ_BATTERY_WATCH */
127 int adapter_init(void);
128 void adapter_cleanup(void);
129 void adapter_shutdown(void);
131 typedef void (*btd_disconnect_cb) (struct btd_device *device, uint8_t reason);
132 void btd_add_disconnect_cb(btd_disconnect_cb func);
133 void btd_remove_disconnect_cb(btd_disconnect_cb func);
135 typedef void (*btd_conn_fail_cb) (struct btd_device *device, uint8_t status);
136 void btd_add_conn_fail_cb(btd_conn_fail_cb func);
137 void btd_remove_conn_fail_cb(btd_conn_fail_cb func);
139 struct btd_adapter *adapter_find(const bdaddr_t *sba);
140 struct btd_adapter *adapter_find_by_id(int id);
141 void adapter_foreach(adapter_cb func, gpointer user_data);
143 bool btd_adapter_get_pairable(struct btd_adapter *adapter);
144 bool btd_adapter_get_powered(struct btd_adapter *adapter);
145 bool btd_adapter_get_connectable(struct btd_adapter *adapter);
146 bool btd_adapter_get_discoverable(struct btd_adapter *adapter);
147 bool btd_adapter_get_bredr(struct btd_adapter *adapter);
149 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter);
151 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
152 const char *btd_adapter_get_name(struct btd_adapter *adapter);
153 void btd_adapter_remove_device(struct btd_adapter *adapter,
154 struct btd_device *dev);
155 struct btd_device *btd_adapter_get_device(struct btd_adapter *adapter,
156 const bdaddr_t *addr,
158 sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
160 struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
163 struct btd_device *btd_adapter_find_device_by_path(struct btd_adapter *adapter,
166 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
167 void btd_adapter_update_found_device(struct btd_adapter *adapter,
168 const bdaddr_t *bdaddr,
169 uint8_t bdaddr_type, int8_t rssi,
170 bool confirm, bool legacy, uint8_t adv_type,
171 const uint8_t *data, uint8_t data_len,
174 void btd_adapter_update_found_device(struct btd_adapter *adapter,
175 const bdaddr_t *bdaddr,
176 uint8_t bdaddr_type, int8_t rssi,
177 bool confirm, bool legacy,
178 bool not_connectable,
179 const uint8_t *data, uint8_t data_len,
182 const char *adapter_get_path(struct btd_adapter *adapter);
183 const bdaddr_t *btd_adapter_get_address(struct btd_adapter *adapter);
184 uint8_t btd_adapter_get_address_type(struct btd_adapter *adapter);
185 const char *btd_adapter_get_storage_dir(struct btd_adapter *adapter);
186 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
187 const bdaddr_t *btd_adapter_get_le_address(struct btd_adapter *adapter);
188 uint8_t btd_adapter_get_le_address_type(struct btd_adapter * adapter);
190 int adapter_set_name(struct btd_adapter *adapter, const char *name);
192 int adapter_service_add(struct btd_adapter *adapter, sdp_record_t *rec);
193 void adapter_service_remove(struct btd_adapter *adapter, uint32_t handle);
195 struct agent *adapter_get_agent(struct btd_adapter *adapter);
197 bool btd_adapter_uuid_is_allowed(struct btd_adapter *adapter, const char *uuid);
199 struct btd_adapter *btd_adapter_ref(struct btd_adapter *adapter);
200 void btd_adapter_unref(struct btd_adapter *adapter);
202 void btd_adapter_set_class(struct btd_adapter *adapter, uint8_t major,
205 struct btd_adapter_driver {
207 int (*probe)(struct btd_adapter *adapter);
208 void (*remove)(struct btd_adapter *adapter);
209 void (*resume)(struct btd_adapter *adapter);
210 void (*device_added)(struct btd_adapter *adapter,
211 struct btd_device *device);
212 void (*device_removed)(struct btd_adapter *adapter,
213 struct btd_device *device);
214 void (*device_resolved)(struct btd_adapter *adapter,
215 struct btd_device *device);
218 void device_resolved_drivers(struct btd_adapter *adapter,
219 struct btd_device *device);
220 typedef void (*service_auth_cb) (DBusError *derr, void *user_data);
222 void adapter_add_profile(struct btd_adapter *adapter, gpointer p);
223 void adapter_remove_profile(struct btd_adapter *adapter, gpointer p);
224 int btd_register_adapter_driver(struct btd_adapter_driver *driver);
225 void btd_unregister_adapter_driver(struct btd_adapter_driver *driver);
226 guint btd_request_authorization(const bdaddr_t *src, const bdaddr_t *dst,
227 const char *uuid, service_auth_cb cb, void *user_data);
228 guint btd_request_authorization_cable_configured(const bdaddr_t *src, const bdaddr_t *dst,
229 const char *uuid, service_auth_cb cb, void *user_data);
230 int btd_cancel_authorization(guint id);
232 int btd_adapter_restore_powered(struct btd_adapter *adapter);
234 typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
235 struct btd_device *dev, char *out, bool *display,
236 unsigned int attempt);
237 void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
238 btd_adapter_pin_cb_t cb);
239 void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
240 btd_adapter_pin_cb_t cb);
242 struct btd_adapter_pin_cb_iter *btd_adapter_pin_cb_iter_new(
243 struct btd_adapter *adapter);
244 void btd_adapter_pin_cb_iter_free(struct btd_adapter_pin_cb_iter *iter);
245 bool btd_adapter_pin_cb_iter_end(struct btd_adapter_pin_cb_iter *iter);
247 typedef void (*btd_msd_cb_t) (struct btd_adapter *adapter,
248 struct btd_device *dev,
252 void btd_adapter_register_msd_cb(struct btd_adapter *adapter,
254 void btd_adapter_unregister_msd_cb(struct btd_adapter *adapter,
257 /* If TRUE, enables fast connectabe, i.e. reduces page scan interval and changes
258 * type. If FALSE, disables fast connectable, i.e. sets page scan interval and
259 * type to default values. Valid for both connectable and discoverable modes. */
260 int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
263 int btd_adapter_read_clock(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
264 int which, int timeout, uint32_t *clock,
267 int btd_adapter_block_address(struct btd_adapter *adapter,
268 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
269 int btd_adapter_unblock_address(struct btd_adapter *adapter,
270 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
272 int btd_adapter_disconnect_device(struct btd_adapter *adapter,
273 const bdaddr_t *bdaddr,
274 uint8_t bdaddr_type);
276 int btd_adapter_remove_bonding(struct btd_adapter *adapter,
277 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
279 int btd_adapter_pincode_reply(struct btd_adapter *adapter,
280 const bdaddr_t *bdaddr,
281 const char *pin, size_t pin_len);
282 int btd_adapter_confirm_reply(struct btd_adapter *adapter,
283 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
285 int btd_adapter_passkey_reply(struct btd_adapter *adapter,
286 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
289 int adapter_create_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
290 uint8_t addr_type, uint8_t io_cap);
292 int adapter_bonding_attempt(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
293 uint8_t addr_type, uint8_t io_cap);
295 int adapter_cancel_bonding(struct btd_adapter *adapter, const bdaddr_t *bdaddr,
298 int adapter_set_io_capability(struct btd_adapter *adapter, uint8_t io_cap);
300 int btd_adapter_read_local_oob_data(struct btd_adapter *adapter);
302 int btd_adapter_le_read_local_oob_data(struct btd_adapter *adapter);
304 int btd_adapter_add_remote_oob_data(struct btd_adapter *adapter,
305 const bdaddr_t *bdaddr,
306 uint8_t *hash, uint8_t *randomizer);
308 int btd_adapter_remove_remote_oob_data(struct btd_adapter *adapter,
309 const bdaddr_t *bdaddr);
311 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
312 int btd_adapter_add_remote_oob_ext_data(struct btd_adapter *adapter,
313 const bdaddr_t *bdaddr, uint8_t bdaddr_type,
314 uint8_t *hash192, uint8_t *randomizer192,
315 uint8_t *hash256, uint8_t *randomizer256);
317 int btd_adapter_remove_remote_oob_ext_data(struct btd_adapter *adapter,
318 const bdaddr_t *bdaddr, uint8_t bdaddr_type);
321 int btd_adapter_gatt_server_start(struct btd_adapter *adapter);
322 void btd_adapter_gatt_server_stop(struct btd_adapter *adapter);
324 bool btd_adapter_ssp_enabled(struct btd_adapter *adapter);
326 int adapter_connect_list_add(struct btd_adapter *adapter,
327 struct btd_device *device);
328 void adapter_connect_list_remove(struct btd_adapter *adapter,
329 struct btd_device *device);
330 typedef void (*adapter_set_device_flags_func_t)(uint8_t status, uint16_t length,
333 void adapter_set_device_flags(struct btd_adapter *adapter,
334 struct btd_device *device, uint32_t flags,
335 adapter_set_device_flags_func_t func,
337 void adapter_auto_connect_add(struct btd_adapter *adapter,
338 struct btd_device *device);
339 void adapter_auto_connect_remove(struct btd_adapter *adapter,
340 struct btd_device *device);
341 void adapter_accept_list_add(struct btd_adapter *adapter,
342 struct btd_device *dev);
343 void adapter_accept_list_remove(struct btd_adapter *adapter,
344 struct btd_device *dev);
346 void btd_adapter_set_oob_handler(struct btd_adapter *adapter,
347 struct oob_handler *handler);
348 gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter);
350 void btd_adapter_for_each_device(struct btd_adapter *adapter,
351 void (*cb)(struct btd_device *device, void *data),
354 bool btd_le_connect_before_pairing(void);
356 enum kernel_features {
357 KERNEL_CONN_CONTROL = 1 << 0,
358 KERNEL_BLOCKED_KEYS_SUPPORTED = 1 << 1,
359 KERNEL_SET_SYSTEM_CONFIG = 1 << 2,
360 KERNEL_EXP_FEATURES = 1 << 3,
361 KERNEL_HAS_RESUME_EVT = 1 << 4,
362 KERNEL_HAS_EXT_ADV_ADD_CMDS = 1 << 5,
363 KERNEL_HAS_CONTROLLER_CAP_CMD = 1 << 6,
366 bool btd_has_kernel_features(uint32_t feature);
368 bool btd_adapter_set_allowed_uuids(struct btd_adapter *adapter,
369 struct queue *uuids);
370 bool btd_adapter_is_uuid_allowed(struct btd_adapter *adapter,
371 const char *uuid_str);
372 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
373 void adapter_send_event(const char *event);
375 int btd_adapter_connect_ipsp(struct btd_adapter *adapter,
376 const bdaddr_t *bdaddr,
377 uint8_t bdaddr_type);
378 int btd_adapter_disconnect_ipsp(struct btd_adapter *adapter,
379 const bdaddr_t *bdaddr,
380 uint8_t bdaddr_type);
382 uint8_t btd_adapter_get_rpa_res_support_value(
383 struct btd_adapter *adapter);
385 int btd_adapter_set_dev_rpa_res_support(struct btd_adapter *adapter,
386 struct btd_device *device);
388 typedef void (*read_max_data_length_cb_t) (struct btd_adapter *adapter,
390 const uint16_t max_txOctects,
391 const uint16_t max_txTime,
392 const uint16_t max_rxOctects,
393 const uint16_t max_rxTime,
396 struct le_data_length_read_handler {
397 read_max_data_length_cb_t read_callback;
401 typedef void (*read_host_suggested_default_data_length_cb_t) (struct btd_adapter *adapter,
402 const uint16_t def_txOctects,
403 const uint16_t def_txTime,
406 struct le_data_length_read_default_data_length_handler {
407 read_host_suggested_default_data_length_cb_t read_callback;
411 int btd_adapter_le_set_data_length(struct btd_adapter *adapter, bdaddr_t *bdaddr,
412 uint16_t max_tx_octets, uint16_t max_tx_time);
414 void adapter_check_version(struct btd_adapter *adapter, uint8_t hci_ver);
416 int btd_adapter_set_streaming_mode(struct btd_adapter *adapter,
417 const bdaddr_t *bdaddr, gboolean enable);
419 #ifdef TIZEN_FEATURE_BLUEZ_BATTERY_WATCH
420 charging_state_e get_charging_state(struct btd_adapter *adapter);
421 #endif /* TIZEN_FEATURE_BLUEZ_BATTERY_WATCH */