Merge branch 'master' into tizen_2.1
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-device.c
1 /*
2  * bluetooth-frwk
3  *
4  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *              http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
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 BT_EXPORT_API int bluetooth_bond_device(const bluetooth_device_address_t *device_address)
28 {
29         int result;
30         bt_user_info_t *user_info;
31
32         BT_CHECK_PARAMETER(device_address, return);
33         BT_CHECK_ENABLED(return);
34
35         BT_INIT_PARAMS();
36         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
37
38         user_info = _bt_get_user_data(BT_COMMON);
39         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
40
41         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
42
43         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_BOND_DEVICE,
44                 in_param1, in_param2, in_param3, in_param4,
45                 user_info->cb, user_info->user_data);
46
47         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
48
49         return result;
50 }
51
52 BT_EXPORT_API int bluetooth_cancel_bonding(void)
53 {
54         int result;
55
56         BT_CHECK_ENABLED(return);
57
58         BT_INIT_PARAMS();
59         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
60
61         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_BONDING,
62                 in_param1, in_param2, in_param3, in_param4, &out_param);
63
64         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
65
66         return result;
67 }
68
69 BT_EXPORT_API int bluetooth_unbond_device(const bluetooth_device_address_t *device_address)
70 {
71         int result;
72         bt_user_info_t *user_info;
73
74         BT_CHECK_PARAMETER(device_address, return);
75         BT_CHECK_ENABLED(return);
76
77         BT_INIT_PARAMS();
78         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
79
80         user_info = _bt_get_user_data(BT_COMMON);
81         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
82
83         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
84
85         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_UNBOND_DEVICE,
86                 in_param1, in_param2, in_param3, in_param4,
87                 user_info->cb, user_info->user_data);
88
89         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
90
91         return result;
92 }
93
94 BT_EXPORT_API int bluetooth_get_bonded_device(const bluetooth_device_address_t *device_address,
95                                               bluetooth_device_info_t *dev_info)
96 {
97         int result;
98
99         BT_CHECK_PARAMETER(device_address, return);
100         BT_CHECK_PARAMETER(dev_info, return);
101         BT_CHECK_ENABLED(return);
102
103         BT_INIT_PARAMS();
104         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
105
106         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
107
108         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_BONDED_DEVICE,
109                 in_param1, in_param2, in_param3, in_param4, &out_param);
110
111         if (result == BLUETOOTH_ERROR_NONE) {
112                 if (out_param->len > 0) {
113                         *dev_info = g_array_index(out_param,
114                                         bluetooth_device_info_t, 0);
115                 } else {
116                         BT_DBG("out_param length is 0!!");
117                 }
118         }
119
120         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
121
122         return result;
123 }
124
125 BT_EXPORT_API int bluetooth_get_remote_device(const bluetooth_device_address_t *device_address)
126 {
127         return BLUETOOTH_ERROR_NONE;
128 }
129
130 BT_EXPORT_API int bluetooth_search_service(const bluetooth_device_address_t *device_address)
131 {
132         int result;
133         bt_user_info_t *user_info;
134
135         BT_CHECK_PARAMETER(device_address, return);
136         BT_CHECK_ENABLED(return);
137
138         BT_INIT_PARAMS();
139         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
140
141         user_info = _bt_get_user_data(BT_COMMON);
142         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
143
144         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
145
146         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_SEARCH_SERVICE,
147                 in_param1, in_param2, in_param3, in_param4,
148                 user_info->cb, user_info->user_data);
149
150         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
151
152         return result;
153 }
154
155 BT_EXPORT_API int bluetooth_cancel_service_search(void)
156 {
157         int result;
158
159         BT_CHECK_ENABLED(return);
160
161         BT_INIT_PARAMS();
162         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
163
164         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_CANCEL_SEARCH_SERVICE,
165                 in_param1, in_param2, in_param3, in_param4, &out_param);
166
167         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
168
169         return result;
170 }
171
172 BT_EXPORT_API int bluetooth_set_alias(const bluetooth_device_address_t *device_address,
173                                       const char *alias)
174 {
175         int result;
176         char alias_name[BLUETOOTH_DEVICE_NAME_LENGTH_MAX];
177
178         BT_CHECK_PARAMETER(device_address, return);
179         BT_CHECK_PARAMETER(alias, return);
180         BT_CHECK_ENABLED(return);
181
182         BT_INIT_PARAMS();
183         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
184
185         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
186         g_strlcpy(alias_name, alias, sizeof(alias_name));
187         g_array_append_vals(in_param2, alias_name, BLUETOOTH_DEVICE_NAME_LENGTH_MAX);
188
189         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_ALIAS,
190                 in_param1, in_param2, in_param3, in_param4, &out_param);
191
192         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
193
194         return result;
195 }
196
197 BT_EXPORT_API int bluetooth_authorize_device(const bluetooth_device_address_t *device_address,
198                                              gboolean authorized)
199 {
200         int result;
201
202         BT_CHECK_PARAMETER(device_address, return);
203         BT_CHECK_ENABLED(return);
204
205         BT_INIT_PARAMS();
206         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
207
208         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
209         g_array_append_vals(in_param2, &authorized, sizeof(gboolean));
210
211         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_AUTHORIZATION,
212                 in_param1, in_param2, in_param3, in_param4, &out_param);
213
214         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
215
216         return result;
217 }
218
219 BT_EXPORT_API int bluetooth_is_device_connected(const bluetooth_device_address_t *device_address,
220                                 bluetooth_service_type_t type,
221                                 gboolean *is_connected)
222 {
223         int result;
224
225         BT_CHECK_PARAMETER(device_address, return);
226         BT_CHECK_PARAMETER(is_connected, return);
227         BT_CHECK_ENABLED(return);
228
229         BT_INIT_PARAMS();
230         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
231
232         g_array_append_vals(in_param1, device_address, sizeof(bluetooth_device_address_t));
233         g_array_append_vals(in_param2, &type, sizeof(int));
234
235         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_IS_DEVICE_CONNECTED,
236                 in_param1, in_param2, in_param3, in_param4, &out_param);
237
238         if (result == BLUETOOTH_ERROR_NONE) {
239                 *is_connected = g_array_index(out_param, gboolean, 0);
240         }
241
242         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
243
244         return result;
245 }
246