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)
98 BT_CHECK_ENABLED_ANY(return);
101 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
103 g_array_append_vals(in_param1, &uid, sizeof(uid_t));
105 BT_INFO_C("### Start LE scan");
106 _bt_print_api_caller_name();
107 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_LE_DISCOVERY,
108 in_param1, in_param2, in_param3, in_param4, &out_param);
110 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
112 if (result == BLUETOOTH_ERROR_NONE)
113 _bt_set_le_scan_status(TRUE);
118 BT_EXPORT_API int bluetooth_stop_le_discovery(void)
121 uid_t uid = getuid();
123 BT_CHECK_ENABLED_ANY(return);
126 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
128 g_array_append_vals(in_param1, &uid, sizeof(uid_t));
130 BT_INFO_C("### Stop LE scan");
131 _bt_print_api_caller_name();
132 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_STOP_LE_DISCOVERY,
133 in_param1, in_param2, in_param3, in_param4, &out_param);
135 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
137 if (result == BLUETOOTH_ERROR_NONE)
138 _bt_set_le_scan_status(FALSE);
143 BT_EXPORT_API int bluetooth_is_le_discovering(void)
146 int is_discovering = FALSE;
148 BT_CHECK_ENABLED_ANY(return);
151 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
153 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_DISCOVERYING,
154 in_param1, in_param2, in_param3, in_param4, &out_param);
156 if (result == BLUETOOTH_ERROR_NONE) {
157 is_discovering = g_array_index(out_param,
160 BT_ERR("Fail to send request");
163 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
165 return is_discovering;
168 BT_EXPORT_API int bluetooth_is_scan_filter_supported(gboolean *is_supported)
172 BT_CHECK_PARAMETER(is_supported, return);
175 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
177 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SCAN_FILTER_SUPPORTED,
178 in_param1, in_param2, in_param3, in_param4, &out_param);
180 if (result == BLUETOOTH_ERROR_NONE) {
181 *is_supported = g_array_index(out_param, int, 0);
182 BT_INFO("Scan Filter Support[%s]", *is_supported ? "TRUE" : "FALSE");
184 BT_ERR("Fail to send request");
186 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
191 BT_EXPORT_API int bluetooth_register_scan_filter(bluetooth_le_scan_filter_t *filter)
195 BT_CHECK_ENABLED_ANY(return);
198 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
200 g_array_append_vals(in_param1, filter, sizeof(bluetooth_le_scan_filter_t));
202 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REGISTER_SCAN_FILTER,
203 in_param1, in_param2, in_param3, in_param4, &out_param);
205 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
210 gboolean __bluetooth_is_privileged_process(void)
213 char path[30] = {0, };
214 char buf[256] = {0, };
216 snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
217 fp = fopen(path, "r");
221 if (fgets(buf, 256, fp) != NULL) {
222 if (strstr(buf, "weconnd") != NULL) {
232 BT_EXPORT_API int bluetooth_set_advertising(int handle, gboolean enable)
235 gboolean use_reserved_slot = TRUE;
237 BT_CHECK_ENABLED_ANY(return);
239 if (TIZEN_PROFILE_WEARABLE)
240 use_reserved_slot = __bluetooth_is_privileged_process();
242 _bt_print_api_caller_name();
245 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
247 g_array_append_vals(in_param1, &handle, sizeof(int));
248 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
249 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
251 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
252 in_param1, in_param2, in_param3, in_param4, &out_param);
254 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
259 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
260 bluetooth_advertising_params_t *params)
263 gboolean use_reserved_slot = TRUE;
265 BT_CHECK_ENABLED_ANY(return);
267 if (TIZEN_PROFILE_WEARABLE)
268 use_reserved_slot = __bluetooth_is_privileged_process();
270 _bt_print_api_caller_name();
273 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
275 g_array_append_vals(in_param1, &handle, sizeof(int));
276 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
277 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
278 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
280 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
281 in_param1, in_param2, in_param3, in_param4, &out_param);
283 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
288 BT_EXPORT_API int bluetooth_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
293 BT_CHECK_PARAMETER(adv_data, return);
294 BT_CHECK_PARAMETER(length, return);
295 BT_CHECK_ENABLED_ANY(return);
298 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
300 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
301 in_param1, in_param2, in_param3, in_param4, &out_param);
303 if (result == BLUETOOTH_ERROR_NONE) {
304 data = &g_array_index(out_param, guint8, 0);
305 *length = out_param->len;
307 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
308 memcpy(adv_data->data, data, *length);
311 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
316 BT_EXPORT_API int bluetooth_set_advertising_data(int handle, const bluetooth_advertising_data_t *value, int length)
319 gboolean use_reserved_slot = TRUE;
321 BT_CHECK_PARAMETER(value, return);
322 BT_CHECK_ENABLED_ANY(return);
324 if (length > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 3)
325 return BLUETOOTH_ERROR_INVALID_PARAM;
327 if (TIZEN_PROFILE_WEARABLE)
328 use_reserved_slot = __bluetooth_is_privileged_process();
331 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
333 g_array_append_vals(in_param1, &handle, sizeof(int));
334 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
335 g_array_append_vals(in_param3, &length, sizeof(int));
336 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
338 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
339 in_param1, in_param2, in_param3, in_param4, &out_param);
341 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
346 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
351 BT_CHECK_PARAMETER(value, return);
352 BT_CHECK_PARAMETER(length, return);
353 BT_CHECK_ENABLED_ANY(return);
356 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
358 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
359 in_param1, in_param2, in_param3, in_param4, &out_param);
361 if (result == BLUETOOTH_ERROR_NONE) {
362 data = &g_array_index(out_param, guint8, 0);
363 *length = out_param->len;
365 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
366 memcpy(value->data, data, *length);
369 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
374 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
375 const bluetooth_scan_resp_data_t *value, int length)
378 gboolean use_reserved_slot = TRUE;
380 BT_CHECK_PARAMETER(value, return);
381 BT_CHECK_ENABLED_ANY(return);
383 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
384 return BLUETOOTH_ERROR_INVALID_PARAM;
386 if (TIZEN_PROFILE_WEARABLE)
387 use_reserved_slot = __bluetooth_is_privileged_process();
390 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
392 g_array_append_vals(in_param1, &handle, sizeof(int));
393 g_array_append_vals(in_param2, value, length);
394 g_array_append_vals(in_param3, &length, sizeof(int));
395 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
397 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
398 in_param1, in_param2, in_param3, in_param4, &out_param);
400 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
405 BT_EXPORT_API int bluetooth_set_scan_parameters(bluetooth_le_scan_params_t *params)
409 BT_CHECK_ENABLED_ANY(return);
412 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
414 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
416 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
417 in_param1, in_param2, in_param3, in_param4, &out_param);
419 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
424 BT_EXPORT_API int bluetooth_set_scan_type(bluetooth_le_scan_type_t scan_type)
428 BT_CHECK_ENABLED_ANY(return);
431 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
433 g_array_append_vals(in_param1, &scan_type, sizeof(int));
435 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_TYPE,
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_is_advertising(gboolean *is_advertising)
447 BT_CHECK_ENABLED_ANY(return);
450 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
452 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
453 in_param1, in_param2, in_param3, in_param4, &out_param);
455 if (result == BLUETOOTH_ERROR_NONE)
456 *is_advertising = g_array_index(out_param, int, 0);
458 BT_ERR("Fail to send request");
460 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
465 BT_EXPORT_API int bluetooth_add_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
469 BT_CHECK_PARAMETER(address, return);
470 BT_CHECK_ENABLED_ANY(return);
473 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
475 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
476 g_array_append_vals(in_param2, &address_type, sizeof(int));
478 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ADD_WHITE_LIST,
479 in_param1, in_param2, in_param3, in_param4, &out_param);
481 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
486 BT_EXPORT_API int bluetooth_remove_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
490 BT_CHECK_PARAMETER(address, return);
491 BT_CHECK_ENABLED_ANY(return);
494 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
496 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
497 g_array_append_vals(in_param2, &address_type, sizeof(int));
499 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_WHITE_LIST,
500 in_param1, in_param2, in_param3, in_param4, &out_param);
502 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
507 BT_EXPORT_API int bluetooth_clear_white_list(void)
511 BT_CHECK_ENABLED_ANY(return);
514 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
516 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_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_enable_le_privacy(gboolean enable_privacy)
528 BT_CHECK_ENABLED_ANY(return);
531 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
533 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
535 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
536 in_param1, in_param2, in_param3, in_param4, &out_param);
538 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
543 BT_EXPORT_API int bluetooth_set_le_static_random_address(gboolean enable)
547 BT_CHECK_ENABLED_ANY(return);
550 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
552 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
554 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
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_check_privilege_advertising_parameter(void)
564 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
565 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
566 BT_ERR("Don't have a privilege to use this API");
567 return BLUETOOTH_ERROR_PERMISSION_DEINED;
570 return BLUETOOTH_ERROR_NONE;
573 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
577 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
578 if (ret != BLUETOOTH_ERROR_NONE &&
579 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
580 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
584 return BLUETOOTH_ERROR_NONE;
587 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
589 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
591 return BLUETOOTH_ERROR_NONE;
594 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
595 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
597 BT_CHECK_ENABLED_ANY(return);
600 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
602 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
604 result = _bt_send_request(BT_BLUEZ_SERVICE,
605 BT_LE_READ_MAXIMUM_DATA_LENGTH,
606 in_param1, in_param2, in_param3, in_param4, &out_param);
608 if (result == BLUETOOTH_ERROR_NONE) {
609 datalength = &g_array_index(out_param,
610 bluetooth_le_read_maximum_data_length_t, 0);
611 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
612 max_le_datalength->max_tx_time = datalength->max_tx_time;
613 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
614 max_le_datalength->max_rx_time = datalength->max_rx_time;
617 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
622 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
623 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
625 BT_CHECK_ENABLED_ANY(return);
630 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
632 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
633 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
635 result = _bt_send_request(BT_BLUEZ_SERVICE,
636 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
637 in_param1, in_param2, in_param3, in_param4, &out_param);
639 if (result != BLUETOOTH_ERROR_NONE)
640 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
642 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
647 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
648 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
650 BT_CHECK_ENABLED_ANY(return);
654 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
655 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
657 result = _bt_send_request(BT_BLUEZ_SERVICE,
658 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
659 in_param1, in_param2, in_param3, in_param4, &out_param);
661 if (result == BLUETOOTH_ERROR_NONE) {
662 data_values = &g_array_index(out_param,
663 bluetooth_le_read_host_suggested_data_length_t, 0);
665 le_data_length->def_tx_octets = data_values->def_tx_octets;
666 le_data_length->def_tx_time = data_values->def_tx_time;
669 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
674 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
675 const unsigned int max_tx_octets, const unsigned int max_tx_time)
677 BT_CHECK_ENABLED_ANY(return);
682 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
684 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
685 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
686 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
688 result = _bt_send_request(BT_BLUEZ_SERVICE,
689 BT_LE_SET_DATA_LENGTH,
690 in_param1, in_param2, in_param3, in_param4, &out_param);
692 if (result != BLUETOOTH_ERROR_NONE)
693 BT_ERR("Failed to Set data length values : %d", result);
695 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
700 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
704 BT_CHECK_PARAMETER(is_supported, return);
705 BT_CHECK_ENABLED_ANY(return);
708 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
710 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
711 in_param1, in_param2, in_param3, in_param4, &out_param);
713 if (result == BLUETOOTH_ERROR_NONE) {
714 *is_supported = g_array_index(out_param, int, 0);
716 BT_ERR("Fail to send request");
719 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
721 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
725 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
729 BT_CHECK_PARAMETER(is_supported, return);
730 BT_CHECK_ENABLED_ANY(return);
733 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
735 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
736 in_param1, in_param2, in_param3, in_param4, &out_param);
738 if (result == BLUETOOTH_ERROR_NONE) {
739 *is_supported = g_array_index(out_param, int, 0);
741 BT_ERR("Fail to send request");
744 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
746 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");