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"
25 #ifdef TIZEN_FEATURE_BT_DPM
29 BT_EXPORT_API int bluetooth_disconnect_device(const bluetooth_device_address_t *remote_address)
33 BT_CHECK_PARAMETER(remote_address, return);
34 BT_CHECK_ENABLED(return);
37 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
39 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
41 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISCONNECT_DEVICE,
42 in_param1, in_param2, in_param3, in_param4, &out_param);
44 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
49 BT_EXPORT_API int bluetooth_bond_device(const bluetooth_device_address_t *device_address)
52 bt_user_info_t *user_info;
54 BT_CHECK_PARAMETER(device_address, return);
55 BT_CHECK_ENABLED(return);
57 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE)
58 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
59 BT_ERR("Don't have a privilege to use this API");
60 return BLUETOOTH_ERROR_PERMISSION_DEINED;
63 #ifdef TIZEN_FEATURE_BT_DPM
64 if (_bt_check_dpm(BT_DPM_PAIRING, NULL) == BT_DPM_RESTRICTED) {
65 BT_ERR("Not allow to pair the device");
66 return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
69 if (_bt_check_dpm(BT_DPM_ADDRESS, (void *)device_address) == BT_DPM_RESTRICTED) {
70 BT_ERR("Blacklist device");
71 return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
75 user_info = _bt_get_user_data(BT_COMMON);
76 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
79 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
81 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
83 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE,
84 in_param1, in_param2, in_param3, in_param4,
85 user_info->cb, user_info->user_data);
87 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
92 BT_EXPORT_API int bluetooth_bond_device_by_type(
93 const bluetooth_device_address_t *device_address,
94 bluetooth_conn_type_t conn_type)
97 bt_user_info_t *user_info;
99 BT_CHECK_PARAMETER(device_address, return);
100 BT_CHECK_ENABLED(return);
102 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE_BY_TYPE)
103 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
104 BT_ERR("Don't have a privilege to use this API");
105 return BLUETOOTH_ERROR_PERMISSION_DEINED;
109 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
111 user_info = _bt_get_user_data(BT_COMMON);
112 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
114 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
115 g_array_append_vals(in_param2, &conn_type, sizeof(unsigned short));
117 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE_BY_TYPE,
118 in_param1, in_param2, in_param3, in_param4,
119 user_info->cb, user_info->user_data);
121 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
126 BT_EXPORT_API int bluetooth_cancel_bonding(void)
130 BT_CHECK_ENABLED(return);
133 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
135 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_BONDING,
136 in_param1, in_param2, in_param3, in_param4, &out_param);
138 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
143 BT_EXPORT_API int bluetooth_unbond_device(const bluetooth_device_address_t *device_address)
146 bt_user_info_t *user_info;
148 BT_CHECK_PARAMETER(device_address, return);
149 BT_CHECK_ENABLED(return);
151 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_UNBOND_DEVICE)
152 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
153 BT_ERR("Don't have a privilege to use this API");
154 return BLUETOOTH_ERROR_PERMISSION_DEINED;
157 user_info = _bt_get_user_data(BT_COMMON);
158 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
161 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
163 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
165 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_UNBOND_DEVICE,
166 in_param1, in_param2, in_param3, in_param4,
167 user_info->cb, user_info->user_data);
169 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
174 BT_EXPORT_API int bluetooth_get_bonded_device(const bluetooth_device_address_t *device_address,
175 bluetooth_device_info_t *dev_info)
179 BT_CHECK_PARAMETER(device_address, return);
180 BT_CHECK_PARAMETER(dev_info, return);
181 BT_CHECK_ENABLED(return);
184 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
186 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
188 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICE,
189 in_param1, in_param2, in_param3, in_param4, &out_param);
191 if (result == BLUETOOTH_ERROR_NONE) {
192 if (out_param->len > 0) {
193 *dev_info = g_array_index(out_param,
194 bluetooth_device_info_t, 0);
196 BT_ERR("out_param length is 0!!");
200 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
205 BT_EXPORT_API int bluetooth_get_is_alias_set(const bluetooth_device_address_t *device_address,
206 gboolean *is_alias_set)
210 BT_CHECK_PARAMETER(device_address, return);
211 BT_CHECK_PARAMETER(is_alias_set, return);
212 BT_CHECK_ENABLED(return);
215 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
217 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
219 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_IS_ALIAS_SET,
220 in_param1, in_param2, in_param3, in_param4, &out_param);
222 if (result == BLUETOOTH_ERROR_NONE)
223 *is_alias_set = g_array_index(out_param, gboolean, 0);
225 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
230 BT_EXPORT_API int bluetooth_get_remote_device(const bluetooth_device_address_t *device_address)
232 return BLUETOOTH_ERROR_NONE;
235 BT_EXPORT_API int bluetooth_search_service(const bluetooth_device_address_t *device_address)
238 bt_user_info_t *user_info;
240 BT_CHECK_PARAMETER(device_address, return);
241 BT_CHECK_ENABLED(return);
243 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SEARCH_SERVICE)
244 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
245 BT_ERR("Don't have a privilege to use this API");
246 return BLUETOOTH_ERROR_PERMISSION_DEINED;
249 user_info = _bt_get_user_data(BT_COMMON);
250 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
253 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
255 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
257 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_SEARCH_SERVICE,
258 in_param1, in_param2, in_param3, in_param4,
259 user_info->cb, user_info->user_data);
261 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
266 BT_EXPORT_API int bluetooth_cancel_service_search(void)
270 BT_CHECK_ENABLED(return);
273 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
275 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_SEARCH_SERVICE,
276 in_param1, in_param2, in_param3, in_param4, &out_param);
278 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
283 BT_EXPORT_API int bluetooth_set_alias(const bluetooth_device_address_t *device_address,
287 char alias_name[BLUETOOTH_DEVICE_NAME_LENGTH_MAX];
289 BT_CHECK_PARAMETER(device_address, return);
290 BT_CHECK_PARAMETER(alias, return);
291 BT_CHECK_ENABLED(return);
294 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
296 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
297 g_strlcpy(alias_name, alias, sizeof(alias_name));
298 g_array_append_vals(in_param2, alias_name, BLUETOOTH_DEVICE_NAME_LENGTH_MAX);
300 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ALIAS,
301 in_param1, in_param2, in_param3, in_param4, &out_param);
303 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
308 BT_EXPORT_API int bluetooth_authorize_device(const bluetooth_device_address_t *device_address,
313 BT_CHECK_PARAMETER(device_address, return);
314 BT_CHECK_ENABLED(return);
317 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
319 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
320 g_array_append_vals(in_param2, &authorized, sizeof(gboolean));
322 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_AUTHORIZATION,
323 in_param1, in_param2, in_param3, in_param4, &out_param);
325 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
330 BT_EXPORT_API int bluetooth_is_device_connected(const bluetooth_device_address_t *device_address,
331 bluetooth_service_type_t type,
332 gboolean *is_connected)
336 BT_CHECK_PARAMETER(device_address, return);
337 BT_CHECK_PARAMETER(is_connected, return);
338 BT_CHECK_ENABLED(return);
340 #ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
341 if (type & BLUETOOTH_RFCOMM_SERVICE) {
342 result = bluetooth_rfcomm_client_is_connected(device_address, is_connected);
343 if (*is_connected == FALSE)
344 result = bluetooth_rfcomm_server_is_connected(device_address, is_connected);
351 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
353 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
354 g_array_append_vals(in_param2, &type, sizeof(int));
356 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DEVICE_CONNECTED,
357 in_param1, in_param2, in_param3, in_param4, &out_param);
359 if (result == BLUETOOTH_ERROR_NONE)
360 *is_connected = g_array_index(out_param, gboolean, 0);
362 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
367 #ifdef TIZEN_GATT_CLIENT
368 BT_EXPORT_API int bluetooth_connect_le(const bluetooth_device_address_t *device_address,
369 gboolean auto_connect, int client_id)
371 BT_EXPORT_API int bluetooth_connect_le(const bluetooth_device_address_t *device_address, gboolean auto_connect)
375 bt_user_info_t *user_info;
377 BT_CHECK_PARAMETER(device_address, return);
378 BT_CHECK_ENABLED_ANY(return);
380 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_CONNECT_LE)
381 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
382 BT_ERR("Don't have a privilege to use this API");
383 return BLUETOOTH_ERROR_PERMISSION_DEINED;
387 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
389 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
390 g_array_append_vals(in_param2, &auto_connect, sizeof(gboolean));
392 #ifdef TIZEN_GATT_CLIENT
393 g_array_append_vals(in_param3, &client_id, sizeof(int));
396 user_info = _bt_get_user_data(BT_COMMON);
397 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
399 BT_INFO_C("### Connect LE");
400 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_CONNECT_LE,
401 in_param1, in_param2, in_param3, in_param4,
402 user_info->cb, user_info->user_data);
404 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
409 #ifdef TIZEN_GATT_CLIENT
410 BT_EXPORT_API int bluetooth_disconnect_le(const bluetooth_device_address_t *device_address,
413 BT_EXPORT_API int bluetooth_disconnect_le(const bluetooth_device_address_t *device_address)
417 bt_user_info_t *user_info;
419 BT_CHECK_PARAMETER(device_address, return);
420 BT_CHECK_ENABLED_ANY(return);
422 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_DISCONNECT_LE)
423 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
424 BT_ERR("Don't have a privilege to use this API");
425 return BLUETOOTH_ERROR_PERMISSION_DEINED;
429 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
431 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
432 #ifdef TIZEN_GATT_CLIENT
433 BT_DBG("Send GATT disconnect using Client Interface [%d]", client_id);
434 g_array_append_vals(in_param2, &client_id, sizeof(int));
436 user_info = _bt_get_user_data(BT_COMMON);
437 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
439 BT_INFO_C("### Disconnect LE");
440 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_DISCONNECT_LE,
441 in_param1, in_param2, in_param3, in_param4,
442 user_info->cb, user_info->user_data);
444 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
449 BT_EXPORT_API int bluetooth_enable_rssi(const bluetooth_device_address_t *remote_address,
450 int link_type, bt_rssi_threshold_t *rssi_threshold)
452 #ifdef __BROADCOM_PATCH__
455 BT_CHECK_ENABLED(return);
458 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
459 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
460 g_array_append_vals(in_param2, &link_type, sizeof(int));
461 g_array_append_vals(in_param3, rssi_threshold, sizeof(bt_rssi_threshold_t));
463 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_RSSI,
464 in_param1, in_param2, in_param3, in_param4, &out_param);
466 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
470 BT_ERR("Current chipset does not support this function.");
471 return BLUETOOTH_ERROR_NOT_SUPPORT;
475 BT_EXPORT_API int bluetooth_get_rssi_strength(const bluetooth_device_address_t *remote_address, int link_type)
477 #ifdef __BROADCOM_PATCH__
480 BT_CHECK_ENABLED(return);
483 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
484 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
485 g_array_append_vals(in_param2, &link_type, sizeof(int));
487 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_RSSI,
488 in_param1, in_param2, in_param3, in_param4, &out_param);
490 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
494 BT_ERR("Current chipset does not support this function.");
495 return BLUETOOTH_ERROR_NOT_SUPPORT;
499 BT_EXPORT_API int bluetooth_le_conn_update(const bluetooth_device_address_t *address,
500 const bluetooth_le_connection_param_t *parameters)
504 BT_CHECK_ENABLED(return);
505 BT_CHECK_PARAMETER(address, return);
506 BT_CHECK_PARAMETER(parameters, return);
509 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
511 g_array_append_vals(in_param1, address,
512 sizeof(bluetooth_device_address_t));
513 g_array_append_vals(in_param2, parameters,
514 sizeof(bluetooth_le_connection_param_t));
516 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_CONN_UPDATE,
517 in_param1, in_param2, in_param3, in_param4, &out_param);
519 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
524 BT_EXPORT_API int bluetooth_get_connected_link_type(
525 const bluetooth_device_address_t *device_address,
526 bluetooth_connected_link_t *connected)
530 BT_CHECK_PARAMETER(device_address, return);
531 BT_CHECK_ENABLED(return);
534 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
536 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
538 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_CONNECTED_LINK_TYPE,
539 in_param1, in_param2, in_param3, in_param4, &out_param);
541 if (result == BLUETOOTH_ERROR_NONE)
542 *connected = g_array_index(out_param, guint, 0);
544 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
549 BT_EXPORT_API int bluetooth_set_pin_code(
550 const bluetooth_device_address_t *device_address,
551 const bluetooth_device_pin_code_t *pin_code)
555 BT_CHECK_PARAMETER(device_address, return);
556 BT_CHECK_PARAMETER(pin_code, return);
557 BT_CHECK_ENABLED(return);
560 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
562 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
563 g_array_append_vals(in_param2, pin_code, sizeof(bluetooth_device_pin_code_t));
565 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PIN_CODE,
566 in_param1, in_param2, in_param3, in_param4, &out_param);
568 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
573 BT_EXPORT_API int bluetooth_unset_pin_code(
574 const bluetooth_device_address_t *device_address)
578 BT_CHECK_PARAMETER(device_address, return);
579 BT_CHECK_ENABLED(return);
582 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
584 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
586 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNSET_PIN_CODE,
587 in_param1, in_param2, in_param3, in_param4, &out_param);
589 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
594 BT_EXPORT_API int bluetooth_update_le_connection_mode(const bluetooth_device_address_t *address,
595 const bluetooth_le_connection_mode_t mode)
599 BT_CHECK_ENABLED(return);
600 BT_CHECK_PARAMETER(address, return);
603 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
605 g_array_append_vals(in_param1, address,
606 sizeof(bluetooth_device_address_t));
607 g_array_append_vals(in_param2, &mode,
608 sizeof(bluetooth_le_connection_mode_t));
610 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UPDATE_LE_CONNECTION_MODE,
611 in_param1, in_param2, in_param3, in_param4, &out_param);
613 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
618 BT_EXPORT_API int bluetooth_request_att_mtu(const bluetooth_device_address_t *device_address, unsigned int mtu)
621 bt_user_info_t *user_info;
623 BT_CHECK_PARAMETER(device_address, return);
624 BT_CHECK_ENABLED_ANY(return);
626 if (mtu > BLUETOOTH_MAX_ATT_MTU)
627 return BLUETOOTH_ERROR_INVALID_PARAM;
629 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_REQ_ATT_MTU)
630 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
631 BT_ERR("Don't have a privilege to use this API");
632 return BLUETOOTH_ERROR_PERMISSION_DEINED;
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));
639 g_array_append_vals(in_param2, &mtu, sizeof(unsigned int));
641 user_info = _bt_get_user_data(BT_COMMON);
642 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
644 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_REQ_ATT_MTU,
645 in_param1, in_param2, in_param3, in_param4,
646 user_info->cb, user_info->user_data);
648 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
653 BT_EXPORT_API int bluetooth_get_att_mtu(const bluetooth_device_address_t *device_address,
658 BT_CHECK_PARAMETER(device_address, return);
659 BT_CHECK_PARAMETER(mtu, return);
660 BT_CHECK_ENABLED(return);
663 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
665 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
667 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ATT_MTU,
668 in_param1, in_param2, in_param3, in_param4, &out_param);
670 if (result == BLUETOOTH_ERROR_NONE)
671 *mtu = g_array_index(out_param, unsigned int, 0);
673 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
678 BT_EXPORT_API int bluetooth_get_device_ida(const bluetooth_device_address_t *device_rpa,
679 bluetooth_device_address_t *id_address)
683 BT_CHECK_PARAMETER(device_rpa, return);
684 BT_CHECK_PARAMETER(id_address, return);
685 BT_CHECK_ENABLED_ANY(return);
688 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
690 g_array_append_vals(in_param1, device_rpa, sizeof(bluetooth_device_address_t));
692 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DEVICE_IDA,
693 in_param1, in_param2, in_param3, in_param4, &out_param);
695 if (result == BLUETOOTH_ERROR_NONE) {
696 *id_address = g_array_index(out_param,
697 bluetooth_device_address_t, 0);
700 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
705 BT_EXPORT_API int bluetooth_force_hcidump(int timeout)
709 BT_CHECK_ENABLED_ANY(return);
712 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
714 g_array_append_vals(in_param1, &timeout, sizeof(int));
716 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_FORCE_HCI_DUMP,
717 in_param1, in_param2, in_param3, in_param4, &out_param);
719 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
724 BT_EXPORT_API int bluetooth_set_profile_trusted(
725 const bluetooth_device_address_t *device_address,
726 int profile, int trust)
730 BT_CHECK_PARAMETER(device_address, return);
731 BT_CHECK_ENABLED(return);
734 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
736 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
737 g_array_append_vals(in_param2, &profile, sizeof(int));
738 g_array_append_vals(in_param3, &trust, sizeof(int));
740 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PROFILE_TRUSTED,
741 in_param1, in_param2, in_param3, in_param4, &out_param);
743 if (result == BLUETOOTH_ERROR_NONE)
744 BT_DBG("SUCCESSFUL");
746 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
751 BT_EXPORT_API int bluetooth_get_profile_trusted(
752 const bluetooth_device_address_t *device_address,
753 int profile, int *trust)
756 int trust_profile = 0;
757 BT_CHECK_PARAMETER(device_address, return);
758 BT_CHECK_ENABLED(return);
761 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
763 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
764 g_array_append_vals(in_param2, &profile, sizeof(int));
766 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_PROFILE_TRUSTED,
767 in_param1, in_param2, in_param3, in_param4, &out_param);
769 if (result == BLUETOOTH_ERROR_NONE) {
770 trust_profile = g_array_index(out_param, guint, 0);
771 BT_DBG("SUCCESSFUL");
773 BT_DBG("TRUST %d", trust_profile);
774 *trust = trust_profile;
775 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
780 BT_EXPORT_API int bluetooth_passkey_reply(char *passkey, gboolean reply)
784 char str_passkey[BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX];
786 BT_CHECK_PARAMETER(passkey, return);
787 BT_CHECK_ENABLED(return);
790 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
792 g_strlcpy(str_passkey, passkey, sizeof(str_passkey));
793 g_array_append_vals(in_param1, str_passkey, BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX);
794 g_array_append_vals(in_param2, &reply, sizeof(gboolean));
796 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_REPLY,
797 in_param1, in_param2, in_param3, in_param4, &out_param);
799 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
804 BT_EXPORT_API int bluetooth_passkey_confirmation_reply(gboolean reply)
808 BT_CHECK_ENABLED(return);
811 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
812 g_array_append_vals(in_param1, &reply, sizeof(gboolean));
813 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_CONFIRMATION_REPLY,
814 in_param1, in_param2, in_param3, in_param4, &out_param);
815 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);