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", 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 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 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_STOP_LE_DISCOVERY,
126 in_param1, in_param2, in_param3, in_param4, &out_param);
128 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
130 _bt_set_le_scan_status(FALSE);
135 BT_EXPORT_API int bluetooth_is_le_discovering(void)
138 int is_discovering = FALSE;
140 BT_CHECK_ENABLED_ANY(return);
143 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
145 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_DISCOVERYING,
146 in_param1, in_param2, in_param3, in_param4, &out_param);
148 if (result == BLUETOOTH_ERROR_NONE) {
149 is_discovering = g_array_index(out_param,
152 BT_ERR("Fail to send request");
155 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
157 return is_discovering;
160 BT_EXPORT_API gboolean bluetooth_is_scan_filter_supported(void)
164 if (is_scan_filter_supported == -1) {
166 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
168 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SCAN_FILTER_SUPPORTED,
169 in_param1, in_param2, in_param3, in_param4, &out_param);
171 if (result == BLUETOOTH_ERROR_NONE)
172 is_scan_filter_supported = g_array_index(out_param, int, 0);
174 BT_ERR("Fail to send request");
176 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
179 if (is_scan_filter_supported == 1)
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();
278 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
280 g_array_append_vals(in_param1, &handle, sizeof(int));
281 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
282 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
284 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
285 in_param1, in_param2, in_param3, in_param4, &out_param);
287 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
292 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
293 bluetooth_advertising_params_t *params)
296 gboolean use_reserved_slot = TRUE;
298 BT_CHECK_ENABLED_ANY(return);
300 if (TIZEN_PROFILE_WEARABLE)
301 use_reserved_slot = __bluetooth_is_privileged_process();
304 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
306 g_array_append_vals(in_param1, &handle, sizeof(int));
307 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
308 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
309 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
311 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
312 in_param1, in_param2, in_param3, in_param4, &out_param);
314 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
319 BT_EXPORT_API int bluetooth_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
324 BT_CHECK_PARAMETER(adv_data, return);
325 BT_CHECK_PARAMETER(length, return);
326 BT_CHECK_ENABLED_ANY(return);
329 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
331 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
332 in_param1, in_param2, in_param3, in_param4, &out_param);
334 if (result == BLUETOOTH_ERROR_NONE) {
335 data = &g_array_index(out_param, guint8, 0);
336 *length = out_param->len;
338 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
339 memcpy(adv_data->data, data, *length);
342 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
347 BT_EXPORT_API int bluetooth_set_advertising_data(int handle, const bluetooth_advertising_data_t *value, int length)
350 gboolean use_reserved_slot = TRUE;
352 BT_CHECK_PARAMETER(value, return);
353 BT_CHECK_ENABLED_ANY(return);
355 if (length > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 3)
356 return BLUETOOTH_ERROR_INVALID_PARAM;
358 if (TIZEN_PROFILE_WEARABLE)
359 use_reserved_slot = __bluetooth_is_privileged_process();
362 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
364 g_array_append_vals(in_param1, &handle, sizeof(int));
365 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
366 g_array_append_vals(in_param3, &length, sizeof(int));
367 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
369 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
370 in_param1, in_param2, in_param3, in_param4, &out_param);
372 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
377 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
382 BT_CHECK_PARAMETER(value, return);
383 BT_CHECK_PARAMETER(length, return);
384 BT_CHECK_ENABLED_ANY(return);
387 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
389 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
390 in_param1, in_param2, in_param3, in_param4, &out_param);
392 if (result == BLUETOOTH_ERROR_NONE) {
393 data = &g_array_index(out_param, guint8, 0);
394 *length = out_param->len;
396 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
397 memcpy(value->data, data, *length);
400 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
405 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
406 const bluetooth_scan_resp_data_t *value, int length)
409 gboolean use_reserved_slot = TRUE;
411 BT_CHECK_PARAMETER(value, return);
412 BT_CHECK_ENABLED_ANY(return);
414 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
415 return BLUETOOTH_ERROR_INVALID_PARAM;
417 if (TIZEN_PROFILE_WEARABLE)
418 use_reserved_slot = __bluetooth_is_privileged_process();
421 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
423 g_array_append_vals(in_param1, &handle, sizeof(int));
424 g_array_append_vals(in_param2, value, length);
425 g_array_append_vals(in_param3, &length, sizeof(int));
426 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
428 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
429 in_param1, in_param2, in_param3, in_param4, &out_param);
431 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
436 BT_EXPORT_API int bluetooth_set_scan_parameters(bluetooth_le_scan_params_t *params)
440 BT_CHECK_ENABLED_ANY(return);
443 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
445 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
447 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
448 in_param1, in_param2, in_param3, in_param4, &out_param);
450 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
455 BT_EXPORT_API int bluetooth_is_advertising(gboolean *is_advertising)
459 BT_CHECK_ENABLED_ANY(return);
462 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
464 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
465 in_param1, in_param2, in_param3, in_param4, &out_param);
467 if (result == BLUETOOTH_ERROR_NONE)
468 *is_advertising = g_array_index(out_param, int, 0);
470 BT_ERR("Fail to send request");
472 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
477 BT_EXPORT_API int bluetooth_add_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
481 BT_CHECK_PARAMETER(address, return);
482 BT_CHECK_ENABLED_ANY(return);
485 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
487 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
488 g_array_append_vals(in_param2, &address_type, sizeof(int));
490 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ADD_WHITE_LIST,
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_remove_white_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
502 BT_CHECK_PARAMETER(address, return);
503 BT_CHECK_ENABLED_ANY(return);
506 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
508 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
509 g_array_append_vals(in_param2, &address_type, sizeof(int));
511 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_WHITE_LIST,
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_clear_white_list(void)
523 BT_CHECK_ENABLED_ANY(return);
526 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
528 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_WHITE_LIST,
529 in_param1, in_param2, in_param3, in_param4, &out_param);
531 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
536 BT_EXPORT_API int bluetooth_enable_le_privacy(gboolean enable_privacy)
540 BT_CHECK_ENABLED_ANY(return);
543 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
545 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
547 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
548 in_param1, in_param2, in_param3, in_param4, &out_param);
550 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
555 BT_EXPORT_API int bluetooth_set_le_static_random_address(gboolean enable)
559 BT_CHECK_ENABLED_ANY(return);
562 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
564 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
566 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
567 in_param1, in_param2, in_param3, in_param4, &out_param);
569 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
574 BT_EXPORT_API int bluetooth_check_privilege_advertising_parameter(void)
576 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
577 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
578 BT_ERR("Don't have a privilege to use this API");
579 return BLUETOOTH_ERROR_PERMISSION_DEINED;
582 return BLUETOOTH_ERROR_NONE;
585 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
589 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
590 if (ret != BLUETOOTH_ERROR_NONE &&
591 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
592 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
596 return BLUETOOTH_ERROR_NONE;
599 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
601 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
603 return BLUETOOTH_ERROR_NONE;
606 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
607 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
609 BT_CHECK_ENABLED_ANY(return);
612 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
614 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
616 result = _bt_send_request(BT_BLUEZ_SERVICE,
617 BT_LE_READ_MAXIMUM_DATA_LENGTH,
618 in_param1, in_param2, in_param3, in_param4, &out_param);
620 if (result == BLUETOOTH_ERROR_NONE) {
621 datalength = &g_array_index(out_param,
622 bluetooth_le_read_maximum_data_length_t, 0);
623 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
624 max_le_datalength->max_tx_time = datalength->max_tx_time;
625 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
626 max_le_datalength->max_rx_time = datalength->max_rx_time;
629 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
634 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
635 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
637 BT_CHECK_ENABLED_ANY(return);
642 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
644 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
645 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
647 result = _bt_send_request(BT_BLUEZ_SERVICE,
648 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
649 in_param1, in_param2, in_param3, in_param4, &out_param);
651 if (result != BLUETOOTH_ERROR_NONE)
652 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
654 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
659 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
660 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
662 BT_CHECK_ENABLED_ANY(return);
666 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
667 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
669 result = _bt_send_request(BT_BLUEZ_SERVICE,
670 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
671 in_param1, in_param2, in_param3, in_param4, &out_param);
673 if (result == BLUETOOTH_ERROR_NONE) {
674 data_values = &g_array_index(out_param,
675 bluetooth_le_read_host_suggested_data_length_t, 0);
677 le_data_length->def_tx_octets = data_values->def_tx_octets;
678 le_data_length->def_tx_time = data_values->def_tx_time;
681 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
686 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
687 const unsigned int max_tx_octets, const unsigned int max_tx_time)
689 BT_CHECK_ENABLED_ANY(return);
694 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
696 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
697 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
698 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
700 result = _bt_send_request(BT_BLUEZ_SERVICE,
701 BT_LE_SET_DATA_LENGTH,
702 in_param1, in_param2, in_param3, in_param4, &out_param);
704 if (result != BLUETOOTH_ERROR_NONE)
705 BT_ERR("Failed to Set data length values : %d", result);
707 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
712 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
716 BT_CHECK_PARAMETER(is_supported, return);
717 BT_CHECK_ENABLED_ANY(return);
720 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
722 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
723 in_param1, in_param2, in_param3, in_param4, &out_param);
725 if (result == BLUETOOTH_ERROR_NONE) {
726 *is_supported = g_array_index(out_param, int, 0);
728 BT_ERR("Fail to send request");
731 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
733 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
737 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
741 BT_CHECK_PARAMETER(is_supported, return);
742 BT_CHECK_ENABLED_ANY(return);
745 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
747 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
748 in_param1, in_param2, in_param3, in_param4, &out_param);
750 if (result == BLUETOOTH_ERROR_NONE) {
751 *is_supported = g_array_index(out_param, int, 0);
753 BT_ERR("Fail to send request");
756 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
758 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");