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.
24 #include "bluetooth-api.h"
25 #include "bt-internal-types.h"
27 #include "bt-common.h"
28 #include "bt-request-sender.h"
29 #include "bt-event-handler.h"
31 BT_EXPORT_API int bluetooth_bond_device(const bluetooth_device_address_t *device_address)
34 bt_user_info_t *user_info;
36 BT_CHECK_PARAMETER(device_address, return);
37 BT_CHECK_ENABLED(return);
39 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE)
40 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
41 BT_ERR("Don't have a privilege to use this API");
42 return BLUETOOTH_ERROR_PERMISSION_DEINED;
45 user_info = _bt_get_user_data(BT_COMMON);
46 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
49 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
51 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
53 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE,
54 in_param1, in_param2, in_param3, in_param4,
55 user_info->cb, user_info->user_data);
57 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
62 BT_EXPORT_API int bluetooth_bond_device_by_type(
63 const bluetooth_device_address_t *device_address,
64 bluetooth_conn_type_t conn_type)
67 bt_user_info_t *user_info;
69 BT_CHECK_PARAMETER(device_address, return);
70 if(conn_type == BLUETOOTH_DEV_CONN_BREDR)
71 BT_CHECK_ENABLED(return);
72 else if(conn_type == BLUETOOTH_DEV_CONN_LE)
73 BT_CHECK_ENABLED_LE(return);
74 else if(conn_type == BLUETOOTH_DEV_CONN_DEFAULT) {
75 BT_CHECK_ENABLED(return);
76 BT_CHECK_ENABLED_LE(return);
79 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_BOND_DEVICE_BY_TYPE)
80 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
81 BT_ERR("Don't have a privilege to use this API");
82 return BLUETOOTH_ERROR_PERMISSION_DEINED;
86 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
88 user_info = _bt_get_user_data(BT_COMMON);
89 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
91 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
92 g_array_append_vals(in_param2, &conn_type, sizeof(unsigned short));
94 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE_BY_TYPE,
95 in_param1, in_param2, in_param3, in_param4,
96 user_info->cb, user_info->user_data);
98 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
103 BT_EXPORT_API int bluetooth_cancel_bonding(void)
107 BT_CHECK_ENABLED_ANY(return);
110 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
112 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_BONDING,
113 in_param1, in_param2, in_param3, in_param4, &out_param);
115 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
120 BT_EXPORT_API int bluetooth_unbond_device(const bluetooth_device_address_t *device_address)
123 bt_user_info_t *user_info;
125 BT_CHECK_PARAMETER(device_address, return);
126 BT_CHECK_ENABLED_ANY(return);
128 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_UNBOND_DEVICE)
129 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
130 BT_ERR("Don't have a privilege to use this API");
131 return BLUETOOTH_ERROR_PERMISSION_DEINED;
134 user_info = _bt_get_user_data(BT_COMMON);
135 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
138 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
140 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
142 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_UNBOND_DEVICE,
143 in_param1, in_param2, in_param3, in_param4,
144 user_info->cb, user_info->user_data);
146 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
151 BT_EXPORT_API int bluetooth_get_bonded_device(const bluetooth_device_address_t *device_address,
152 bluetooth_device_info_t *dev_info)
156 BT_CHECK_PARAMETER(device_address, return);
157 BT_CHECK_PARAMETER(dev_info, return);
158 BT_CHECK_ENABLED_ANY(return);
161 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
163 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
165 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICE,
166 in_param1, in_param2, in_param3, in_param4, &out_param);
168 if (result == BLUETOOTH_ERROR_NONE) {
169 if (out_param->len > 0) {
170 *dev_info = g_array_index(out_param,
171 bluetooth_device_info_t, 0);
173 BT_ERR("out_param length is 0!!");
177 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
182 BT_EXPORT_API int bluetooth_get_remote_device(const bluetooth_device_address_t *device_address)
184 return BLUETOOTH_ERROR_NONE;
187 BT_EXPORT_API int bluetooth_search_service(const bluetooth_device_address_t *device_address)
190 bt_user_info_t *user_info;
192 BT_CHECK_PARAMETER(device_address, return);
193 BT_CHECK_ENABLED_ANY(return);
195 if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_SEARCH_SERVICE)
196 == BLUETOOTH_ERROR_PERMISSION_DEINED) {
197 BT_ERR("Don't have a privilege to use this API");
198 return BLUETOOTH_ERROR_PERMISSION_DEINED;
201 user_info = _bt_get_user_data(BT_COMMON);
202 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
205 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
207 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
209 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_SEARCH_SERVICE,
210 in_param1, in_param2, in_param3, in_param4,
211 user_info->cb, user_info->user_data);
213 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
218 BT_EXPORT_API int bluetooth_cancel_service_search(void)
222 BT_CHECK_ENABLED_ANY(return);
225 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
227 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_SEARCH_SERVICE,
228 in_param1, in_param2, in_param3, in_param4, &out_param);
230 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
235 BT_EXPORT_API int bluetooth_set_alias(const bluetooth_device_address_t *device_address,
239 char alias_name[BLUETOOTH_DEVICE_NAME_LENGTH_MAX];
241 BT_CHECK_PARAMETER(device_address, return);
242 BT_CHECK_PARAMETER(alias, return);
243 BT_CHECK_ENABLED_ANY(return);
246 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
248 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
249 g_strlcpy(alias_name, alias, sizeof(alias_name));
250 g_array_append_vals(in_param2, alias_name, BLUETOOTH_DEVICE_NAME_LENGTH_MAX);
252 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ALIAS,
253 in_param1, in_param2, in_param3, in_param4, &out_param);
255 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
260 BT_EXPORT_API int bluetooth_authorize_device(const bluetooth_device_address_t *device_address,
265 BT_CHECK_PARAMETER(device_address, return);
266 BT_CHECK_ENABLED_ANY(return);
269 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
271 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
272 g_array_append_vals(in_param2, &authorized, sizeof(gboolean));
274 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_AUTHORIZATION,
275 in_param1, in_param2, in_param3, in_param4, &out_param);
277 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
282 BT_EXPORT_API int bluetooth_is_device_connected(const bluetooth_device_address_t *device_address,
283 bluetooth_service_type_t type,
284 gboolean *is_connected)
288 BT_CHECK_PARAMETER(device_address, return);
289 BT_CHECK_PARAMETER(is_connected, return);
290 BT_CHECK_ENABLED_ANY(return);
293 if (type & BLUETOOTH_RFCOMM_SERVICE) {
294 result = bluetooth_rfcomm_client_is_connected(device_address, is_connected);
295 if (*is_connected == FALSE)
296 result = bluetooth_rfcomm_server_is_connected(device_address, is_connected);
303 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
305 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
306 g_array_append_vals(in_param2, &type, sizeof(int));
308 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DEVICE_CONNECTED,
309 in_param1, in_param2, in_param3, in_param4, &out_param);
311 if (result == BLUETOOTH_ERROR_NONE) {
312 *is_connected = g_array_index(out_param, gboolean, 0);
315 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
320 BT_EXPORT_API int bluetooth_connect_le(const bluetooth_device_address_t *device_address, gboolean auto_connect)
324 BT_CHECK_PARAMETER(device_address, return);
325 BT_CHECK_ENABLED_ANY(return);
328 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
330 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
331 g_array_append_vals(in_param2, &auto_connect, sizeof(gboolean));
333 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CONNECT_LE,
334 in_param1, in_param2, in_param3, in_param4, &out_param);
336 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
341 BT_EXPORT_API int bluetooth_disconnect_le(const bluetooth_device_address_t *device_address)
345 BT_CHECK_PARAMETER(device_address, return);
346 BT_CHECK_ENABLED_ANY(return);
349 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
351 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
353 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISCONNECT_LE,
354 in_param1, in_param2, in_param3, in_param4, &out_param);
356 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
361 BT_EXPORT_API int bluetooth_enable_rssi(const bluetooth_device_address_t *remote_address,
362 int link_type, bt_rssi_threshold_t *rssi_threshold)
366 BT_CHECK_ENABLED_ANY(return);
369 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
370 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
371 g_array_append_vals(in_param2, &link_type, sizeof(int));
372 g_array_append_vals(in_param3, rssi_threshold, sizeof(bt_rssi_threshold_t));
374 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_RSSI,
375 in_param1, in_param2, in_param3, in_param4, &out_param);
377 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
382 BT_EXPORT_API int bluetooth_get_rssi_strength(const bluetooth_device_address_t *remote_address, int link_type)
386 BT_CHECK_ENABLED_ANY(return);
389 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
390 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
391 g_array_append_vals(in_param2, &link_type, sizeof(int));
393 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_RSSI,
394 in_param1, in_param2, in_param3, in_param4, &out_param);
396 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
401 BT_EXPORT_API int bluetooth_le_conn_update(const bluetooth_device_address_t *address,
402 const bluetooth_le_conn_update_t *parameters)
406 BT_CHECK_ENABLED_ANY(return);
407 BT_CHECK_PARAMETER(address, return);
408 BT_CHECK_PARAMETER(parameters, return);
411 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
413 g_array_append_vals(in_param1, address,
414 sizeof(bluetooth_device_address_t));
415 g_array_append_vals(in_param2, parameters,
416 sizeof(bluetooth_le_conn_update_t));
418 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_LE_CONN_UPDATE,
419 in_param1, in_param2, in_param3, in_param4, &out_param);
421 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
426 BT_EXPORT_API int bluetooth_get_connected_link_type(
427 const bluetooth_device_address_t *device_address,
428 bluetooth_connected_link_t *connected)
432 BT_CHECK_PARAMETER(device_address, return);
433 BT_CHECK_ENABLED_ANY(return);
436 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
438 g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
440 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_CONNECTED_LINK_TYPE,
441 in_param1, in_param2, in_param3, in_param4, &out_param);
443 if (result == BLUETOOTH_ERROR_NONE) {
444 *connected = g_array_index(out_param, guint, 0);
447 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);