4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hocheol Seo <hocheol.seo@samsung.com>
7 * Girishashok Joshi <girish.joshi@samsung.com>
8 * Chanyeol Park <chanyeol.park@samsung.com>
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
25 #if !defined(LIBNOTIFY_SUPPORT) && !defined(LIBNOTIFICATION_SUPPORT)
26 #include <syspopup_caller.h>
29 #include "bluetooth-api.h"
30 #include "bt-internal-types.h"
32 #include "bt-common.h"
33 #include "bt-request-sender.h"
34 #include "bt-event-handler.h"
36 static int __bt_fill_device_list(GArray *out_param2, GPtrArray **dev_list)
40 bluetooth_device_info_t info;
42 BT_CHECK_PARAMETER(out_param2, return);
43 BT_CHECK_PARAMETER(dev_list, return);
45 size = out_param2->len;
48 BT_ERR("No bonded device");
49 return BLUETOOTH_ERROR_NONE;
52 size = (out_param2->len) / sizeof(bluetooth_device_info_t);
54 for (i = 0; i < size; i++) {
55 bluetooth_device_info_t *dev_info = NULL;
57 info = g_array_index(out_param2,
58 bluetooth_device_info_t, i);
60 dev_info = g_memdup(&info, sizeof(bluetooth_device_info_t));
63 g_ptr_array_add(*dev_list, (gpointer)dev_info);
67 return BLUETOOTH_ERROR_NONE;
70 BT_EXPORT_API int bluetooth_check_adapter(void)
75 ret = _bt_get_adapter_path(_bt_gdbus_get_system_gconn(), NULL);
77 if (ret != BLUETOOTH_ERROR_NONE) {
78 BT_ERR("error in get adapter ");
79 return BLUETOOTH_ADAPTER_DISABLED;
82 /* check VCONFKEY_BT_STATUS */
83 if (vconf_get_int(VCONFKEY_BT_STATUS, &value) != 0) {
84 BT_ERR("fail to get vconf key! return disabled");
85 return BLUETOOTH_ADAPTER_DISABLED;
88 BT_ERR("get status from vconf key \n");
90 return value == VCONFKEY_BT_STATUS_OFF ? BLUETOOTH_ADAPTER_DISABLED :
91 BLUETOOTH_ADAPTER_ENABLED;
94 BT_EXPORT_API int bluetooth_enable_adapter(void)
99 retv_if(bluetooth_check_adapter() == BLUETOOTH_ADAPTER_ENABLED,
100 BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED);
103 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
105 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_ADAPTER,
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);
113 BT_EXPORT_API int bluetooth_disable_adapter(void)
119 BT_CHECK_ENABLED(return);
122 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
124 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_ADAPTER,
125 in_param1, in_param2, in_param3, in_param4, &out_param);
127 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
132 BT_EXPORT_API int bluetooth_recover_adapter(void)
137 BT_CHECK_ENABLED(return);
140 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
142 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_RECOVER_ADAPTER,
143 in_param1, in_param2, in_param3, in_param4, &out_param);
145 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
150 BT_EXPORT_API int bluetooth_reset_adapter(void)
156 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
158 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_RESET_ADAPTER,
159 in_param1, in_param2, in_param3, in_param4, &out_param);
161 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
166 BT_EXPORT_API int bluetooth_get_local_address(bluetooth_device_address_t *local_address)
170 BT_CHECK_PARAMETER(local_address, return);
173 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
175 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_ADDRESS,
176 in_param1, in_param2, in_param3, in_param4, &out_param);
178 if (result == BLUETOOTH_ERROR_NONE) {
179 *local_address = g_array_index(out_param,
180 bluetooth_device_address_t, 0);
183 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
188 BT_EXPORT_API int bluetooth_get_local_version(bluetooth_version_t *local_version)
192 BT_CHECK_PARAMETER(local_version, return);
193 BT_CHECK_ENABLED_ANY(return);
196 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
198 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_VERSION,
199 in_param1, in_param2, in_param3, in_param4, &out_param);
201 if (result == BLUETOOTH_ERROR_NONE) {
202 *local_version = g_array_index(out_param, bluetooth_version_t, 0);
205 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
210 BT_EXPORT_API int bluetooth_get_local_name(bluetooth_device_name_t *local_name)
214 BT_CHECK_PARAMETER(local_name, return);
217 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
219 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_NAME,
220 in_param1, in_param2, in_param3, in_param4, &out_param);
222 if (result == BLUETOOTH_ERROR_NONE) {
223 *local_name = g_array_index(out_param,
224 bluetooth_device_name_t, 0);
227 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
232 BT_EXPORT_API int bluetooth_set_local_name(const bluetooth_device_name_t *local_name)
236 BT_CHECK_PARAMETER(local_name, return);
237 BT_CHECK_ENABLED_ANY(return);
240 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
242 g_array_append_vals(in_param1, local_name, sizeof(bluetooth_device_name_t));
244 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LOCAL_NAME,
245 in_param1, in_param2, in_param3, in_param4, &out_param);
247 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
252 BT_EXPORT_API int bluetooth_is_service_used(const char *service_uuid,
256 char uuid[BLUETOOTH_UUID_STRING_MAX];
258 BT_CHECK_PARAMETER(service_uuid, return);
259 BT_CHECK_PARAMETER(used, return);
260 BT_CHECK_ENABLED(return);
263 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
265 g_strlcpy(uuid, service_uuid, sizeof(uuid));
266 g_array_append_vals(in_param1, uuid, BLUETOOTH_UUID_STRING_MAX);
268 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SERVICE_USED,
269 in_param1, in_param2, in_param3, in_param4, &out_param);
271 if (result == BLUETOOTH_ERROR_NONE) {
272 *used = g_array_index(out_param, gboolean, 0);
275 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
280 BT_EXPORT_API int bluetooth_get_discoverable_mode(bluetooth_discoverable_mode_t *
281 discoverable_mode_ptr)
285 BT_CHECK_PARAMETER(discoverable_mode_ptr, return);
288 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
290 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DISCOVERABLE_MODE,
291 in_param1, in_param2, in_param3, in_param4, &out_param);
293 if (result == BLUETOOTH_ERROR_NONE) {
294 *discoverable_mode_ptr = g_array_index(out_param,
298 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
303 BT_EXPORT_API int bluetooth_set_discoverable_mode(bluetooth_discoverable_mode_t discoverable_mode,
308 BT_CHECK_ENABLED(return);
311 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
313 g_array_append_vals(in_param1, &discoverable_mode, sizeof(int));
314 g_array_append_vals(in_param2, &timeout, sizeof(int));
316 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_DISCOVERABLE_MODE,
317 in_param1, in_param2, in_param3, in_param4, &out_param);
319 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
324 BT_EXPORT_API int bluetooth_get_timeout_value(int *timeout)
328 BT_CHECK_PARAMETER(timeout, return);
329 BT_CHECK_ENABLED(return);
332 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
334 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DISCOVERABLE_TIME,
335 in_param1, in_param2, in_param3, in_param4, &out_param);
337 if (result == BLUETOOTH_ERROR_NONE) {
338 *timeout = g_array_index(out_param, int, 0);
341 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
346 BT_EXPORT_API int bluetooth_start_discovery(unsigned short max_response,
347 unsigned short discovery_duration,
348 unsigned int classOfDeviceMask)
352 BT_CHECK_ENABLED(return);
355 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
357 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_DISCOVERY,
358 in_param1, in_param2, in_param3, in_param4, &out_param);
360 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
365 BT_EXPORT_API int bluetooth_start_custom_discovery(bt_discovery_role_type_t role,
366 unsigned short max_response,
367 unsigned short discovery_duration,
368 unsigned int classOfDeviceMask)
372 if (role == DISCOVERY_ROLE_LE)
373 BT_CHECK_ENABLED_LE(return);
375 BT_CHECK_ENABLED(return);
378 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
380 g_array_append_vals(in_param1, &role, sizeof(bt_discovery_role_type_t));
381 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_CUSTOM_DISCOVERY,
382 in_param1, in_param2, in_param3, in_param4, &out_param);
384 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
389 BT_EXPORT_API int bluetooth_cancel_discovery(void)
393 BT_CHECK_ENABLED(return);
396 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
398 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_DISCOVERY,
399 in_param1, in_param2, in_param3, in_param4, &out_param);
402 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
407 BT_EXPORT_API int bluetooth_is_discovering(void)
410 int is_discovering = FALSE;
412 BT_CHECK_ENABLED(return);
415 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
417 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DISCOVERYING,
418 in_param1, in_param2, in_param3, in_param4, &out_param);
420 if (result == BLUETOOTH_ERROR_NONE) {
421 is_discovering = g_array_index(out_param,
424 BT_ERR("Fail to send request");
427 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
429 return is_discovering;
432 BT_EXPORT_API int bluetooth_is_connectable(gboolean *is_connectable)
436 BT_CHECK_ENABLED_ANY(return);
439 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
441 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_CONNECTABLE,
442 in_param1, in_param2, in_param3, in_param4, &out_param);
444 if (result == BLUETOOTH_ERROR_NONE) {
445 *is_connectable = g_array_index(out_param, int, 0);
447 BT_ERR("Fail to send request");
450 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
455 BT_EXPORT_API int bluetooth_set_connectable(gboolean is_connectable)
459 BT_CHECK_ENABLED_ANY(return);
462 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
464 g_array_append_vals(in_param1, &is_connectable, sizeof(gboolean));
466 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CONNECTABLE,
467 in_param1, in_param2, in_param3, in_param4, &out_param);
469 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
474 BT_EXPORT_API int bluetooth_get_bonded_device_list(GPtrArray **dev_list)
478 BT_CHECK_PARAMETER(dev_list, return);
479 BT_CHECK_ENABLED(return);
482 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
484 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICES,
485 in_param1, in_param2, in_param3, in_param4, &out_param);
487 if (result == BLUETOOTH_ERROR_NONE)
488 result = __bt_fill_device_list(out_param, dev_list);
490 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
495 BT_EXPORT_API int bluetooth_set_manufacturer_data(const bluetooth_manufacturer_data_t *value)
499 BT_CHECK_PARAMETER(value, return);
500 BT_CHECK_ENABLED_ANY(return);
502 if (value->data_len > BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX)
503 return BLUETOOTH_ERROR_INVALID_PARAM;
506 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
508 g_array_append_vals(in_param1, value, sizeof(bluetooth_manufacturer_data_t));
510 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_MANUFACTURER_DATA,
511 in_param1, in_param2, in_param3, in_param4, &out_param);
513 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);