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_get_gatt_data_batching_available_packets(
450 int *available_packets)
455 BT_CHECK_PARAMETER(available_packets, return);
456 BT_CHECK_ENABLED_ANY(return);
459 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
461 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_GATT_DATA_BATCHING_AVAILABLE_PACKETS,
462 in_param1, in_param2, in_param3, in_param4, &out_param);
464 if (result == BLUETOOTH_ERROR_NONE) {
465 available = g_array_index(out_param, guint, 0);
466 BT_DBG("available_packets: %d", available);
467 *available_packets = available;
470 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
475 BT_EXPORT_API int bluetooth_enable_gatt_data_batching(
476 const bluetooth_device_address_t *device_address, int packet_threshold, int timeout)
480 BT_CHECK_PARAMETER(device_address, return);
481 BT_CHECK_ENABLED_ANY(return);
484 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
486 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
487 g_array_append_vals(in_param2, &packet_threshold, sizeof(int));
488 g_array_append_vals(in_param3, &timeout, sizeof(int));
490 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_GATT_DATA_BATCHING,
491 in_param1, in_param2, in_param3, in_param4, &out_param);
493 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
498 BT_EXPORT_API int bluetooth_disable_gatt_data_batching(
499 const bluetooth_device_address_t *device_address)
503 BT_CHECK_PARAMETER(device_address, return);
504 BT_CHECK_ENABLED_ANY(return);
507 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
509 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
511 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_GATT_DATA_BATCHING,
512 in_param1, in_param2, in_param3, in_param4, &out_param);
514 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
519 BT_EXPORT_API int bluetooth_enable_rssi(const bluetooth_device_address_t *remote_address,
520 int link_type, bt_rssi_threshold_t *rssi_threshold)
522 #ifdef __BROADCOM_PATCH__
525 BT_CHECK_ENABLED(return);
528 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
529 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
530 g_array_append_vals(in_param2, &link_type, sizeof(int));
531 g_array_append_vals(in_param3, rssi_threshold, sizeof(bt_rssi_threshold_t));
533 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_RSSI,
534 in_param1, in_param2, in_param3, in_param4, &out_param);
536 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
540 BT_ERR("Current chipset does not support this function.");
541 return BLUETOOTH_ERROR_NOT_SUPPORT;
545 BT_EXPORT_API int bluetooth_get_rssi_strength(const bluetooth_device_address_t *remote_address, int link_type)
547 #ifdef __BROADCOM_PATCH__
550 BT_CHECK_ENABLED(return);
553 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
554 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
555 g_array_append_vals(in_param2, &link_type, sizeof(int));
557 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_RSSI,
558 in_param1, in_param2, in_param3, in_param4, &out_param);
560 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
564 BT_ERR("Current chipset does not support this function.");
565 return BLUETOOTH_ERROR_NOT_SUPPORT;
569 BT_EXPORT_API int bluetooth_le_conn_update(const bluetooth_device_address_t *address,
570 const bluetooth_le_connection_param_t *parameters)
574 BT_CHECK_ENABLED(return);
575 BT_CHECK_PARAMETER(address, return);
576 BT_CHECK_PARAMETER(parameters, return);
579 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
581 g_array_append_vals(in_param1, address,
582 sizeof(bluetooth_device_address_t));
583 g_array_append_vals(in_param2, parameters,
584 sizeof(bluetooth_le_connection_param_t));
586 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_CONN_UPDATE,
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_get_connected_link_type(
595 const bluetooth_device_address_t *device_address,
596 bluetooth_connected_link_t *connected)
600 BT_CHECK_PARAMETER(device_address, return);
601 BT_CHECK_ENABLED(return);
604 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
606 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
608 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_CONNECTED_LINK_TYPE,
609 in_param1, in_param2, in_param3, in_param4, &out_param);
611 if (result == BLUETOOTH_ERROR_NONE)
612 *connected = g_array_index(out_param, guint, 0);
614 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
619 BT_EXPORT_API int bluetooth_set_pin_code(
620 const bluetooth_device_address_t *device_address,
621 const bluetooth_device_pin_code_t *pin_code)
625 BT_CHECK_PARAMETER(device_address, return);
626 BT_CHECK_PARAMETER(pin_code, return);
627 BT_CHECK_ENABLED(return);
630 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
632 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
633 g_array_append_vals(in_param2, pin_code, sizeof(bluetooth_device_pin_code_t));
635 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PIN_CODE,
636 in_param1, in_param2, in_param3, in_param4, &out_param);
638 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
643 BT_EXPORT_API int bluetooth_unset_pin_code(
644 const bluetooth_device_address_t *device_address)
648 BT_CHECK_PARAMETER(device_address, return);
649 BT_CHECK_ENABLED(return);
652 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
654 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
656 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNSET_PIN_CODE,
657 in_param1, in_param2, in_param3, in_param4, &out_param);
659 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
664 BT_EXPORT_API int bluetooth_update_le_connection_mode(const bluetooth_device_address_t *address,
665 const bluetooth_le_connection_mode_t mode)
669 BT_CHECK_ENABLED(return);
670 BT_CHECK_PARAMETER(address, return);
673 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
675 g_array_append_vals(in_param1, address,
676 sizeof(bluetooth_device_address_t));
677 g_array_append_vals(in_param2, &mode,
678 sizeof(bluetooth_le_connection_mode_t));
680 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UPDATE_LE_CONNECTION_MODE,
681 in_param1, in_param2, in_param3, in_param4, &out_param);
683 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
688 BT_EXPORT_API int bluetooth_request_att_mtu(const bluetooth_device_address_t *device_address, unsigned int mtu)
691 bt_user_info_t *user_info;
693 BT_CHECK_PARAMETER(device_address, return);
694 BT_CHECK_ENABLED_ANY(return);
696 if (mtu > BLUETOOTH_MAX_ATT_MTU)
697 return BLUETOOTH_ERROR_INVALID_PARAM;
699 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_REQ_ATT_MTU)
700 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
701 BT_ERR("Don't have a privilege to use this API");
702 return BLUETOOTH_ERROR_PERMISSION_DEINED;
706 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
708 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
709 g_array_append_vals(in_param2, &mtu, sizeof(unsigned int));
711 user_info = _bt_get_user_data(BT_COMMON);
712 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
714 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_REQ_ATT_MTU,
715 in_param1, in_param2, in_param3, in_param4,
716 user_info->cb, user_info->user_data);
718 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
723 BT_EXPORT_API int bluetooth_get_att_mtu(const bluetooth_device_address_t *device_address,
728 BT_CHECK_PARAMETER(device_address, return);
729 BT_CHECK_PARAMETER(mtu, return);
730 BT_CHECK_ENABLED(return);
733 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
735 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
737 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ATT_MTU,
738 in_param1, in_param2, in_param3, in_param4, &out_param);
740 if (result == BLUETOOTH_ERROR_NONE)
741 *mtu = g_array_index(out_param, unsigned int, 0);
743 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
748 BT_EXPORT_API int bluetooth_get_device_ida(const bluetooth_device_address_t *device_rpa,
749 bluetooth_device_address_t *id_address)
753 BT_CHECK_PARAMETER(device_rpa, return);
754 BT_CHECK_PARAMETER(id_address, return);
755 BT_CHECK_ENABLED_ANY(return);
758 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
760 g_array_append_vals(in_param1, device_rpa, sizeof(bluetooth_device_address_t));
762 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DEVICE_IDA,
763 in_param1, in_param2, in_param3, in_param4, &out_param);
765 if (result == BLUETOOTH_ERROR_NONE) {
766 *id_address = g_array_index(out_param,
767 bluetooth_device_address_t, 0);
770 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
775 BT_EXPORT_API int bluetooth_force_hcidump(int timeout)
779 BT_CHECK_ENABLED_ANY(return);
782 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
784 g_array_append_vals(in_param1, &timeout, sizeof(int));
786 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_FORCE_HCI_DUMP,
787 in_param1, in_param2, in_param3, in_param4, &out_param);
789 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
794 BT_EXPORT_API int bluetooth_set_profile_trusted(
795 const bluetooth_device_address_t *device_address,
796 int profile, int trust)
800 BT_CHECK_PARAMETER(device_address, return);
801 BT_CHECK_ENABLED(return);
804 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
806 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
807 g_array_append_vals(in_param2, &profile, sizeof(int));
808 g_array_append_vals(in_param3, &trust, sizeof(int));
810 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PROFILE_TRUSTED,
811 in_param1, in_param2, in_param3, in_param4, &out_param);
813 if (result == BLUETOOTH_ERROR_NONE)
814 BT_DBG("SUCCESSFUL");
816 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
821 BT_EXPORT_API int bluetooth_get_profile_trusted(
822 const bluetooth_device_address_t *device_address,
823 int profile, int *trust)
826 int trust_profile = 0;
827 BT_CHECK_PARAMETER(device_address, return);
828 BT_CHECK_ENABLED(return);
831 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
833 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
834 g_array_append_vals(in_param2, &profile, sizeof(int));
836 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_PROFILE_TRUSTED,
837 in_param1, in_param2, in_param3, in_param4, &out_param);
839 if (result == BLUETOOTH_ERROR_NONE) {
840 trust_profile = g_array_index(out_param, guint, 0);
841 BT_DBG("SUCCESSFUL");
843 BT_DBG("TRUST %d", trust_profile);
844 *trust = trust_profile;
845 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
850 BT_EXPORT_API int bluetooth_passkey_reply(char *passkey, gboolean reply)
854 char str_passkey[BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX];
856 BT_CHECK_PARAMETER(passkey, return);
857 BT_CHECK_ENABLED(return);
860 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
862 g_strlcpy(str_passkey, passkey, sizeof(str_passkey));
863 g_array_append_vals(in_param1, str_passkey, BLUETOOTH_DEVICE_PASSKEY_LENGTH_MAX);
864 g_array_append_vals(in_param2, &reply, sizeof(gboolean));
866 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_REPLY,
867 in_param1, in_param2, in_param3, in_param4, &out_param);
869 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
874 BT_EXPORT_API int bluetooth_passkey_confirmation_reply(gboolean reply)
878 BT_CHECK_ENABLED(return);
881 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
882 g_array_append_vals(in_param1, &reply, sizeof(gboolean));
883 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_PASSKEY_CONFIRMATION_REPLY,
884 in_param1, in_param2, in_param3, in_param4, &out_param);
885 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);