2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "bluetooth-api.h"
19 #include "bt-internal-types.h"
21 #include "bt-common.h"
22 #include "bt-request-sender.h"
23 #include "bt-event-handler.h"
26 BT_EXPORT_API int bluetooth_disconnect_device(const bluetooth_device_address_t *remote_address)
30 BT_CHECK_PARAMETER(remote_address, return);
31 BT_CHECK_ENABLED(return);
34 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
36 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
38 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISCONNECT_DEVICE,
39 in_param1, in_param2, in_param3, in_param4, &out_param);
41 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
46 BT_EXPORT_API int bluetooth_bond_device(const bluetooth_device_address_t *device_address)
49 bt_user_info_t *user_info;
51 BT_CHECK_PARAMETER(device_address, return);
52 BT_CHECK_ENABLED(return);
54 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE)
55 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
56 BT_ERR("Don't have a privilege to use this API");
57 return BLUETOOTH_ERROR_PERMISSION_DEINED;
60 if (_bt_check_dpm(BT_DPM_PAIRING, NULL) == BT_DPM_RESTRICTED) {
61 BT_ERR("Not allow to pair the device");
62 return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
65 if (_bt_check_dpm(BT_DPM_ADDRESS, (void *)device_address) == BT_DPM_RESTRICTED) {
66 BT_ERR("Blacklist device");
67 return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
70 user_info = _bt_get_user_data(BT_COMMON);
71 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
74 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
76 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
78 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE,
79 in_param1, in_param2, in_param3, in_param4,
80 user_info->cb, user_info->user_data);
82 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
87 BT_EXPORT_API int bluetooth_bond_device_by_type(
88 const bluetooth_device_address_t *device_address,
89 bluetooth_conn_type_t conn_type)
92 bt_user_info_t *user_info;
94 BT_CHECK_PARAMETER(device_address, return);
95 BT_CHECK_ENABLED(return);
97 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE_BY_TYPE)
98 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
99 BT_ERR("Don't have a privilege to use this API");
100 return BLUETOOTH_ERROR_PERMISSION_DEINED;
104 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
106 user_info = _bt_get_user_data(BT_COMMON);
107 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
109 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
110 g_array_append_vals(in_param2, &conn_type, sizeof(unsigned short));
112 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE_BY_TYPE,
113 in_param1, in_param2, in_param3, in_param4,
114 user_info->cb, user_info->user_data);
116 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
121 BT_EXPORT_API int bluetooth_cancel_bonding(void)
125 BT_CHECK_ENABLED(return);
128 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
130 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_BONDING,
131 in_param1, in_param2, in_param3, in_param4, &out_param);
133 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
138 BT_EXPORT_API int bluetooth_unbond_device(const bluetooth_device_address_t *device_address)
141 bt_user_info_t *user_info;
143 BT_CHECK_PARAMETER(device_address, return);
144 BT_CHECK_ENABLED(return);
146 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_UNBOND_DEVICE)
147 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
148 BT_ERR("Don't have a privilege to use this API");
149 return BLUETOOTH_ERROR_PERMISSION_DEINED;
152 user_info = _bt_get_user_data(BT_COMMON);
153 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
156 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
158 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
160 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_UNBOND_DEVICE,
161 in_param1, in_param2, in_param3, in_param4,
162 user_info->cb, user_info->user_data);
164 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
169 BT_EXPORT_API int bluetooth_get_bonded_device(const bluetooth_device_address_t *device_address,
170 bluetooth_device_info_t *dev_info)
174 BT_CHECK_PARAMETER(device_address, return);
175 BT_CHECK_PARAMETER(dev_info, return);
176 BT_CHECK_ENABLED(return);
179 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
181 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
183 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICE,
184 in_param1, in_param2, in_param3, in_param4, &out_param);
186 if (result == BLUETOOTH_ERROR_NONE) {
187 if (out_param->len > 0) {
188 *dev_info = g_array_index(out_param,
189 bluetooth_device_info_t, 0);
191 BT_ERR("out_param length is 0!!");
195 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
200 BT_EXPORT_API int bluetooth_get_is_alias_set(const bluetooth_device_address_t *device_address,
201 gboolean *is_alias_set)
205 BT_CHECK_PARAMETER(device_address, return);
206 BT_CHECK_PARAMETER(is_alias_set, return);
207 BT_CHECK_ENABLED(return);
210 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
212 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
214 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_IS_ALIAS_SET,
215 in_param1, in_param2, in_param3, in_param4, &out_param);
217 if (result == BLUETOOTH_ERROR_NONE)
218 *is_alias_set = g_array_index(out_param, gboolean, 0);
220 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
225 BT_EXPORT_API int bluetooth_get_remote_device(const bluetooth_device_address_t *device_address)
227 return BLUETOOTH_ERROR_NONE;
230 BT_EXPORT_API int bluetooth_search_service(const bluetooth_device_address_t *device_address)
233 bt_user_info_t *user_info;
235 BT_CHECK_PARAMETER(device_address, return);
236 BT_CHECK_ENABLED(return);
238 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SEARCH_SERVICE)
239 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
240 BT_ERR("Don't have a privilege to use this API");
241 return BLUETOOTH_ERROR_PERMISSION_DEINED;
244 user_info = _bt_get_user_data(BT_COMMON);
245 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
248 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
250 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
252 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_SEARCH_SERVICE,
253 in_param1, in_param2, in_param3, in_param4,
254 user_info->cb, user_info->user_data);
256 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
261 BT_EXPORT_API int bluetooth_cancel_service_search(void)
265 BT_CHECK_ENABLED(return);
268 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
270 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_SEARCH_SERVICE,
271 in_param1, in_param2, in_param3, in_param4, &out_param);
273 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
278 BT_EXPORT_API int bluetooth_set_alias(const bluetooth_device_address_t *device_address,
282 char alias_name[BLUETOOTH_DEVICE_NAME_LENGTH_MAX];
284 BT_CHECK_PARAMETER(device_address, return);
285 BT_CHECK_PARAMETER(alias, return);
286 BT_CHECK_ENABLED(return);
289 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
291 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
292 g_strlcpy(alias_name, alias, sizeof(alias_name));
293 g_array_append_vals(in_param2, alias_name, BLUETOOTH_DEVICE_NAME_LENGTH_MAX);
295 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ALIAS,
296 in_param1, in_param2, in_param3, in_param4, &out_param);
298 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
303 BT_EXPORT_API int bluetooth_authorize_device(const bluetooth_device_address_t *device_address,
308 BT_CHECK_PARAMETER(device_address, return);
309 BT_CHECK_ENABLED(return);
312 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
314 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
315 g_array_append_vals(in_param2, &authorized, sizeof(gboolean));
317 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_AUTHORIZATION,
318 in_param1, in_param2, in_param3, in_param4, &out_param);
320 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
325 BT_EXPORT_API int bluetooth_is_device_connected(const bluetooth_device_address_t *device_address,
326 bluetooth_service_type_t type,
327 gboolean *is_connected)
331 BT_CHECK_PARAMETER(device_address, return);
332 BT_CHECK_PARAMETER(is_connected, return);
333 BT_CHECK_ENABLED(return);
335 #ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
336 if (type & BLUETOOTH_RFCOMM_SERVICE) {
337 result = bluetooth_rfcomm_client_is_connected(device_address, is_connected);
338 if (*is_connected == FALSE)
339 result = bluetooth_rfcomm_server_is_connected(device_address, is_connected);
346 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
348 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
349 g_array_append_vals(in_param2, &type, sizeof(int));
351 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DEVICE_CONNECTED,
352 in_param1, in_param2, in_param3, in_param4, &out_param);
354 if (result == BLUETOOTH_ERROR_NONE)
355 *is_connected = g_array_index(out_param, gboolean, 0);
357 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
362 BT_EXPORT_API int bluetooth_connect_le(const bluetooth_device_address_t *device_address,
363 gboolean auto_connect, int client_id)
366 bt_user_info_t *user_info;
368 BT_CHECK_PARAMETER(device_address, return);
369 BT_CHECK_ENABLED_ANY(return);
371 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_CONNECT_LE)
372 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
373 BT_ERR("Don't have a privilege to use this API");
374 return BLUETOOTH_ERROR_PERMISSION_DEINED;
378 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
380 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
381 g_array_append_vals(in_param2, &auto_connect, sizeof(gboolean));
382 g_array_append_vals(in_param3, &client_id, sizeof(int));
384 user_info = _bt_get_user_data(BT_COMMON);
385 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
387 BT_INFO_C("### Connect LE");
388 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_CONNECT_LE,
389 in_param1, in_param2, in_param3, in_param4,
390 user_info->cb, user_info->user_data);
392 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
397 BT_EXPORT_API int bluetooth_disconnect_le(const bluetooth_device_address_t *device_address,
401 bt_user_info_t *user_info;
403 BT_CHECK_PARAMETER(device_address, return);
404 BT_CHECK_ENABLED_ANY(return);
406 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_DISCONNECT_LE)
407 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
408 BT_ERR("Don't have a privilege to use this API");
409 return BLUETOOTH_ERROR_PERMISSION_DEINED;
413 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
415 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
416 g_array_append_vals(in_param2, &client_id, sizeof(int));
418 BT_DBG("Send GATT disconnect using Client Interface [%d]", client_id);
420 user_info = _bt_get_user_data(BT_COMMON);
421 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
423 BT_INFO_C("### Disconnect LE");
424 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_DISCONNECT_LE,
425 in_param1, in_param2, in_param3, in_param4,
426 user_info->cb, user_info->user_data);
428 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
433 BT_EXPORT_API int bluetooth_get_gatt_data_batching_available_packets(
434 int *available_packets)
439 BT_CHECK_PARAMETER(available_packets, return);
440 BT_CHECK_ENABLED_ANY(return);
443 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
445 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_GATT_DATA_BATCHING_AVAILABLE_PACKETS,
446 in_param1, in_param2, in_param3, in_param4, &out_param);
448 if (result == BLUETOOTH_ERROR_NONE) {
449 available = g_array_index(out_param, guint, 0);
450 BT_DBG("available_packets: %d", available);
451 *available_packets = available;
454 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
459 BT_EXPORT_API int bluetooth_enable_gatt_data_batching(
460 const bluetooth_device_address_t *device_address, int packet_threshold, int timeout)
464 BT_CHECK_PARAMETER(device_address, return);
465 BT_CHECK_ENABLED_ANY(return);
468 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
470 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
471 g_array_append_vals(in_param2, &packet_threshold, sizeof(int));
472 g_array_append_vals(in_param3, &timeout, sizeof(int));
474 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_GATT_DATA_BATCHING,
475 in_param1, in_param2, in_param3, in_param4, &out_param);
477 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
482 BT_EXPORT_API int bluetooth_disable_gatt_data_batching(
483 const bluetooth_device_address_t *device_address)
487 BT_CHECK_PARAMETER(device_address, return);
488 BT_CHECK_ENABLED_ANY(return);
491 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
493 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
495 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_GATT_DATA_BATCHING,
496 in_param1, in_param2, in_param3, in_param4, &out_param);
498 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
503 BT_EXPORT_API int bluetooth_enable_rssi(const bluetooth_device_address_t *remote_address,
504 int link_type, bt_rssi_threshold_t *rssi_threshold)
506 #ifdef __BROADCOM_PATCH__
509 BT_CHECK_ENABLED(return);
512 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
513 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
514 g_array_append_vals(in_param2, &link_type, sizeof(int));
515 g_array_append_vals(in_param3, rssi_threshold, sizeof(bt_rssi_threshold_t));
517 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_RSSI,
518 in_param1, in_param2, in_param3, in_param4, &out_param);
520 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
524 BT_ERR("Current chipset does not support this function.");
525 return BLUETOOTH_ERROR_NOT_SUPPORT;
529 BT_EXPORT_API int bluetooth_get_rssi_strength(const bluetooth_device_address_t *remote_address, int link_type)
531 #ifdef __BROADCOM_PATCH__
534 BT_CHECK_ENABLED(return);
537 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
538 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
539 g_array_append_vals(in_param2, &link_type, sizeof(int));
541 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_RSSI,
542 in_param1, in_param2, in_param3, in_param4, &out_param);
544 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
548 BT_ERR("Current chipset does not support this function.");
549 return BLUETOOTH_ERROR_NOT_SUPPORT;
553 BT_EXPORT_API int bluetooth_le_conn_update(const bluetooth_device_address_t *address,
554 const bluetooth_le_connection_param_t *parameters)
558 BT_CHECK_ENABLED(return);
559 BT_CHECK_PARAMETER(address, return);
560 BT_CHECK_PARAMETER(parameters, return);
563 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
565 g_array_append_vals(in_param1, address,
566 sizeof(bluetooth_device_address_t));
567 g_array_append_vals(in_param2, parameters,
568 sizeof(bluetooth_le_connection_param_t));
570 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_CONN_UPDATE,
571 in_param1, in_param2, in_param3, in_param4, &out_param);
573 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
578 BT_EXPORT_API int bluetooth_get_connected_link_type(
579 const bluetooth_device_address_t *device_address,
580 bluetooth_connected_link_t *connected)
584 BT_CHECK_PARAMETER(device_address, return);
585 BT_CHECK_ENABLED(return);
588 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
590 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
592 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_CONNECTED_LINK_TYPE,
593 in_param1, in_param2, in_param3, in_param4, &out_param);
595 if (result == BLUETOOTH_ERROR_NONE)
596 *connected = g_array_index(out_param, guint, 0);
598 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
603 BT_EXPORT_API int bluetooth_set_pin_code(
604 const bluetooth_device_address_t *device_address,
605 const bluetooth_device_pin_code_t *pin_code)
609 BT_CHECK_PARAMETER(device_address, return);
610 BT_CHECK_PARAMETER(pin_code, return);
611 BT_CHECK_ENABLED(return);
614 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
616 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
617 g_array_append_vals(in_param2, pin_code, sizeof(bluetooth_device_pin_code_t));
619 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PIN_CODE,
620 in_param1, in_param2, in_param3, in_param4, &out_param);
622 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
627 BT_EXPORT_API int bluetooth_unset_pin_code(
628 const bluetooth_device_address_t *device_address)
632 BT_CHECK_PARAMETER(device_address, return);
633 BT_CHECK_ENABLED(return);
636 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
638 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
640 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNSET_PIN_CODE,
641 in_param1, in_param2, in_param3, in_param4, &out_param);
643 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
648 BT_EXPORT_API int bluetooth_update_le_connection_mode(const bluetooth_device_address_t *address,
649 const bluetooth_le_connection_mode_t mode)
653 BT_CHECK_ENABLED(return);
654 BT_CHECK_PARAMETER(address, return);
657 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
659 g_array_append_vals(in_param1, address,
660 sizeof(bluetooth_device_address_t));
661 g_array_append_vals(in_param2, &mode,
662 sizeof(bluetooth_le_connection_mode_t));
664 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UPDATE_LE_CONNECTION_MODE,
665 in_param1, in_param2, in_param3, in_param4, &out_param);
667 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
672 BT_EXPORT_API int bluetooth_request_att_mtu(const bluetooth_device_address_t *device_address, unsigned int mtu)
675 bt_user_info_t *user_info;
677 BT_CHECK_PARAMETER(device_address, return);
678 BT_CHECK_ENABLED_ANY(return);
680 if (mtu > BLUETOOTH_MAX_ATT_MTU)
681 return BLUETOOTH_ERROR_INVALID_PARAM;
683 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_REQ_ATT_MTU)
684 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
685 BT_ERR("Don't have a privilege to use this API");
686 return BLUETOOTH_ERROR_PERMISSION_DEINED;
690 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
692 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
693 g_array_append_vals(in_param2, &mtu, sizeof(unsigned int));
695 user_info = _bt_get_user_data(BT_COMMON);
696 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
698 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_REQ_ATT_MTU,
699 in_param1, in_param2, in_param3, in_param4,
700 user_info->cb, user_info->user_data);
702 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
707 BT_EXPORT_API int bluetooth_get_att_mtu(const bluetooth_device_address_t *device_address,
712 BT_CHECK_PARAMETER(device_address, return);
713 BT_CHECK_PARAMETER(mtu, return);
714 BT_CHECK_ENABLED(return);
717 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
719 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
721 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ATT_MTU,
722 in_param1, in_param2, in_param3, in_param4, &out_param);
724 if (result == BLUETOOTH_ERROR_NONE)
725 *mtu = g_array_index(out_param, unsigned int, 0);
727 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
732 BT_EXPORT_API int bluetooth_get_device_ida(const bluetooth_device_address_t *device_rpa,
733 bluetooth_device_address_t *id_address)
737 BT_CHECK_PARAMETER(device_rpa, return);
738 BT_CHECK_PARAMETER(id_address, return);
739 BT_CHECK_ENABLED_ANY(return);
742 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
744 g_array_append_vals(in_param1, device_rpa, sizeof(bluetooth_device_address_t));
746 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DEVICE_IDA,
747 in_param1, in_param2, in_param3, in_param4, &out_param);
749 if (result == BLUETOOTH_ERROR_NONE) {
750 *id_address = g_array_index(out_param,
751 bluetooth_device_address_t, 0);
754 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
759 BT_EXPORT_API int bluetooth_force_hcidump(int timeout)
763 BT_CHECK_ENABLED_ANY(return);
766 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
768 g_array_append_vals(in_param1, &timeout, sizeof(int));
770 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_FORCE_HCI_DUMP,
771 in_param1, in_param2, in_param3, in_param4, &out_param);
773 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
778 BT_EXPORT_API int bluetooth_set_profile_trusted(
779 const bluetooth_device_address_t *device_address,
780 int profile, int trust)
784 BT_CHECK_PARAMETER(device_address, return);
785 BT_CHECK_ENABLED(return);
788 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
790 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
791 g_array_append_vals(in_param2, &profile, sizeof(int));
792 g_array_append_vals(in_param3, &trust, sizeof(int));
794 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PROFILE_TRUSTED,
795 in_param1, in_param2, in_param3, in_param4, &out_param);
797 if (result == BLUETOOTH_ERROR_NONE)
798 BT_DBG("SUCCESSFUL");
800 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
805 BT_EXPORT_API int bluetooth_get_profile_trusted(
806 const bluetooth_device_address_t *device_address,
807 int profile, int *trust)
810 int trust_profile = 0;
811 BT_CHECK_PARAMETER(device_address, return);
812 BT_CHECK_ENABLED(return);
815 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
817 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
818 g_array_append_vals(in_param2, &profile, sizeof(int));
820 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_PROFILE_TRUSTED,
821 in_param1, in_param2, in_param3, in_param4, &out_param);
823 if (result == BLUETOOTH_ERROR_NONE) {
824 trust_profile = g_array_index(out_param, guint, 0);
825 BT_DBG("SUCCESSFUL");
827 BT_DBG("TRUST %d", trust_profile);
828 *trust = trust_profile;
829 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
834 BT_EXPORT_API int bluetooth_passkey_reply(char *passkey, gboolean reply)
838 char str_passkey[BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX];
840 BT_CHECK_PARAMETER(passkey, return);
841 BT_CHECK_ENABLED(return);
844 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
846 g_strlcpy(str_passkey, passkey, sizeof(str_passkey));
847 g_array_append_vals(in_param1, str_passkey, BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX);
848 g_array_append_vals(in_param2, &reply, sizeof(gboolean));
850 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_REPLY,
851 in_param1, in_param2, in_param3, in_param4, &out_param);
853 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
858 BT_EXPORT_API int bluetooth_passkey_confirmation_reply(gboolean reply)
862 BT_CHECK_ENABLED(return);
865 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
866 g_array_append_vals(in_param1, &reply, sizeof(gboolean));
867 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_CONFIRMATION_REPLY,
868 in_param1, in_param2, in_param3, in_param4, &out_param);
869 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);