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 _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 gboolean bluetooth_is_scan_filter_supported(void)
166 if (is_scan_filter_supported == -1) {
168 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
170 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SCAN_FILTER_SUPPORTED,
171 in_param1, in_param2, in_param3, in_param4, &out_param);
173 if (result == BLUETOOTH_ERROR_NONE)
174 is_scan_filter_supported = g_array_index(out_param, int, 0);
176 BT_ERR("Fail to send request");
178 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
181 if (is_scan_filter_supported == 1)
187 BT_EXPORT_API int bluetooth_register_scan_filter(bluetooth_le_scan_filter_t *filter, int *slot_id)
191 BT_CHECK_ENABLED_ANY(return);
194 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
196 g_array_append_vals(in_param1, filter, sizeof(bluetooth_le_scan_filter_t));
198 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REGISTER_SCAN_FILTER,
199 in_param1, in_param2, in_param3, in_param4, &out_param);
201 if (result == BLUETOOTH_ERROR_NONE)
202 *slot_id = g_array_index(out_param, int, 0);
204 BT_ERR("Fail to send request");
206 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
211 BT_EXPORT_API int bluetooth_unregister_scan_filter(int slot_id)
215 BT_CHECK_ENABLED_ANY(return);
218 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
220 g_array_append_vals(in_param1, &slot_id, sizeof(int));
222 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_SCAN_FILTER,
223 in_param1, in_param2, in_param3, in_param4, &out_param);
225 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
230 BT_EXPORT_API int bluetooth_unregister_all_scan_filters(void)
234 BT_CHECK_ENABLED_ANY(return);
237 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
239 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_UNREGISTER_ALL_SCAN_FILTERS,
240 in_param1, in_param2, in_param3, in_param4, &out_param);
242 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
247 gboolean __bluetooth_is_privileged_process(void)
250 char path[30] = {0, };
251 char buf[256] = {0, };
253 snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
254 fp = fopen(path, "r");
258 if (fgets(buf, 256, fp) != NULL) {
259 if (strstr(buf, "weconnd") != NULL) {
269 BT_EXPORT_API int bluetooth_set_advertising(int handle, gboolean enable)
272 gboolean use_reserved_slot = TRUE;
274 BT_CHECK_ENABLED_ANY(return);
276 if (TIZEN_PROFILE_WEARABLE)
277 use_reserved_slot = __bluetooth_is_privileged_process();
279 _bt_print_api_caller_name();
282 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
284 g_array_append_vals(in_param1, &handle, sizeof(int));
285 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
286 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
288 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
289 in_param1, in_param2, in_param3, in_param4, &out_param);
291 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
296 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
297 bluetooth_advertising_params_t *params)
300 gboolean use_reserved_slot = TRUE;
302 BT_CHECK_ENABLED_ANY(return);
304 if (TIZEN_PROFILE_WEARABLE)
305 use_reserved_slot = __bluetooth_is_privileged_process();
307 _bt_print_api_caller_name();
310 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
312 g_array_append_vals(in_param1, &handle, sizeof(int));
313 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
314 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
315 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
317 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
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_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
330 BT_CHECK_PARAMETER(adv_data, return);
331 BT_CHECK_PARAMETER(length, return);
332 BT_CHECK_ENABLED_ANY(return);
335 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
337 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
338 in_param1, in_param2, in_param3, in_param4, &out_param);
340 if (result == BLUETOOTH_ERROR_NONE) {
341 data = &g_array_index(out_param, guint8, 0);
342 *length = out_param->len;
344 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
345 memcpy(adv_data->data, data, *length);
348 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
353 BT_EXPORT_API int bluetooth_set_advertising_data(int handle, const bluetooth_advertising_data_t *value, int length)
356 gboolean use_reserved_slot = TRUE;
358 BT_CHECK_PARAMETER(value, return);
359 BT_CHECK_ENABLED_ANY(return);
361 if (length > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 3)
362 return BLUETOOTH_ERROR_INVALID_PARAM;
364 if (TIZEN_PROFILE_WEARABLE)
365 use_reserved_slot = __bluetooth_is_privileged_process();
368 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
370 g_array_append_vals(in_param1, &handle, sizeof(int));
371 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
372 g_array_append_vals(in_param3, &length, sizeof(int));
373 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
375 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
376 in_param1, in_param2, in_param3, in_param4, &out_param);
378 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
383 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
388 BT_CHECK_PARAMETER(value, return);
389 BT_CHECK_PARAMETER(length, return);
390 BT_CHECK_ENABLED_ANY(return);
393 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
395 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
396 in_param1, in_param2, in_param3, in_param4, &out_param);
398 if (result == BLUETOOTH_ERROR_NONE) {
399 data = &g_array_index(out_param, guint8, 0);
400 *length = out_param->len;
402 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
403 memcpy(value->data, data, *length);
406 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
411 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
412 const bluetooth_scan_resp_data_t *value, int length)
415 gboolean use_reserved_slot = TRUE;
417 BT_CHECK_PARAMETER(value, return);
418 BT_CHECK_ENABLED_ANY(return);
420 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
421 return BLUETOOTH_ERROR_INVALID_PARAM;
423 if (TIZEN_PROFILE_WEARABLE)
424 use_reserved_slot = __bluetooth_is_privileged_process();
427 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
429 g_array_append_vals(in_param1, &handle, sizeof(int));
430 g_array_append_vals(in_param2, value, length);
431 g_array_append_vals(in_param3, &length, sizeof(int));
432 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
434 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
435 in_param1, in_param2, in_param3, in_param4, &out_param);
437 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
442 BT_EXPORT_API int bluetooth_set_scan_parameters(bluetooth_le_scan_params_t *params)
446 BT_CHECK_ENABLED_ANY(return);
449 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
451 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
453 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
454 in_param1, in_param2, in_param3, in_param4, &out_param);
456 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
461 BT_EXPORT_API int bluetooth_is_advertising(gboolean *is_advertising)
465 BT_CHECK_ENABLED_ANY(return);
468 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
470 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
471 in_param1, in_param2, in_param3, in_param4, &out_param);
473 if (result == BLUETOOTH_ERROR_NONE)
474 *is_advertising = g_array_index(out_param, int, 0);
476 BT_ERR("Fail to send request");
478 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
483 BT_EXPORT_API int bluetooth_add_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
487 BT_CHECK_PARAMETER(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, address, sizeof(bluetooth_device_address_t));
494 g_array_append_vals(in_param2, &address_type, sizeof(int));
496 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ADD_WHITE_LIST,
497 in_param1, in_param2, in_param3, in_param4, &out_param);
499 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
504 BT_EXPORT_API int bluetooth_remove_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
508 BT_CHECK_PARAMETER(address, return);
509 BT_CHECK_ENABLED_ANY(return);
512 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
514 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
515 g_array_append_vals(in_param2, &address_type, sizeof(int));
517 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_WHITE_LIST,
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);
525 BT_EXPORT_API int bluetooth_clear_white_list(void)
529 BT_CHECK_ENABLED_ANY(return);
532 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
534 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_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_enable_le_privacy(gboolean enable_privacy)
546 BT_CHECK_ENABLED_ANY(return);
549 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
551 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
553 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
554 in_param1, in_param2, in_param3, in_param4, &out_param);
556 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
561 BT_EXPORT_API int bluetooth_set_le_static_random_address(gboolean enable)
565 BT_CHECK_ENABLED_ANY(return);
568 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
570 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
572 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
573 in_param1, in_param2, in_param3, in_param4, &out_param);
575 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
580 BT_EXPORT_API int bluetooth_check_privilege_advertising_parameter(void)
582 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
583 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
584 BT_ERR("Don't have a privilege to use this API");
585 return BLUETOOTH_ERROR_PERMISSION_DEINED;
588 return BLUETOOTH_ERROR_NONE;
591 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
595 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
596 if (ret != BLUETOOTH_ERROR_NONE &&
597 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
598 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
602 return BLUETOOTH_ERROR_NONE;
605 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
607 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
609 return BLUETOOTH_ERROR_NONE;
612 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
613 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
615 BT_CHECK_ENABLED_ANY(return);
618 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
620 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
622 result = _bt_send_request(BT_BLUEZ_SERVICE,
623 BT_LE_READ_MAXIMUM_DATA_LENGTH,
624 in_param1, in_param2, in_param3, in_param4, &out_param);
626 if (result == BLUETOOTH_ERROR_NONE) {
627 datalength = &g_array_index(out_param,
628 bluetooth_le_read_maximum_data_length_t, 0);
629 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
630 max_le_datalength->max_tx_time = datalength->max_tx_time;
631 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
632 max_le_datalength->max_rx_time = datalength->max_rx_time;
635 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
640 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
641 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
643 BT_CHECK_ENABLED_ANY(return);
648 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
650 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
651 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
653 result = _bt_send_request(BT_BLUEZ_SERVICE,
654 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
655 in_param1, in_param2, in_param3, in_param4, &out_param);
657 if (result != BLUETOOTH_ERROR_NONE)
658 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
660 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
665 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
666 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
668 BT_CHECK_ENABLED_ANY(return);
672 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
673 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
675 result = _bt_send_request(BT_BLUEZ_SERVICE,
676 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
677 in_param1, in_param2, in_param3, in_param4, &out_param);
679 if (result == BLUETOOTH_ERROR_NONE) {
680 data_values = &g_array_index(out_param,
681 bluetooth_le_read_host_suggested_data_length_t, 0);
683 le_data_length->def_tx_octets = data_values->def_tx_octets;
684 le_data_length->def_tx_time = data_values->def_tx_time;
687 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
692 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
693 const unsigned int max_tx_octets, const unsigned int max_tx_time)
695 BT_CHECK_ENABLED_ANY(return);
700 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
702 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
703 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
704 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
706 result = _bt_send_request(BT_BLUEZ_SERVICE,
707 BT_LE_SET_DATA_LENGTH,
708 in_param1, in_param2, in_param3, in_param4, &out_param);
710 if (result != BLUETOOTH_ERROR_NONE)
711 BT_ERR("Failed to Set data length values : %d", result);
713 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
718 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
722 BT_CHECK_PARAMETER(is_supported, return);
723 BT_CHECK_ENABLED_ANY(return);
726 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
728 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
729 in_param1, in_param2, in_param3, in_param4, &out_param);
731 if (result == BLUETOOTH_ERROR_NONE) {
732 *is_supported = g_array_index(out_param, int, 0);
734 BT_ERR("Fail to send request");
737 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
739 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
743 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
747 BT_CHECK_PARAMETER(is_supported, return);
748 BT_CHECK_ENABLED_ANY(return);
751 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
753 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
754 in_param1, in_param2, in_param3, in_param4, &out_param);
756 if (result == BLUETOOTH_ERROR_NONE) {
757 *is_supported = g_array_index(out_param, int, 0);
759 BT_ERR("Fail to send request");
762 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
764 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");