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)
32 #ifndef TIZEN_BLUEDROID_PORTING
34 ret = _bt_get_adapter_path(_bt_get_system_common_conn(), NULL);
35 return ret == BLUETOOTH_ERROR_NONE ? BLUETOOTH_ADAPTER_ENABLED :
36 BLUETOOTH_ADAPTER_DISABLED;
38 int value = VCONFKEY_BT_LE_STATUS_OFF;
40 ret = vconf_get_int(VCONFKEY_BT_LE_STATUS, &value);
42 BT_ERR("fail to get vconf key!");
43 return BLUETOOTH_ADAPTER_LE_DISABLED;
46 BT_DBG("value : %d", value);
47 return value == VCONFKEY_BT_LE_STATUS_ON ? BLUETOOTH_ADAPTER_LE_ENABLED :
48 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)
99 BT_CHECK_ENABLED_ANY(return);
102 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
104 g_array_append_vals(in_param1, &uid, sizeof(uid_t));
106 BT_INFO_C("### Start LE scan");
107 _bt_print_api_caller_name();
108 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_LE_DISCOVERY,
109 in_param1, in_param2, in_param3, in_param4, &out_param);
111 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
113 if (result == BLUETOOTH_ERROR_NONE)
114 _bt_set_le_scan_status(TRUE);
119 BT_EXPORT_API int bluetooth_set_le_scan_phy(bleutooth_le_scanning_phy_t phy)
123 BT_CHECK_ENABLED_ANY(return);
126 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
128 _bt_print_api_caller_name();
130 g_array_append_vals(in_param1, &phy, sizeof(int));
132 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCANNING_PHY,
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);
140 BT_EXPORT_API int bluetooth_set_le_scan_role(bluetooth_le_scan_role_t role)
144 BT_CHECK_ENABLED_ANY(return);
147 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
149 _bt_print_api_caller_name();
151 g_array_append_vals(in_param1, &role, sizeof(int));
153 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCANNING_ROLE,
154 in_param1, in_param2, in_param3, in_param4, &out_param);
156 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
161 BT_EXPORT_API int bluetooth_stop_le_discovery(void)
164 uid_t uid = getuid();
166 BT_CHECK_ENABLED_ANY(return);
169 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
171 g_array_append_vals(in_param1, &uid, sizeof(uid_t));
173 BT_INFO_C("### Stop LE scan");
174 _bt_print_api_caller_name();
175 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_STOP_LE_DISCOVERY,
176 in_param1, in_param2, in_param3, in_param4, &out_param);
178 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
180 if (result == BLUETOOTH_ERROR_NONE)
181 _bt_set_le_scan_status(FALSE);
186 BT_EXPORT_API int bluetooth_is_le_discovering(void)
189 int is_discovering = FALSE;
191 BT_CHECK_ENABLED_ANY(return);
194 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
196 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_DISCOVERYING,
197 in_param1, in_param2, in_param3, in_param4, &out_param);
199 if (result == BLUETOOTH_ERROR_NONE) {
200 is_discovering = g_array_index(out_param,
203 BT_ERR("Fail to send request");
206 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
208 return is_discovering;
211 BT_EXPORT_API int bluetooth_is_scan_filter_supported(gboolean *is_supported)
215 BT_CHECK_PARAMETER(is_supported, return);
218 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
220 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SCAN_FILTER_SUPPORTED,
221 in_param1, in_param2, in_param3, in_param4, &out_param);
223 if (result == BLUETOOTH_ERROR_NONE) {
224 *is_supported = g_array_index(out_param, int, 0);
225 BT_INFO("Scan Filter Support[%s]", *is_supported ? "TRUE" : "FALSE");
227 BT_ERR("Fail to send request");
229 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
234 BT_EXPORT_API int bluetooth_register_scan_filter(bluetooth_le_scan_filter_t *filter)
238 BT_CHECK_ENABLED_ANY(return);
241 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
243 g_array_append_vals(in_param1, filter, sizeof(bluetooth_le_scan_filter_t));
245 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REGISTER_SCAN_FILTER,
246 in_param1, in_param2, in_param3, in_param4, &out_param);
248 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
253 gboolean __bluetooth_is_privileged_process(void)
256 char path[30] = {0, };
257 char buf[256] = {0, };
259 snprintf(path, sizeof(path), "/proc/%d/cmdline", getpid());
260 fp = fopen(path, "r");
264 if (fgets(buf, 256, fp) != NULL) {
265 if (strstr(buf, "weconnd") != NULL) {
275 BT_EXPORT_API int bluetooth_set_advertising(int handle, gboolean enable)
278 gboolean use_reserved_slot = TRUE;
280 BT_CHECK_ENABLED_ANY(return);
282 if (TIZEN_PROFILE_WEARABLE)
283 use_reserved_slot = __bluetooth_is_privileged_process();
285 _bt_print_api_caller_name();
288 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
290 g_array_append_vals(in_param1, &handle, sizeof(int));
291 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
292 g_array_append_vals(in_param3, &use_reserved_slot, sizeof(gboolean));
294 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING,
295 in_param1, in_param2, in_param3, in_param4, &out_param);
297 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
302 BT_EXPORT_API int bluetooth_set_custom_advertising(int handle, gboolean enable,
303 bluetooth_advertising_params_t *params)
306 gboolean use_reserved_slot = TRUE;
308 BT_CHECK_ENABLED_ANY(return);
310 if (TIZEN_PROFILE_WEARABLE)
311 use_reserved_slot = __bluetooth_is_privileged_process();
313 _bt_print_api_caller_name();
316 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
318 g_array_append_vals(in_param1, &handle, sizeof(int));
319 g_array_append_vals(in_param2, &enable, sizeof(gboolean));
320 g_array_append_vals(in_param3, params, sizeof(bluetooth_advertising_params_t));
321 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
323 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CUSTOM_ADVERTISING,
324 in_param1, in_param2, in_param3, in_param4, &out_param);
326 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
331 BT_EXPORT_API int bluetooth_get_advertising_data(bluetooth_advertising_data_t *adv_data, int *length)
336 BT_CHECK_PARAMETER(adv_data, return);
337 BT_CHECK_PARAMETER(length, return);
338 BT_CHECK_ENABLED_ANY(return);
341 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
343 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_ADVERTISING_DATA,
344 in_param1, in_param2, in_param3, in_param4, &out_param);
346 if (result == BLUETOOTH_ERROR_NONE) {
347 data = &g_array_index(out_param, guint8, 0);
348 *length = out_param->len;
350 memset(adv_data, 0x00, sizeof(bluetooth_advertising_data_t));
351 memcpy(adv_data->data, data, *length);
354 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
359 BT_EXPORT_API int bluetooth_set_advertising_data(int handle,
360 const bluetooth_advertising_data_t *value, int length , bool is_legacy)
364 bluetooth_le_slot_and_adv_type_t rs_at;
365 rs_at.is_legacy = is_legacy;
366 rs_at.use_reserved_slot = TRUE;
368 int max_adv_data_len = BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX;
369 /* TODO : Change to following once LE EXTENDED feature is supported
370 int max_adv_data_len = is_legacy ? BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX : BLUETOOTH_EXTENDED_ADVERTISING_DATA_LENGTH_MAX; */
372 BT_CHECK_PARAMETER(value, return);
373 BT_CHECK_ENABLED_ANY(return);
376 BT_ERR("Invalid handle value: %d", handle);
377 return BLUETOOTH_ERROR_INVALID_PARAM;
380 if (length > max_adv_data_len- 3)
381 return BLUETOOTH_ERROR_INVALID_PARAM;
383 if (TIZEN_PROFILE_WEARABLE)
384 rs_at.use_reserved_slot = __bluetooth_is_privileged_process();
387 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
389 g_array_append_vals(in_param1, &handle, sizeof(int));
390 g_array_append_vals(in_param2, value, sizeof(bluetooth_advertising_data_t));
391 g_array_append_vals(in_param3, &length, sizeof(int));
392 g_array_append_vals(in_param4, &rs_at, sizeof(bluetooth_le_slot_and_adv_type_t));
394 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ADVERTISING_DATA,
395 in_param1, in_param2, in_param3, in_param4, &out_param);
397 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
402 BT_EXPORT_API int bluetooth_get_scan_response_data(bluetooth_scan_resp_data_t *value, int *length)
407 BT_CHECK_PARAMETER(value, return);
408 BT_CHECK_PARAMETER(length, return);
409 BT_CHECK_ENABLED_ANY(return);
412 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
414 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SCAN_RESPONSE_DATA,
415 in_param1, in_param2, in_param3, in_param4, &out_param);
417 if (result == BLUETOOTH_ERROR_NONE) {
418 data = &g_array_index(out_param, guint8, 0);
419 *length = out_param->len;
421 memset(value, 0x00, sizeof(bluetooth_scan_resp_data_t));
422 memcpy(value->data, data, *length);
425 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
430 BT_EXPORT_API int bluetooth_set_scan_response_data(int handle,
431 const bluetooth_scan_resp_data_t *value, int length)
434 gboolean use_reserved_slot = TRUE;
436 BT_CHECK_PARAMETER(value, return);
437 BT_CHECK_ENABLED_ANY(return);
439 if (length > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX)
440 return BLUETOOTH_ERROR_INVALID_PARAM;
442 if (TIZEN_PROFILE_WEARABLE)
443 use_reserved_slot = __bluetooth_is_privileged_process();
446 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
448 g_array_append_vals(in_param1, &handle, sizeof(int));
449 g_array_append_vals(in_param2, value, length);
450 g_array_append_vals(in_param3, &length, sizeof(int));
451 g_array_append_vals(in_param4, &use_reserved_slot, sizeof(gboolean));
453 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_RESPONSE_DATA,
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_set_scan_parameters(bluetooth_le_scan_params_t *params)
465 BT_CHECK_ENABLED_ANY(return);
468 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
470 g_array_append_vals(in_param1, params, sizeof(bluetooth_le_scan_params_t));
472 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_PARAMETERS,
473 in_param1, in_param2, in_param3, in_param4, &out_param);
475 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
480 BT_EXPORT_API int bluetooth_set_scan_type(bluetooth_le_scan_type_t scan_type)
484 BT_CHECK_ENABLED_ANY(return);
487 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
489 g_array_append_vals(in_param1, &scan_type, sizeof(int));
491 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SCAN_TYPE,
492 in_param1, in_param2, in_param3, in_param4, &out_param);
494 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
499 BT_EXPORT_API int bluetooth_is_advertising(gboolean *is_advertising)
503 BT_CHECK_ENABLED_ANY(return);
506 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
508 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_ADVERTISING,
509 in_param1, in_param2, in_param3, in_param4, &out_param);
511 if (result == BLUETOOTH_ERROR_NONE)
512 *is_advertising = g_array_index(out_param, int, 0);
514 BT_ERR("Fail to send request");
516 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
521 BT_EXPORT_API int bluetooth_add_allow_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_ADD_ALLOW_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_remove_allow_list(bluetooth_device_address_t *address, bluetooth_device_address_type_t address_type)
546 BT_CHECK_PARAMETER(address, return);
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, address, sizeof(bluetooth_device_address_t));
553 g_array_append_vals(in_param2, &address_type, sizeof(int));
555 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_REMOVE_ALLOW_LIST,
556 in_param1, in_param2, in_param3, in_param4, &out_param);
558 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
563 BT_EXPORT_API int bluetooth_clear_allow_list(void)
567 BT_CHECK_ENABLED_ANY(return);
570 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
572 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CLEAR_ALLOW_LIST,
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_enable_le_privacy(gboolean enable_privacy)
584 BT_CHECK_ENABLED_ANY(return);
587 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
589 g_array_append_vals(in_param1, &enable_privacy, sizeof(gboolean));
591 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_PRIVACY,
592 in_param1, in_param2, in_param3, in_param4, &out_param);
594 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
599 BT_EXPORT_API int bluetooth_set_le_static_random_address(gboolean enable)
603 BT_CHECK_ENABLED_ANY(return);
606 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
608 g_array_append_vals(in_param1, &enable, sizeof(gboolean));
610 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LE_STATIC_RANDOM_ADDRESS,
611 in_param1, in_param2, in_param3, in_param4, &out_param);
613 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
618 BT_EXPORT_API int bluetooth_check_privilege_advertising_parameter(void)
620 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SET_ADVERTISING_PARAMETERS)
621 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
622 BT_ERR("Don't have a privilege to use this API");
623 return BLUETOOTH_ERROR_PERMISSION_DEINED;
626 return BLUETOOTH_ERROR_NONE;
629 BT_EXPORT_API int bluetooth_le_register_callback(bluetooth_cb_func_ptr callback_ptr, void *user_data)
633 ret = _bt_register_event(BT_LE_ADAPTER_EVENT, (void *)callback_ptr, user_data);
634 if (ret != BLUETOOTH_ERROR_NONE &&
635 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
636 BT_ERR("Fail to register BT_LE_ADAPTER_EVENT event : %d", ret);
640 return BLUETOOTH_ERROR_NONE;
643 BT_EXPORT_API int bluetooth_le_unregister_callback(void)
645 _bt_unregister_event(BT_LE_ADAPTER_EVENT);
647 return BLUETOOTH_ERROR_NONE;
650 BT_EXPORT_API int bluetooth_le_read_maximum_data_length(
651 bluetooth_le_read_maximum_data_length_t *max_le_datalength)
653 BT_CHECK_ENABLED_ANY(return);
656 bluetooth_le_read_maximum_data_length_t *datalength = NULL;
658 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
660 result = _bt_send_request(BT_BLUEZ_SERVICE,
661 BT_LE_READ_MAXIMUM_DATA_LENGTH,
662 in_param1, in_param2, in_param3, in_param4, &out_param);
664 if (result == BLUETOOTH_ERROR_NONE) {
665 datalength = &g_array_index(out_param,
666 bluetooth_le_read_maximum_data_length_t, 0);
667 max_le_datalength->max_tx_octets = datalength->max_tx_octets;
668 max_le_datalength->max_tx_time = datalength->max_tx_time;
669 max_le_datalength->max_rx_octets = datalength->max_rx_octets;
670 max_le_datalength->max_rx_time = datalength->max_rx_time;
673 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
678 BT_EXPORT_API int bluetooth_le_write_host_suggested_default_data_length(
679 const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
681 BT_CHECK_ENABLED_ANY(return);
686 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
688 g_array_append_vals(in_param1, &def_tx_Octets, sizeof(guint));
689 g_array_append_vals(in_param2, &def_tx_Time, sizeof(guint));
691 result = _bt_send_request(BT_BLUEZ_SERVICE,
692 BT_LE_WRITE_HOST_SUGGESTED_DATA_LENGTH,
693 in_param1, in_param2, in_param3, in_param4, &out_param);
695 if (result != BLUETOOTH_ERROR_NONE)
696 BT_ERR("Failed to Write the host suggested default data length values : %d", result);
698 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
703 BT_EXPORT_API int bluetooth_le_read_suggested_default_data_length(
704 bluetooth_le_read_host_suggested_data_length_t *le_data_length)
706 BT_CHECK_ENABLED_ANY(return);
710 bluetooth_le_read_host_suggested_data_length_t *data_values = NULL;
711 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
713 result = _bt_send_request(BT_BLUEZ_SERVICE,
714 BT_LE_READ_HOST_SUGGESTED_DATA_LENGTH,
715 in_param1, in_param2, in_param3, in_param4, &out_param);
717 if (result == BLUETOOTH_ERROR_NONE) {
718 data_values = &g_array_index(out_param,
719 bluetooth_le_read_host_suggested_data_length_t, 0);
721 le_data_length->def_tx_octets = data_values->def_tx_octets;
722 le_data_length->def_tx_time = data_values->def_tx_time;
725 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
730 BT_EXPORT_API int bluetooth_le_set_data_length(bluetooth_device_address_t *address,
731 const unsigned int max_tx_octets, const unsigned int max_tx_time)
733 BT_CHECK_ENABLED_ANY(return);
738 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
740 g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
741 g_array_append_vals(in_param2, &max_tx_octets, sizeof(guint));
742 g_array_append_vals(in_param3, &max_tx_time, sizeof(guint));
744 result = _bt_send_request(BT_BLUEZ_SERVICE,
745 BT_LE_SET_DATA_LENGTH,
746 in_param1, in_param2, in_param3, in_param4, &out_param);
748 if (result != BLUETOOTH_ERROR_NONE)
749 BT_ERR("Failed to Set data length values : %d", result);
751 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
756 BT_EXPORT_API int bluetooth_is_le_2m_phy_supported(gboolean *is_supported)
760 BT_CHECK_PARAMETER(is_supported, return);
761 BT_CHECK_ENABLED_ANY(return);
764 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
766 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_2M_PHY_SUPPORTED,
767 in_param1, in_param2, in_param3, in_param4, &out_param);
769 if (result == BLUETOOTH_ERROR_NONE) {
770 *is_supported = g_array_index(out_param, int, 0);
772 BT_ERR("Fail to send request");
775 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
777 BT_INFO("LE 2M PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
781 BT_EXPORT_API int bluetooth_is_le_coded_phy_supported(gboolean *is_supported)
785 BT_CHECK_PARAMETER(is_supported, return);
786 BT_CHECK_ENABLED_ANY(return);
789 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
791 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_CODED_PHY_SUPPORTED,
792 in_param1, in_param2, in_param3, in_param4, &out_param);
794 if (result == BLUETOOTH_ERROR_NONE) {
795 *is_supported = g_array_index(out_param, int, 0);
797 BT_ERR("Fail to send request");
800 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
802 BT_INFO("LE CODED PHY Support[%s]", *is_supported ? "TRUE" : "FALSE");
806 BT_EXPORT_API int bluetooth_is_le_extended_advertising_supported(gboolean *is_supported)
810 BT_CHECK_PARAMETER(is_supported, return);
811 BT_CHECK_ENABLED_ANY(return);
814 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
816 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_EXTENDED_ADVERTISING_SUPPORTED,
817 in_param1, in_param2, in_param3, in_param4, &out_param);
819 if (result == BLUETOOTH_ERROR_NONE) {
820 *is_supported = g_array_index(out_param, int, 0);
822 BT_ERR("Fail to send request");
825 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
827 BT_INFO("LE Extended Advertising Support[%s]", *is_supported ? "TRUE" : "FALSE");
831 BT_EXPORT_API int bluetooth_is_le_extended_scan_supported(gboolean *is_supported)
835 BT_CHECK_PARAMETER(is_supported, return);
836 BT_CHECK_ENABLED_ANY(return);
839 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
841 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_LE_EXTENDED_SCAN_SUPPORTED,
842 in_param1, in_param2, in_param3, in_param4, &out_param);
844 if (result == BLUETOOTH_ERROR_NONE) {
845 *is_supported = g_array_index(out_param, int, 0);
847 BT_ERR("Fail to send request");
850 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
852 BT_INFO("LE Extended Scan Support[%s]", *is_supported ? "TRUE" : "FALSE");
856 BT_EXPORT_API int bluetooth_le_get_maximum_advertising_data_length(gint *data_length)
860 BT_CHECK_PARAMETER(data_length, return);
861 BT_CHECK_ENABLED_ANY(return);
864 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
866 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_MAX_ADVERTISING_DATA_LEN,
867 in_param1, in_param2, in_param3, in_param4, &out_param);
869 if (result == BLUETOOTH_ERROR_NONE) {
870 *data_length = g_array_index(out_param, int, 0);
872 BT_ERR("Fail to send request");
875 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
877 BT_INFO("LE Max Advertising Data Length [%d]", *data_length);