3.0 specific patch: enable to build after tizen 2.4 code sync.
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-pbap.c
1 /*
2  * Bluetooth-frwk
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:  Hocheol Seo <hocheol.seo@samsung.com>
7  *               Girishashok Joshi <girish.joshi@samsung.com>
8  *               Chanyeol Park <chanyeol.park@samsung.com>
9  *
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
13  *
14  *              http://www.apache.org/licenses/LICENSE-2.0
15  *
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.
21  *
22  */
23 #include <vconf.h>
24 #if !defined(LIBNOTIFY_SUPPORT) && !defined(LIBNOTIFICATION_SUPPORT)
25 #include <syspopup_caller.h>
26 #endif
27
28 #include "bluetooth-api.h"
29 #include "bt-internal-types.h"
30
31 #include "bt-common.h"
32 #include "bt-request-sender.h"
33 #include "bt-event-handler.h"
34
35 static char is_pbap_initialized = FALSE;
36
37 #define BT_CHECK_PBAP_INITIALIZED(func) \
38         if (is_pbap_initialized == FALSE) \
39         { \
40                 BT_ERR("BT PBAP Client is not initiatized"); \
41                 func BLUETOOTH_ERROR_NOT_INITIALIZED; \
42         } \
43
44
45 BT_EXPORT_API int bluetooth_pbap_init(void)
46 {
47         bt_user_info_t *user_info;
48         int ret;
49
50         BT_CHECK_ENABLED(return);
51         if (is_pbap_initialized)
52                 return BLUETOOTH_ERROR_ALREADY_INITIALIZED;
53
54         user_info = _bt_get_user_data(BT_COMMON);
55         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
56
57         ret = _bt_register_event(BT_PBAP_CLIENT_EVENT, user_info->cb,
58                                         user_info->user_data);
59         if (ret == 0)
60                 is_pbap_initialized = TRUE;
61
62         return ret;
63 }
64
65 BT_EXPORT_API int bluetooth_pbap_deinit(void)
66 {
67         int ret;
68         BT_CHECK_ENABLED(return);
69         BT_CHECK_PBAP_INITIALIZED(return);
70
71         ret = _bt_unregister_event(BT_PBAP_CLIENT_EVENT);
72
73         if (ret == 0)
74                 is_pbap_initialized = FALSE;
75
76         return ret;
77 }
78
79 BT_EXPORT_API int bluetooth_pbap_connect(const bluetooth_device_address_t *address)
80 {
81         BT_DBG("+");
82         int result;
83
84         BT_CHECK_ENABLED(return);
85         BT_CHECK_PBAP_INITIALIZED(return);
86
87         BT_INIT_PARAMS();
88         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
89
90         g_array_append_vals(in_param1, address,
91                                 sizeof(bluetooth_device_address_t));
92         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_CONNECT,
93                 in_param1, in_param2, in_param3, in_param4, &out_param);
94
95         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
96
97         BT_DBG("-");
98         return result;
99 }
100
101 BT_EXPORT_API int bluetooth_pbap_disconnect(const bluetooth_device_address_t *address)
102 {
103         BT_DBG("+");
104         int result;
105
106         BT_CHECK_ENABLED(return);
107         BT_CHECK_PBAP_INITIALIZED(return);
108
109         BT_INIT_PARAMS();
110         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
111
112         g_array_append_vals(in_param1, address,
113                                 sizeof(bluetooth_device_address_t));
114         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_DISCONNECT,
115                 in_param1, in_param2, in_param3, in_param4, &out_param);
116
117         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
118
119         BT_DBG("-");
120         return result;
121 }
122
123 BT_EXPORT_API int bluetooth_pbap_get_phonebook_size(const bluetooth_device_address_t *address,
124                 bt_pbap_folder_t *folder)
125 {
126         BT_DBG("+");
127         int result;
128
129         BT_CHECK_ENABLED(return);
130         BT_CHECK_PBAP_INITIALIZED(return);
131
132         BT_INIT_PARAMS();
133         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
134
135         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
136
137         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
138
139         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_PHONEBOOK_SIZE,
140                 in_param1, in_param2, in_param3, in_param4, &out_param);
141
142         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
143
144         BT_DBG("-");
145         return result;
146 }
147
148 BT_EXPORT_API int bluetooth_pbap_get_phonebook(const bluetooth_device_address_t *address,
149                 bt_pbap_folder_t *folder, bt_pbap_pull_parameters_t *app_param)
150 {
151         BT_DBG("+");
152         int result;
153
154         BT_CHECK_ENABLED(return);
155         BT_CHECK_PBAP_INITIALIZED(return);
156
157         BT_INIT_PARAMS();
158         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
159
160         g_array_append_vals(in_param1, address,
161                                 sizeof(bluetooth_device_address_t));
162         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
163         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_pull_parameters_t));
164         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_PHONEBOOK,
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         BT_DBG("-");
170         return result;
171 }
172
173 BT_EXPORT_API int bluetooth_pbap_get_list(const bluetooth_device_address_t *address,
174                 bt_pbap_folder_t *folder, bt_pbap_list_parameters_t *app_param)
175 {
176         BT_DBG("+");
177         int result;
178
179         BT_CHECK_ENABLED(return);
180         BT_CHECK_PBAP_INITIALIZED(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, address,
186                                 sizeof(bluetooth_device_address_t));
187         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
188         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_list_parameters_t));
189
190         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_LIST,
191                 in_param1, in_param2, in_param3, in_param4, &out_param);
192
193         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
194
195         BT_DBG("-");
196         return result;
197 }
198
199 BT_EXPORT_API int bluetooth_pbap_pull_vcard(const bluetooth_device_address_t *address,
200                 bt_pbap_folder_t *folder, bt_pbap_pull_vcard_parameters_t *app_param)
201 {
202         BT_DBG("+");
203         int result;
204
205         BT_CHECK_ENABLED(return);
206         BT_CHECK_PBAP_INITIALIZED(return);
207
208         BT_INIT_PARAMS();
209         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
210
211         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
212         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
213         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_pull_vcard_parameters_t));
214
215         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_PULL_VCARD,
216                 in_param1, in_param2, in_param3, in_param4, &out_param);
217
218         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
219
220         BT_DBG("-");
221         return result;
222 }
223
224 BT_EXPORT_API int bluetooth_pbap_phonebook_search(const bluetooth_device_address_t *address,
225                 bt_pbap_folder_t *folder, bt_pbap_search_parameters_t *app_param)
226 {
227         BT_DBG("+");
228         int result;
229         BT_CHECK_ENABLED(return);
230         BT_CHECK_PBAP_INITIALIZED(return);
231
232         BT_INIT_PARAMS();
233         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
234
235         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
236         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
237         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_search_parameters_t));
238
239         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_PHONEBOOK_SEARCH,
240                 in_param1, in_param2, in_param3, in_param4, &out_param);
241
242         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
243
244         BT_DBG("-");
245         return result;
246 }