23eb5eb12e6210f7cef7cfc57c99c99048ab715b
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-otp.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 "bluetooth-api.h"
19 #include "bt-internal-types.h"
20
21 #include "bt-common.h"
22 #include "bt-request-sender.h"
23 #include "bt-event-handler.h"
24
25 static int _bluetooth_handle_get_len(const char *str)
26 {
27         int i;
28         for (i = 0; str && str[i] != '\0'; i++);
29         return i;
30 }
31
32 BT_EXPORT_API int bluetooth_otp_server_init(const char *directory)
33 {
34         int result = BLUETOOTH_ERROR_INTERNAL;
35         bt_user_info_t *user_info;
36         char dir_name[BLUETOOTH_MAX_OTP_SERVER_DIR_NAME];
37         BT_DBG("+");
38
39         BT_CHECK_ENABLED(return);
40
41         user_info = _bt_get_user_data(BT_COMMON);
42         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
43
44         BT_INIT_PARAMS();
45         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
46
47         if (directory)
48                 g_strlcpy(dir_name, directory, sizeof(dir_name));
49         else
50                 dir_name[0] = '\0';
51
52         g_array_append_vals(in_param1, dir_name,
53                         BLUETOOTH_MAX_OTP_SERVER_DIR_NAME);
54
55         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_OTP_SERVER_INIT,
56                 in_param1, in_param2, in_param3, in_param4,
57                 user_info->cb, user_info->user_data);
58
59         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
60
61         BT_DBG("-");
62         return result;
63 }
64
65 BT_EXPORT_API int bluetooth_otp_server_deinit()
66 {
67         int result = BLUETOOTH_ERROR_INTERNAL;
68         bt_user_info_t *user_info;
69         BT_DBG("+");
70
71         BT_CHECK_ENABLED(return);
72
73         user_info = _bt_get_user_data(BT_COMMON);
74         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
75
76         BT_INIT_PARAMS();
77         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
78         BT_DBG("");
79
80         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_OTP_SERVER_DEINIT,
81                 in_param1, in_param2, in_param3, in_param4,
82                 user_info->cb, user_info->user_data);
83
84         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
85
86         BT_DBG("-");
87         return result;
88 }
89
90 BT_EXPORT_API int bluetooth_otp_read_characteristic_value(const char *handle)
91 {
92         char *path;
93         int path_len = 0;
94         bt_user_info_t *user_info;
95         int result = BLUETOOTH_ERROR_INTERNAL;
96         BT_DBG("+");
97
98         BT_CHECK_PARAMETER(handle, return);
99         BT_CHECK_ENABLED_LE(return);
100
101         user_info = _bt_get_user_data(BT_COMMON);
102         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
103
104         BT_INIT_PARAMS();
105         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
106
107         path = g_strdup(handle);
108         path_len = _bluetooth_handle_get_len(path);
109         g_array_append_vals(in_param1, path, path_len);
110         g_free(path);
111
112         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_OTP_READ_VALUE,
113                         in_param1, in_param2, in_param3, in_param4,
114                         user_info->cb, user_info->user_data);
115
116         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
117
118         BT_DBG("-");
119         return result;
120 }
121
122 BT_EXPORT_API int bluetooth_otp_enable_notification(const char *handle)
123 {
124         char *path;
125         int path_len = 0;
126         bt_user_info_t *user_info;
127         int result = BLUETOOTH_ERROR_INTERNAL;
128         BT_DBG("+");
129
130         BT_CHECK_PARAMETER(handle, return);
131         BT_CHECK_ENABLED_LE(return);
132
133         user_info = _bt_get_user_data(BT_COMMON);
134         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
135
136         BT_INIT_PARAMS();
137         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
138
139         path = g_strdup(handle);
140         path_len = _bluetooth_handle_get_len(path);
141         g_array_append_vals(in_param1, path, path_len);
142         g_free(path);
143
144         result = _bt_send_request_async(
145                                         BT_BLUEZ_SERVICE,
146                                         BT_OTP_ENABLE_NOTIFICATION,
147                                         in_param1, in_param2,
148                                         in_param3, in_param4,
149                                         user_info->cb, user_info->user_data);
150
151         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
152
153         BT_DBG("-");
154         return result;
155 }