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;
29 static int is_scan_filter_supported = -1;
31 BT_EXPORT_API int bluetooth_check_adapter_le(void)
36 ret = _bt_get_adapter_path(_bt_get_system_private_conn(), NULL);
38 if (ret != BLUETOOTH_ERROR_NONE)
39 return BLUETOOTH_ADAPTER_LE_DISABLED;
41 ret = vconf_get_int(VCONFKEY_BT_LE_STATUS, &value);
43 BT_ERR("fail to get vconf key!");
47 BT_DBG("value : %d", value);
48 return value == VCONFKEY_BT_LE_STATUS_ON ? BLUETOOTH_ADAPTER_LE_ENABLED :
49 BLUETOOTH_ADAPTER_LE_DISABLED;
52 BT_EXPORT_API int bluetooth_enable_adapter_le(void)
57 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
59 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_ADAPTER_LE,
60 in_param1, in_param2, in_param3, in_param4, &out_param);
62 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
66 BT_EXPORT_API int bluetooth_disable_adapter_le(void)
69 retv_if(bluetooth_check_adapter_le() == BLUETOOTH_ADAPTER_LE_DISABLED,
70 BLUETOOTH_ERROR_DEVICE_NOT_ENABLED);
73 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
75 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_ADAPTER_LE,
76 in_param1, in_param2, in_param3, in_param4, &out_param);
78 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
83 void _bt_set_le_scan_status(gboolean mode)
85 BT_DBG("set LE scan mode : %d -> %d", is_le_scanning, mode);
86 is_le_scanning = mode;
89 BT_EXPORT_API gboolean bluetooth_is_le_scanning(void)
91 return is_le_scanning;
94 BT_EXPORT_API int bluetooth_start_le_discovery(void)
98 BT_CHECK_ENABLED_ANY(return);
101 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
103 BT_INFO_C("### Start LE scan");
104 _bt_print_api_caller_name();
105 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_LE_DISCOVERY,
106 in_param1, in_param2, in_param3, in_param4, &out_param);
108 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
110 if (result == BLUETOOTH_ERROR_NONE)
111 _bt_set_le_scan_status(TRUE);
116 BT_EXPORT_API int bluetooth_stop_le_discovery(void)
120 BT_CHECK_ENABLED_ANY(return);
123 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
125 BT_INFO_C("### Stop LE scan");
126 _bt_print_api_caller_name();
127 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_STOP_LE_DISCOVERY,
128 in_param1, in_param2, in_param3, in_param4, &out_param);
130 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
132 if (result == BLUETOOTH_ERROR_NONE)
133 _bt_set_le_scan_status(FALSE);
138 BT_EXPORT_API int bluetooth_is_le_discovering(void)
141 int is_discovering = FALSE;
143 BT_CHECK_ENABLED_ANY(return);
146 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
148 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_DISCOVERYING,
149 in_param1, in_param2, in_param3, in_param4, &out_param);
151 if (result == BLUETOOTH_ERROR_NONE) {
152 is_discovering = g_array_index(out_param,
155 BT_ERR("Fail to send request");
158 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
160 return is_discovering;
163 BT_EXPORT_API gboolean bluetooth_is_scan_filter_supported(void)
167 if (is_scan_filter_supported == -1) {
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_scan_filter_supported = g_array_index(out_param, int, 0);
177 BT_ERR("Fail to send request");
179 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
182 if (is_scan_filter_supported == 1)
188 BT_EXPORT_API int bluetooth_register_scan_filter(bluetooth_le_scan_filter_t *filter, int *slot_id)
192 BT_CHECK_ENABLED_ANY(return);
195 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
197 g_array_append_vals(in_param1, filter, sizeof(bluetooth_le_scan_filter_t));
199 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REGISTER_SCAN_FILTER,
200 in_param1, in_param2, in_param3, in_param4, &out_param);
202 if (result == BLUETOOTH_ERROR_NONE)
203 *slot_id = g_array_index(out_param, int, 0);
205 BT_ERR("Fail to send request");
207 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
212 BT_EXPORT_API int bluetooth_unregister_scan_filter(int slot_id)
216 BT_CHECK_ENABLED_ANY(return);
219 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
221 g_array_append_vals(in_param1, &slot_id, sizeof(int));
223 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_SCAN_FILTER,
224 in_param1, in_param2, in_param3, in_param4, &out_param);
226 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
231 BT_EXPORT_API int bluetooth_unregister_all_scan_filters(void)
235 BT_CHECK_ENABLED_ANY(return);
238 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
240 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_ALL_SCAN_FILTERS,
241 in_param1, in_param2, in_param3, in_param4, &out_param);
243 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
248 gboolean __bluetooth_is_privileged_process(void)
251 char path[30] = {0, };
252 char buf[256] = {0, };
254 snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
255 fp = fopen(path, "r");
259 if (fgets(buf, 256, fp) != NULL) {
260 if (strstr(buf, "weconnd") != NULL) {
270 BT_EXPORT_API int bluetooth_set_advertising(int handle, gboolean enable)
273 gboolean use_reserved_slot = TRUE;
275 BT_CHECK_ENABLED_ANY(return);
277 if (TIZEN_PROFILE_WEARABLE)
278 use_reserved_slot = __bluetooth_is_privileged_process();
280 _bt_print_api_caller_name();
283 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
285 g_array_append_vals(in_param1, &handle, sizeof(int));
286 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
287 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
289 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
290 in_param1, in_param2, in_param3, in_param4, &out_param);
292 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
297 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
298 bluetooth_advertising_params_t *params)
301 gboolean use_reserved_slot = TRUE;
303 BT_CHECK_ENABLED_ANY(return);
305 if (TIZEN_PROFILE_WEARABLE)
306 use_reserved_slot = __bluetooth_is_privileged_process();
308 _bt_print_api_caller_name();
311 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
313 g_array_append_vals(in_param1, &handle, sizeof(int));
314 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
315 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
316 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
318 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
319 in_param1, in_param2, in_param3, in_param4, &out_param);
321 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
326 BT_EXPORT_API int bluetooth_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
331 BT_CHECK_PARAMETER(adv_data, return);
332 BT_CHECK_PARAMETER(length, return);
333 BT_CHECK_ENABLED_ANY(return);
336 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
338 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
339 in_param1, in_param2, in_param3, in_param4, &out_param);
341 if (result == BLUETOOTH_ERROR_NONE) {
342 data = &g_array_index(out_param, guint8, 0);
343 *length = out_param->len;
345 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
346 memcpy(adv_data->data, data, *length);
349 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
354 BT_EXPORT_API int bluetooth_set_advertising_data(int handle, const bluetooth_advertising_data_t *value, int length)
357 gboolean use_reserved_slot = TRUE;
359 BT_CHECK_PARAMETER(value, return);
360 BT_CHECK_ENABLED_ANY(return);
362 if (length > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 3)
363 return BLUETOOTH_ERROR_INVALID_PARAM;
365 if (TIZEN_PROFILE_WEARABLE)
366 use_reserved_slot = __bluetooth_is_privileged_process();
369 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
371 g_array_append_vals(in_param1, &handle, sizeof(int));
372 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
373 g_array_append_vals(in_param3, &length, sizeof(int));
374 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
376 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
377 in_param1, in_param2, in_param3, in_param4, &out_param);
379 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
384 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
389 BT_CHECK_PARAMETER(value, return);
390 BT_CHECK_PARAMETER(length, return);
391 BT_CHECK_ENABLED_ANY(return);
394 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
396 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
397 in_param1, in_param2, in_param3, in_param4, &out_param);
399 if (result == BLUETOOTH_ERROR_NONE) {
400 data = &g_array_index(out_param, guint8, 0);
401 *length = out_param->len;
403 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
404 memcpy(value->data, data, *length);
407 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
412 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
413 const bluetooth_scan_resp_data_t *value, int length)
416 gboolean use_reserved_slot = TRUE;
418 BT_CHECK_PARAMETER(value, return);
419 BT_CHECK_ENABLED_ANY(return);
421 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
422 return BLUETOOTH_ERROR_INVALID_PARAM;
424 if (TIZEN_PROFILE_WEARABLE)
425 use_reserved_slot = __bluetooth_is_privileged_process();
428 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
430 g_array_append_vals(in_param1, &handle, sizeof(int));
431 g_array_append_vals(in_param2, value, length);
432 g_array_append_vals(in_param3, &length, sizeof(int));
433 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
435 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
436 in_param1, in_param2, in_param3, in_param4, &out_param);
438 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
443 BT_EXPORT_API int bluetooth_set_scan_parameters(bluetooth_le_scan_params_t *params)
447 BT_CHECK_ENABLED_ANY(return);
450 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
452 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
454 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
455 in_param1, in_param2, in_param3, in_param4, &out_param);
457 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
462 BT_EXPORT_API int bluetooth_set_scan_type(bluetooth_le_scan_type_t scan_type)
466 BT_CHECK_ENABLED_ANY(return);
469 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
471 g_array_append_vals(in_param1, &scan_type, sizeof(int));
473 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_TYPE,
474 in_param1, in_param2, in_param3, in_param4, &out_param);
476 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
481 BT_EXPORT_API int bluetooth_is_advertising(gboolean *is_advertising)
485 BT_CHECK_ENABLED_ANY(return);
488 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
490 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
491 in_param1, in_param2, in_param3, in_param4, &out_param);
493 if (result == BLUETOOTH_ERROR_NONE)
494 *is_advertising = g_array_index(out_param, int, 0);
496 BT_ERR("Fail to send request");
498 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
503 BT_EXPORT_API int bluetooth_add_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
507 BT_CHECK_PARAMETER(address, return);
508 BT_CHECK_ENABLED_ANY(return);
511 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
513 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
514 g_array_append_vals(in_param2, &address_type, sizeof(int));
516 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ADD_WHITE_LIST,
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_remove_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
528 BT_CHECK_PARAMETER(address, return);
529 BT_CHECK_ENABLED_ANY(return);
532 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
534 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
535 g_array_append_vals(in_param2, &address_type, sizeof(int));
537 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_WHITE_LIST,
538 in_param1, in_param2, in_param3, in_param4, &out_param);
540 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
545 BT_EXPORT_API int bluetooth_clear_white_list(void)
549 BT_CHECK_ENABLED_ANY(return);
552 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
554 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_WHITE_LIST,
555 in_param1, in_param2, in_param3, in_param4, &out_param);
557 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
562 BT_EXPORT_API int bluetooth_enable_le_privacy(gboolean enable_privacy)
566 BT_CHECK_ENABLED_ANY(return);
569 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
571 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
573 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
574 in_param1, in_param2, in_param3, in_param4, &out_param);
576 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
581 BT_EXPORT_API int bluetooth_set_le_static_random_address(gboolean enable)
585 BT_CHECK_ENABLED_ANY(return);
588 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
590 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
592 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
593 in_param1, in_param2, in_param3, in_param4, &out_param);
595 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
600 BT_EXPORT_API int bluetooth_check_privilege_advertising_parameter(void)
602 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
603 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
604 BT_ERR("Don't have a privilege to use this API");
605 return BLUETOOTH_ERROR_PERMISSION_DEINED;
608 return BLUETOOTH_ERROR_NONE;
611 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
615 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
616 if (ret != BLUETOOTH_ERROR_NONE &&
617 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
618 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
622 return BLUETOOTH_ERROR_NONE;
625 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
627 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
629 return BLUETOOTH_ERROR_NONE;
632 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
633 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
635 BT_CHECK_ENABLED_ANY(return);
638 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
640 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
642 result = _bt_send_request(BT_BLUEZ_SERVICE,
643 BT_LE_READ_MAXIMUM_DATA_LENGTH,
644 in_param1, in_param2, in_param3, in_param4, &out_param);
646 if (result == BLUETOOTH_ERROR_NONE) {
647 datalength = &g_array_index(out_param,
648 bluetooth_le_read_maximum_data_length_t, 0);
649 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
650 max_le_datalength->max_tx_time = datalength->max_tx_time;
651 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
652 max_le_datalength->max_rx_time = datalength->max_rx_time;
655 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
660 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
661 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
663 BT_CHECK_ENABLED_ANY(return);
668 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
670 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
671 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
673 result = _bt_send_request(BT_BLUEZ_SERVICE,
674 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
675 in_param1, in_param2, in_param3, in_param4, &out_param);
677 if (result != BLUETOOTH_ERROR_NONE)
678 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
680 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
685 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
686 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
688 BT_CHECK_ENABLED_ANY(return);
692 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
693 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
695 result = _bt_send_request(BT_BLUEZ_SERVICE,
696 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
697 in_param1, in_param2, in_param3, in_param4, &out_param);
699 if (result == BLUETOOTH_ERROR_NONE) {
700 data_values = &g_array_index(out_param,
701 bluetooth_le_read_host_suggested_data_length_t, 0);
703 le_data_length->def_tx_octets = data_values->def_tx_octets;
704 le_data_length->def_tx_time = data_values->def_tx_time;
707 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
712 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
713 const unsigned int max_tx_octets, const unsigned int max_tx_time)
715 BT_CHECK_ENABLED_ANY(return);
720 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
722 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
723 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
724 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
726 result = _bt_send_request(BT_BLUEZ_SERVICE,
727 BT_LE_SET_DATA_LENGTH,
728 in_param1, in_param2, in_param3, in_param4, &out_param);
730 if (result != BLUETOOTH_ERROR_NONE)
731 BT_ERR("Failed to Set data length values : %d", result);
733 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
738 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
742 BT_CHECK_PARAMETER(is_supported, return);
743 BT_CHECK_ENABLED_ANY(return);
746 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
748 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
749 in_param1, in_param2, in_param3, in_param4, &out_param);
751 if (result == BLUETOOTH_ERROR_NONE) {
752 *is_supported = g_array_index(out_param, int, 0);
754 BT_ERR("Fail to send request");
757 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
759 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
763 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
767 BT_CHECK_PARAMETER(is_supported, return);
768 BT_CHECK_ENABLED_ANY(return);
771 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
773 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
774 in_param1, in_param2, in_param3, in_param4, &out_param);
776 if (result == BLUETOOTH_ERROR_NONE) {
777 *is_supported = g_array_index(out_param, int, 0);
779 BT_ERR("Fail to send request");
782 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
784 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");