Providing bluetooth usage data for battery monitor framework
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-adapter.c
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *              http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <vconf.h>
19
20 #include "bluetooth-api.h"
21 #include "bt-internal-types.h"
22
23 #include "bt-common.h"
24 #include "bt-request-sender.h"
25 #include "bt-event-handler.h"
26
27 static int __bt_fill_device_list(GArray *out_param2, GPtrArray **dev_list)
28 {
29         int i;
30         guint size;
31         bluetooth_device_info_t *info;
32
33         BT_CHECK_PARAMETER(out_param2, return);
34         BT_CHECK_PARAMETER(dev_list, return);
35
36         size = out_param2->len;
37
38         if (size == 0) {
39                 BT_ERR("No bonded device");
40                 return BLUETOOTH_ERROR_NONE;
41         }
42
43         size = (out_param2->len) / sizeof(bluetooth_device_info_t);
44
45         for (i = 0; i < size; i++) {
46                 bluetooth_device_info_t *dev_info = NULL;
47
48                 info = &g_array_index(out_param2,
49                                 bluetooth_device_info_t, i);
50
51                 dev_info = g_memdup(info, sizeof(bluetooth_device_info_t));
52
53                 if (dev_info)
54                         g_ptr_array_add(*dev_list, (gpointer)dev_info);
55         }
56
57         return BLUETOOTH_ERROR_NONE;
58 }
59
60 BT_EXPORT_API int bluetooth_check_adapter(void)
61 {
62         int value = VCONFKEY_BT_STATUS_OFF;
63
64 #ifndef TIZEN_TEST_EMUL
65         int ret;
66
67         ret = _bt_get_adapter_path(_bt_get_system_private_conn(), NULL);
68
69         if (ret != BLUETOOTH_ERROR_NONE)
70                 return BLUETOOTH_ADAPTER_DISABLED;
71 #endif
72
73         /* check VCONFKEY_BT_STATUS */
74         if (vconf_get_int(VCONFKEY_BT_STATUS, &value) != 0) {
75                 BT_ERR("fail to get vconf key!");
76                 return BLUETOOTH_ADAPTER_DISABLED;
77         }
78
79         return value == VCONFKEY_BT_STATUS_OFF ? BLUETOOTH_ADAPTER_DISABLED :
80                                                 BLUETOOTH_ADAPTER_ENABLED;
81 }
82
83 BT_EXPORT_API int bluetooth_enable_adapter(void)
84 {
85         int result;
86
87         BT_INFO_C("### Enable adapter");
88         retv_if(bluetooth_check_adapter() == BLUETOOTH_ADAPTER_ENABLED,
89                                 BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED);
90
91 #ifdef TIZEN_FEATURE_BT_DPM
92         retv_if(bluetooth_dpm_is_mode_allowed() == BLUETOOTH_ERROR_PERMISSION_DEINED,
93                                 BLUETOOTH_ERROR_PERMISSION_DEINED);
94 #endif
95
96         BT_INIT_PARAMS();
97         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
98
99         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_ENABLE_ADAPTER,
100                 in_param1, in_param2, in_param3, in_param4, &out_param);
101
102         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
103
104         return result;
105 }
106
107 BT_EXPORT_API int bluetooth_read_battery_data(bt_battery_data *data)
108 {
109         int result;
110         bt_battery_data *info = NULL;
111
112         BT_CHECK_PARAMETER(data, return);
113
114         BT_INFO("### Requesting battery data");
115         retv_if(bluetooth_check_adapter() != BLUETOOTH_ADAPTER_ENABLED,
116                                 BLUETOOTH_ADAPTER_DISABLED);
117
118 #ifdef TIZEN_FEATURE_BT_DPM
119         retv_if(bluetooth_dpm_is_mode_allowed() == BLUETOOTH_ERROR_PERMISSION_DEINED,
120                                 BLUETOOTH_ERROR_PERMISSION_DEINED);
121 #endif
122
123         BT_INIT_PARAMS();
124         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
125
126         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_BATTERY_READ_DATA,
127                 in_param1, in_param2, in_param3, in_param4, &out_param);
128
129         if (result != BLUETOOTH_ERROR_NONE) {
130                 BT_ERR("Error encountered");
131                 return result;
132         }
133
134         BT_DBG("Received data from bt-service-adaptation");
135         info = &g_array_index(out_param, bt_battery_data, 0);
136
137         data->session_start_time = info->session_start_time;
138         data->session_end_time = info->session_end_time;
139         data->session_scan_time = info->session_scan_time;
140         data->session_connected_time = info->session_connected_time;
141         data->atm_list = NULL;
142
143         BT_DBG("Received battery data in bt-api: %ld %ld %d %d.", data->session_start_time, data->session_end_time, data->session_scan_time, data->session_connected_time);
144
145         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
146
147         return result;
148 }
149
150 BT_EXPORT_API int bluetooth_disable_adapter(void)
151 {
152         int result;
153
154         BT_INFO_C("### Disable adapter");
155         BT_CHECK_ENABLED(return);
156
157         BT_INIT_PARAMS();
158         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
159
160         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_DISABLE_ADAPTER,
161                 in_param1, in_param2, in_param3, in_param4, &out_param);
162
163         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
164
165         return result;
166 }
167
168 BT_EXPORT_API int bluetooth_recover_adapter(void)
169 {
170         int result;
171
172         BT_INFO("Recover adapter");
173         BT_CHECK_ENABLED(return);
174
175         BT_INIT_PARAMS();
176         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
177
178         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_RECOVER_ADAPTER,
179                 in_param1, in_param2, in_param3, in_param4, &out_param);
180
181         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
182
183         return result;
184 }
185
186 BT_EXPORT_API int bluetooth_reset_adapter(void)
187 {
188         int result;
189
190         BT_INFO("");
191         BT_INIT_PARAMS();
192         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
193
194         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_RESET_ADAPTER,
195                 in_param1, in_param2, in_param3, in_param4, &out_param);
196
197         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
198
199         return result;
200 }
201
202 BT_EXPORT_API int bluetooth_get_local_address(bluetooth_device_address_t *local_address)
203 {
204         int result;
205
206         BT_CHECK_PARAMETER(local_address, return);
207         BT_CHECK_ENABLED_ANY(return);
208
209         BT_INIT_PARAMS();
210         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
211
212         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_ADDRESS,
213                 in_param1, in_param2, in_param3, in_param4, &out_param);
214
215         if (result == BLUETOOTH_ERROR_NONE) {
216                 *local_address = g_array_index(out_param,
217                         bluetooth_device_address_t, 0);
218         }
219
220         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
221
222         return result;
223 }
224
225 BT_EXPORT_API int bluetooth_get_local_version(bluetooth_version_t *local_version)
226 {
227         int result;
228
229         BT_CHECK_PARAMETER(local_version, return);
230         BT_CHECK_ENABLED_ANY(return);
231
232         BT_INIT_PARAMS();
233         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
234
235         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_VERSION,
236                 in_param1, in_param2, in_param3, in_param4, &out_param);
237
238         if (result == BLUETOOTH_ERROR_NONE)
239                 *local_version = g_array_index(out_param, bluetooth_version_t, 0);
240
241         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
242
243         return result;
244 }
245
246 BT_EXPORT_API int bluetooth_get_local_name(bluetooth_device_name_t *local_name)
247 {
248         int result;
249
250         BT_CHECK_PARAMETER(local_name, return);
251         BT_CHECK_ENABLED_ANY(return);
252
253         BT_INIT_PARAMS();
254         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
255
256         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_LOCAL_NAME,
257                 in_param1, in_param2, in_param3, in_param4, &out_param);
258
259         if (result == BLUETOOTH_ERROR_NONE) {
260                 *local_name = g_array_index(out_param,
261                                 bluetooth_device_name_t, 0);
262         }
263
264         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
265
266         return result;
267 }
268
269 BT_EXPORT_API int bluetooth_set_local_name(const bluetooth_device_name_t *local_name)
270 {
271         int result;
272
273         BT_CHECK_PARAMETER(local_name, return);
274         BT_CHECK_ENABLED_ANY(return);
275
276         BT_INIT_PARAMS();
277         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
278
279         g_array_append_vals(in_param1, local_name, sizeof(bluetooth_device_name_t));
280
281         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_LOCAL_NAME,
282                 in_param1, in_param2, in_param3, in_param4, &out_param);
283
284         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
285
286         return result;
287 }
288
289 BT_EXPORT_API int bluetooth_is_service_used(const char *service_uuid,
290                                                 gboolean *used)
291 {
292         int result;
293         char uuid[BLUETOOTH_UUID_STRING_MAX];
294
295         BT_CHECK_PARAMETER(service_uuid, return);
296         BT_CHECK_PARAMETER(used, return);
297         BT_CHECK_ENABLED(return);
298
299         BT_INIT_PARAMS();
300         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
301
302         g_strlcpy(uuid, service_uuid, sizeof(uuid));
303         g_array_append_vals(in_param1, uuid, BLUETOOTH_UUID_STRING_MAX);
304
305         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_SERVICE_USED,
306                 in_param1, in_param2, in_param3, in_param4, &out_param);
307
308         if (result == BLUETOOTH_ERROR_NONE)
309                 *used = g_array_index(out_param, gboolean, 0);
310
311         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
312
313         return result;
314 }
315
316 BT_EXPORT_API int bluetooth_get_discoverable_mode(bluetooth_discoverable_mode_t *
317                                                   discoverable_mode_ptr)
318 {
319         int result;
320
321         BT_CHECK_PARAMETER(discoverable_mode_ptr, return);
322
323         if (!TIZEN_PROFILE_WEARABLE) {
324                 int timeout = 0;
325                 /* Requirement in OSP */
326                 if (bluetooth_check_adapter() == BLUETOOTH_ADAPTER_DISABLED) {
327                         if (vconf_get_int(BT_FILE_VISIBLE_TIME, &timeout) != 0) {
328                                 BT_ERR("Fail to get the timeout value");
329                                 return BLUETOOTH_ERROR_DEVICE_NOT_ENABLED;
330                         }
331
332                         if (timeout == -1)
333                                 *discoverable_mode_ptr = BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE;
334                         else
335                                 *discoverable_mode_ptr = BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE;
336
337                         return BLUETOOTH_ERROR_NONE;
338                 }
339         } else {
340                 BT_CHECK_ENABLED(return);
341         }
342
343         BT_INIT_PARAMS();
344         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
345
346         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DISCOVERABLE_MODE,
347                 in_param1, in_param2, in_param3, in_param4, &out_param);
348
349         if (result == BLUETOOTH_ERROR_NONE)
350                 *discoverable_mode_ptr = g_array_index(out_param, int, 0);
351
352         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
353
354         return result;
355 }
356
357 BT_EXPORT_API int bluetooth_set_discoverable_mode(bluetooth_discoverable_mode_t discoverable_mode,
358                                                   int timeout)
359 {
360         int result;
361
362         BT_CHECK_ENABLED(return);
363
364         BT_INIT_PARAMS();
365         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
366
367         g_array_append_vals(in_param1, &discoverable_mode, sizeof(int));
368         g_array_append_vals(in_param2, &timeout, sizeof(int));
369
370         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_DISCOVERABLE_MODE,
371                 in_param1, in_param2, in_param3, in_param4, &out_param);
372
373         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
374
375         return result;
376 }
377
378 BT_EXPORT_API int bluetooth_get_timeout_value(int *timeout)
379 {
380         int result;
381
382         BT_CHECK_PARAMETER(timeout, return);
383         BT_CHECK_ENABLED(return);
384
385         BT_INIT_PARAMS();
386         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
387
388         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_DISCOVERABLE_TIME,
389                 in_param1, in_param2, in_param3, in_param4, &out_param);
390
391         if (result == BLUETOOTH_ERROR_NONE)
392                 *timeout = g_array_index(out_param, int, 0);
393
394         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
395
396         return result;
397 }
398
399 BT_EXPORT_API int bluetooth_start_discovery(unsigned short max_response,
400                                             unsigned short discovery_duration,
401                                             unsigned int classOfDeviceMask)
402 {
403         int result;
404
405         BT_CHECK_ENABLED(return);
406
407         BT_INIT_PARAMS();
408         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
409
410         g_array_append_vals(in_param1, &max_response, sizeof(unsigned short));
411         g_array_append_vals(in_param2, &discovery_duration, sizeof(unsigned short));
412         g_array_append_vals(in_param3, &classOfDeviceMask, sizeof(unsigned int));
413
414         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_DISCOVERY,
415                 in_param1, in_param2, in_param3, in_param4, &out_param);
416
417         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
418
419         return result;
420 }
421
422 BT_EXPORT_API int bluetooth_start_custom_discovery(bt_discovery_role_type_t role,
423                                                 unsigned short max_response,
424                                                 unsigned short discovery_duration,
425                                                 unsigned int classOfDeviceMask)
426 {
427         int result;
428
429         if (role == DISCOVERY_ROLE_LE)
430                 BT_CHECK_ENABLED_LE(return);
431         else
432                 BT_CHECK_ENABLED(return);
433
434         BT_INIT_PARAMS();
435         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
436
437         g_array_append_vals(in_param1, &role, sizeof(bt_discovery_role_type_t));
438         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_START_CUSTOM_DISCOVERY,
439                 in_param1, in_param2, in_param3, in_param4, &out_param);
440
441         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
442
443         return result;
444 }
445
446 BT_EXPORT_API int bluetooth_cancel_discovery(void)
447 {
448         int result;
449
450         BT_CHECK_ENABLED(return);
451
452         BT_INIT_PARAMS();
453         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
454
455         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_DISCOVERY,
456                 in_param1, in_param2, in_param3, in_param4, &out_param);
457
458
459         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
460
461         return result;
462 }
463
464 BT_EXPORT_API int bluetooth_is_discovering(void)
465 {
466         int result;
467         int is_discovering = FALSE;
468
469         BT_CHECK_ENABLED(return);
470
471         BT_INIT_PARAMS();
472         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
473
474         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DISCOVERYING,
475                 in_param1, in_param2, in_param3, in_param4, &out_param);
476
477         if (result == BLUETOOTH_ERROR_NONE) {
478                 is_discovering = g_array_index(out_param,
479                                 int, 0);
480         } else {
481                 BT_ERR("Fail to send request");
482                 is_discovering = result;
483         }
484
485         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
486
487         return is_discovering;
488 }
489
490 BT_EXPORT_API int bluetooth_is_connectable(gboolean *is_connectable)
491 {
492         int result;
493
494         BT_CHECK_ENABLED_ANY(return);
495
496         BT_INIT_PARAMS();
497         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
498
499         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_CONNECTABLE,
500                 in_param1, in_param2, in_param3, in_param4, &out_param);
501
502         if (result == BLUETOOTH_ERROR_NONE)
503                 *is_connectable = g_array_index(out_param, int, 0);
504         else
505                 BT_ERR("Fail to send request");
506
507         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
508
509         return result;
510 }
511
512 BT_EXPORT_API int bluetooth_set_connectable(gboolean is_connectable)
513 {
514         int result;
515
516         BT_CHECK_ENABLED_ANY(return);
517
518         BT_INIT_PARAMS();
519         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
520
521         g_array_append_vals(in_param1, &is_connectable, sizeof(gboolean));
522
523         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_CONNECTABLE,
524                 in_param1, in_param2, in_param3, in_param4, &out_param);
525
526         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
527
528         return result;
529 }
530
531 BT_EXPORT_API int bluetooth_get_bonded_device_list(GPtrArray **dev_list)
532 {
533         int result;
534
535         BT_CHECK_PARAMETER(dev_list, return);
536         BT_CHECK_ENABLED(return);
537
538         BT_INIT_PARAMS();
539         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
540
541         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICES,
542                 in_param1, in_param2, in_param3, in_param4, &out_param);
543
544         if (result == BLUETOOTH_ERROR_NONE)
545                 result = __bt_fill_device_list(out_param, dev_list);
546
547         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
548
549         return result;
550 }
551
552 BT_EXPORT_API int bluetooth_get_profile_connected_device_list(
553                 const char *profile_uuid, GPtrArray **addr_list)
554 {
555         char uuid[BLUETOOTH_UUID_STRING_MAX];
556         int result;
557         guint size;
558         int i;
559
560         BT_CHECK_PARAMETER(profile_uuid, return);
561         BT_CHECK_PARAMETER(addr_list, return);
562         BT_CHECK_ENABLED(return);
563
564         BT_INIT_PARAMS();
565         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
566
567         g_strlcpy(uuid, profile_uuid, sizeof(uuid));
568         g_array_append_vals(in_param1, uuid, BLUETOOTH_UUID_STRING_MAX);
569
570         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_PROFILE_CONNECTED_DEVICES,
571                 in_param1, in_param2, in_param3, in_param4, &out_param);
572
573         if (result == BLUETOOTH_ERROR_NONE) {
574                 if (out_param == NULL) {
575                         BT_ERR("out_param is NULL");
576                         result = BLUETOOTH_ERROR_INTERNAL;
577                 } else {
578                         size = (out_param->len) / sizeof(bluetooth_device_address_t);
579
580                         if (size == 0) {
581                                 BT_ERR("No connected device");
582                                 result = BLUETOOTH_ERROR_NOT_CONNECTED;
583                         }
584
585                         for (i = 0; i < size; i++) {
586                                 bluetooth_device_address_t *addr = NULL;
587                                 bluetooth_device_address_t *ptr = NULL;
588
589                                 ptr = &g_array_index(out_param,
590                                                 bluetooth_device_address_t, i);
591
592                                 addr = g_memdup(ptr, sizeof(bluetooth_device_address_t));
593
594                                 if (addr)
595                                         g_ptr_array_add(*addr_list, (gpointer)addr);
596                         }
597                 }
598         }
599
600         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
601
602         return result;
603 }
604
605 BT_EXPORT_API int bluetooth_set_manufacturer_data(const bluetooth_manufacturer_data_t *value)
606 {
607         int result;
608
609         BT_CHECK_PARAMETER(value, return);
610         BT_CHECK_ENABLED_ANY(return);
611
612         if (value->data_len > BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX)
613                 return BLUETOOTH_ERROR_INVALID_PARAM;
614
615         BT_INIT_PARAMS();
616         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
617
618         g_array_append_vals(in_param1, value, sizeof(bluetooth_manufacturer_data_t));
619
620         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_MANUFACTURER_DATA,
621                 in_param1, in_param2, in_param3, in_param4, &out_param);
622
623         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
624
625         return result;
626 }
627
628 BT_EXPORT_API int bluetooth_set_passkey_notification(gboolean enable)
629 {
630         int result;
631
632         BT_CHECK_ENABLED_ANY(return);
633
634         BT_INIT_PARAMS();
635         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
636
637         g_array_append_vals(in_param1, &enable, sizeof(gboolean));
638
639         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_PASSKEY_NOTIFICATION,
640                 in_param1, in_param2, in_param3, in_param4, &out_param);
641
642         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
643
644         return result;
645 }
646