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.
21 #include "bluetooth-api.h"
22 #include "bt-internal-types.h"
24 #include "bt-common.h"
25 #include "bt-request-sender.h"
26 #include "bt-event-handler.h"
28 static gboolean is_le_scanning = FALSE;
30 BT_EXPORT_API int bluetooth_check_adapter_le(void)
35 ret = _bt_get_adapter_path(_bt_get_system_private_conn(), NULL);
37 if (ret != BLUETOOTH_ERROR_NONE)
38 return BLUETOOTH_ADAPTER_LE_DISABLED;
40 ret = vconf_get_int(VCONFKEY_BT_LE_STATUS, &value);
42 BT_ERR("fail to get vconf key!");
46 BT_DBG("value : %d", value);
47 return value == VCONFKEY_BT_LE_STATUS_ON ? BLUETOOTH_ADAPTER_LE_ENABLED :
48 BLUETOOTH_ADAPTER_LE_DISABLED;
51 BT_EXPORT_API int bluetooth_enable_adapter_le(void)
56 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
58 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_ADAPTER_LE,
59 in_param1, in_param2, in_param3, in_param4, &out_param);
61 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
65 BT_EXPORT_API int bluetooth_disable_adapter_le(void)
68 retv_if(bluetooth_check_adapter_le() == BLUETOOTH_ADAPTER_LE_DISABLED,
69 BLUETOOTH_ERROR_DEVICE_NOT_ENABLED);
72 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
74 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_ADAPTER_LE,
75 in_param1, in_param2, in_param3, in_param4, &out_param);
77 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
82 void _bt_set_le_scan_status(gboolean mode)
84 BT_DBG("set LE scan mode : %d -> %d", is_le_scanning, mode);
85 is_le_scanning = mode;
88 BT_EXPORT_API gboolean bluetooth_is_le_scanning(void)
90 return is_le_scanning;
93 BT_EXPORT_API int bluetooth_start_le_discovery(void)
97 BT_CHECK_ENABLED_ANY(return);
100 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
102 BT_INFO_C("### Start LE scan");
103 _bt_print_api_caller_name();
104 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_LE_DISCOVERY,
105 in_param1, in_param2, in_param3, in_param4, &out_param);
107 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
109 if (result == BLUETOOTH_ERROR_NONE)
110 _bt_set_le_scan_status(TRUE);
115 BT_EXPORT_API int bluetooth_stop_le_discovery(void)
119 BT_CHECK_ENABLED_ANY(return);
122 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
124 BT_INFO_C("### Stop LE scan");
125 _bt_print_api_caller_name();
126 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_STOP_LE_DISCOVERY,
127 in_param1, in_param2, in_param3, in_param4, &out_param);
129 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
131 if (result == BLUETOOTH_ERROR_NONE)
132 _bt_set_le_scan_status(FALSE);
137 BT_EXPORT_API int bluetooth_is_le_discovering(void)
140 int is_discovering = FALSE;
142 BT_CHECK_ENABLED_ANY(return);
145 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
147 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_DISCOVERYING,
148 in_param1, in_param2, in_param3, in_param4, &out_param);
150 if (result == BLUETOOTH_ERROR_NONE) {
151 is_discovering = g_array_index(out_param,
154 BT_ERR("Fail to send request");
157 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
159 return is_discovering;
162 BT_EXPORT_API int bluetooth_is_scan_filter_supported(gboolean *is_supported)
166 BT_CHECK_PARAMETER(is_supported, return);
169 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
171 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SCAN_FILTER_SUPPORTED,
172 in_param1, in_param2, in_param3, in_param4, &out_param);
174 if (result == BLUETOOTH_ERROR_NONE) {
175 *is_supported = g_array_index(out_param, int, 0);
176 BT_INFO("Scan Filter Support[%s]", *is_supported ? "TRUE" : "FALSE");
178 BT_ERR("Fail to send request");
180 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
185 BT_EXPORT_API int bluetooth_register_scan_filter(bluetooth_le_scan_filter_t *filter, int *slot_id)
189 BT_CHECK_ENABLED_ANY(return);
192 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
194 g_array_append_vals(in_param1, filter, sizeof(bluetooth_le_scan_filter_t));
196 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REGISTER_SCAN_FILTER,
197 in_param1, in_param2, in_param3, in_param4, &out_param);
199 if (result == BLUETOOTH_ERROR_NONE)
200 *slot_id = g_array_index(out_param, int, 0);
202 BT_ERR("Fail to send request");
204 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
209 BT_EXPORT_API int bluetooth_unregister_scan_filter(int slot_id)
213 BT_CHECK_ENABLED_ANY(return);
216 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
218 g_array_append_vals(in_param1, &slot_id, sizeof(int));
220 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_SCAN_FILTER,
221 in_param1, in_param2, in_param3, in_param4, &out_param);
223 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
228 BT_EXPORT_API int bluetooth_unregister_all_scan_filters(void)
232 BT_CHECK_ENABLED_ANY(return);
235 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
237 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_ALL_SCAN_FILTERS,
238 in_param1, in_param2, in_param3, in_param4, &out_param);
240 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
245 gboolean __bluetooth_is_privileged_process(void)
248 char path[30] = {0, };
249 char buf[256] = {0, };
251 snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
252 fp = fopen(path, "r");
256 if (fgets(buf, 256, fp) != NULL) {
257 if (strstr(buf, "weconnd") != NULL) {
267 BT_EXPORT_API int bluetooth_set_advertising(int handle, gboolean enable)
270 gboolean use_reserved_slot = TRUE;
272 BT_CHECK_ENABLED_ANY(return);
274 if (TIZEN_PROFILE_WEARABLE)
275 use_reserved_slot = __bluetooth_is_privileged_process();
277 _bt_print_api_caller_name();
280 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
282 g_array_append_vals(in_param1, &handle, sizeof(int));
283 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
284 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
286 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
287 in_param1, in_param2, in_param3, in_param4, &out_param);
289 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
294 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
295 bluetooth_advertising_params_t *params)
298 gboolean use_reserved_slot = TRUE;
300 BT_CHECK_ENABLED_ANY(return);
302 if (TIZEN_PROFILE_WEARABLE)
303 use_reserved_slot = __bluetooth_is_privileged_process();
305 _bt_print_api_caller_name();
308 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
310 g_array_append_vals(in_param1, &handle, sizeof(int));
311 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
312 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
313 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
315 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
316 in_param1, in_param2, in_param3, in_param4, &out_param);
318 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
323 BT_EXPORT_API int bluetooth_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
328 BT_CHECK_PARAMETER(adv_data, return);
329 BT_CHECK_PARAMETER(length, return);
330 BT_CHECK_ENABLED_ANY(return);
333 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
335 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
336 in_param1, in_param2, in_param3, in_param4, &out_param);
338 if (result == BLUETOOTH_ERROR_NONE) {
339 data = &g_array_index(out_param, guint8, 0);
340 *length = out_param->len;
342 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
343 memcpy(adv_data->data, data, *length);
346 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
351 BT_EXPORT_API int bluetooth_set_advertising_data(int handle, const bluetooth_advertising_data_t *value, int length)
354 gboolean use_reserved_slot = TRUE;
356 BT_CHECK_PARAMETER(value, return);
357 BT_CHECK_ENABLED_ANY(return);
359 if (length > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 3)
360 return BLUETOOTH_ERROR_INVALID_PARAM;
362 if (TIZEN_PROFILE_WEARABLE)
363 use_reserved_slot = __bluetooth_is_privileged_process();
366 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
368 g_array_append_vals(in_param1, &handle, sizeof(int));
369 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
370 g_array_append_vals(in_param3, &length, sizeof(int));
371 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
373 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
374 in_param1, in_param2, in_param3, in_param4, &out_param);
376 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
381 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
386 BT_CHECK_PARAMETER(value, return);
387 BT_CHECK_PARAMETER(length, return);
388 BT_CHECK_ENABLED_ANY(return);
391 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
393 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
394 in_param1, in_param2, in_param3, in_param4, &out_param);
396 if (result == BLUETOOTH_ERROR_NONE) {
397 data = &g_array_index(out_param, guint8, 0);
398 *length = out_param->len;
400 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
401 memcpy(value->data, data, *length);
404 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
409 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
410 const bluetooth_scan_resp_data_t *value, int length)
413 gboolean use_reserved_slot = TRUE;
415 BT_CHECK_PARAMETER(value, return);
416 BT_CHECK_ENABLED_ANY(return);
418 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
419 return BLUETOOTH_ERROR_INVALID_PARAM;
421 if (TIZEN_PROFILE_WEARABLE)
422 use_reserved_slot = __bluetooth_is_privileged_process();
425 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
427 g_array_append_vals(in_param1, &handle, sizeof(int));
428 g_array_append_vals(in_param2, value, length);
429 g_array_append_vals(in_param3, &length, sizeof(int));
430 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
432 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
433 in_param1, in_param2, in_param3, in_param4, &out_param);
435 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
440 BT_EXPORT_API int bluetooth_set_scan_parameters(bluetooth_le_scan_params_t *params)
444 BT_CHECK_ENABLED_ANY(return);
447 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
449 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
451 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
452 in_param1, in_param2, in_param3, in_param4, &out_param);
454 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
459 BT_EXPORT_API int bluetooth_set_scan_type(bluetooth_le_scan_type_t scan_type)
463 BT_CHECK_ENABLED_ANY(return);
466 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
468 g_array_append_vals(in_param1, &scan_type, sizeof(int));
470 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_TYPE,
471 in_param1, in_param2, in_param3, in_param4, &out_param);
473 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
478 BT_EXPORT_API int bluetooth_is_advertising(gboolean *is_advertising)
482 BT_CHECK_ENABLED_ANY(return);
485 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
487 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
488 in_param1, in_param2, in_param3, in_param4, &out_param);
490 if (result == BLUETOOTH_ERROR_NONE)
491 *is_advertising = g_array_index(out_param, int, 0);
493 BT_ERR("Fail to send request");
495 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
500 BT_EXPORT_API int bluetooth_add_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
504 BT_CHECK_PARAMETER(address, return);
505 BT_CHECK_ENABLED_ANY(return);
508 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
510 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
511 g_array_append_vals(in_param2, &address_type, sizeof(int));
513 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ADD_WHITE_LIST,
514 in_param1, in_param2, in_param3, in_param4, &out_param);
516 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
521 BT_EXPORT_API int bluetooth_remove_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
525 BT_CHECK_PARAMETER(address, return);
526 BT_CHECK_ENABLED_ANY(return);
529 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
531 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
532 g_array_append_vals(in_param2, &address_type, sizeof(int));
534 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_WHITE_LIST,
535 in_param1, in_param2, in_param3, in_param4, &out_param);
537 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
542 BT_EXPORT_API int bluetooth_clear_white_list(void)
546 BT_CHECK_ENABLED_ANY(return);
549 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
551 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_WHITE_LIST,
552 in_param1, in_param2, in_param3, in_param4, &out_param);
554 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
559 BT_EXPORT_API int bluetooth_enable_le_privacy(gboolean enable_privacy)
563 BT_CHECK_ENABLED_ANY(return);
566 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
568 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
570 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
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_set_le_static_random_address(gboolean enable)
582 BT_CHECK_ENABLED_ANY(return);
585 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
587 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
589 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
590 in_param1, in_param2, in_param3, in_param4, &out_param);
592 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
597 BT_EXPORT_API int bluetooth_check_privilege_advertising_parameter(void)
599 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
600 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
601 BT_ERR("Don't have a privilege to use this API");
602 return BLUETOOTH_ERROR_PERMISSION_DEINED;
605 return BLUETOOTH_ERROR_NONE;
608 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
612 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
613 if (ret != BLUETOOTH_ERROR_NONE &&
614 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
615 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
619 return BLUETOOTH_ERROR_NONE;
622 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
624 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
626 return BLUETOOTH_ERROR_NONE;
629 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
630 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
632 BT_CHECK_ENABLED_ANY(return);
635 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
637 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
639 result = _bt_send_request(BT_BLUEZ_SERVICE,
640 BT_LE_READ_MAXIMUM_DATA_LENGTH,
641 in_param1, in_param2, in_param3, in_param4, &out_param);
643 if (result == BLUETOOTH_ERROR_NONE) {
644 datalength = &g_array_index(out_param,
645 bluetooth_le_read_maximum_data_length_t, 0);
646 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
647 max_le_datalength->max_tx_time = datalength->max_tx_time;
648 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
649 max_le_datalength->max_rx_time = datalength->max_rx_time;
652 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
657 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
658 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
660 BT_CHECK_ENABLED_ANY(return);
665 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
667 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
668 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
670 result = _bt_send_request(BT_BLUEZ_SERVICE,
671 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
672 in_param1, in_param2, in_param3, in_param4, &out_param);
674 if (result != BLUETOOTH_ERROR_NONE)
675 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
677 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
682 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
683 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
685 BT_CHECK_ENABLED_ANY(return);
689 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
690 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
692 result = _bt_send_request(BT_BLUEZ_SERVICE,
693 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
694 in_param1, in_param2, in_param3, in_param4, &out_param);
696 if (result == BLUETOOTH_ERROR_NONE) {
697 data_values = &g_array_index(out_param,
698 bluetooth_le_read_host_suggested_data_length_t, 0);
700 le_data_length->def_tx_octets = data_values->def_tx_octets;
701 le_data_length->def_tx_time = data_values->def_tx_time;
704 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
709 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
710 const unsigned int max_tx_octets, const unsigned int max_tx_time)
712 BT_CHECK_ENABLED_ANY(return);
717 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
719 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
720 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
721 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
723 result = _bt_send_request(BT_BLUEZ_SERVICE,
724 BT_LE_SET_DATA_LENGTH,
725 in_param1, in_param2, in_param3, in_param4, &out_param);
727 if (result != BLUETOOTH_ERROR_NONE)
728 BT_ERR("Failed to Set data length values : %d", result);
730 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
735 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
739 BT_CHECK_PARAMETER(is_supported, return);
740 BT_CHECK_ENABLED_ANY(return);
743 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
745 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
746 in_param1, in_param2, in_param3, in_param4, &out_param);
748 if (result == BLUETOOTH_ERROR_NONE) {
749 *is_supported = g_array_index(out_param, int, 0);
751 BT_ERR("Fail to send request");
754 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
756 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
760 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
764 BT_CHECK_PARAMETER(is_supported, return);
765 BT_CHECK_ENABLED_ANY(return);
768 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
770 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
771 in_param1, in_param2, in_param3, in_param4, &out_param);
773 if (result == BLUETOOTH_ERROR_NONE) {
774 *is_supported = g_array_index(out_param, int, 0);
776 BT_ERR("Fail to send request");
779 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
781 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");