Code Sync [Tizen3.0]: Merged the tizen_2.4 Spin code to tizen.org
[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 #include <syspopup_caller.h>
25
26 #include "bluetooth-api.h"
27 #include "bt-internal-types.h"
28
29 #include "bt-common.h"
30 #include "bt-request-sender.h"
31 #include "bt-event-handler.h"
32
33 static char is_pbap_initialized = FALSE;
34
35 #define BT_CHECK_PBAP_INITIALIZED(func) \
36         if (is_pbap_initialized == FALSE) \
37         { \
38                 BT_ERR("BT PBAP Client is not initiatized"); \
39                 func BLUETOOTH_ERROR_NOT_INITIALIZED; \
40         } \
41
42
43 BT_EXPORT_API int bluetooth_pbap_init(void)
44 {
45         bt_user_info_t *user_info;
46         int ret;
47
48         BT_CHECK_ENABLED(return);
49         if (is_pbap_initialized)
50                 return BLUETOOTH_ERROR_ALREADY_INITIALIZED;
51
52         user_info = _bt_get_user_data(BT_COMMON);
53         retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
54
55         ret = _bt_register_event(BT_PBAP_CLIENT_EVENT, user_info->cb,
56                                         user_info->user_data);
57         if (ret == 0)
58                 is_pbap_initialized = TRUE;
59
60         return ret;
61 }
62
63 BT_EXPORT_API int bluetooth_pbap_deinit(void)
64 {
65         int ret;
66         BT_CHECK_ENABLED(return);
67         BT_CHECK_PBAP_INITIALIZED(return);
68
69         ret = _bt_unregister_event(BT_PBAP_CLIENT_EVENT);
70
71         if (ret == 0)
72                 is_pbap_initialized = FALSE;
73
74         return ret;
75 }
76
77 BT_EXPORT_API int bluetooth_pbap_connect(const bluetooth_device_address_t *address)
78 {
79         BT_DBG("+");
80         int result;
81
82         BT_CHECK_ENABLED(return);
83         BT_CHECK_PBAP_INITIALIZED(return);
84
85         BT_INIT_PARAMS();
86         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
87
88         g_array_append_vals(in_param1, address,
89                                 sizeof(bluetooth_device_address_t));
90         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_CONNECT,
91                 in_param1, in_param2, in_param3, in_param4, &out_param);
92
93         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
94
95         BT_DBG("-");
96         return result;
97 }
98
99 BT_EXPORT_API int bluetooth_pbap_disconnect(const bluetooth_device_address_t *address)
100 {
101         BT_DBG("+");
102         int result;
103
104         BT_CHECK_ENABLED(return);
105         BT_CHECK_PBAP_INITIALIZED(return);
106
107         BT_INIT_PARAMS();
108         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
109
110         g_array_append_vals(in_param1, address,
111                                 sizeof(bluetooth_device_address_t));
112         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_DISCONNECT,
113                 in_param1, in_param2, in_param3, in_param4, &out_param);
114
115         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
116
117         BT_DBG("-");
118         return result;
119 }
120
121 BT_EXPORT_API int bluetooth_pbap_get_phonebook_size(const bluetooth_device_address_t *address,
122                 bt_pbap_folder_t *folder)
123 {
124         BT_DBG("+");
125         int result;
126
127         BT_CHECK_ENABLED(return);
128         BT_CHECK_PBAP_INITIALIZED(return);
129
130         BT_INIT_PARAMS();
131         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
132
133         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
134
135         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
136
137         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_PHONEBOOK_SIZE,
138                 in_param1, in_param2, in_param3, in_param4, &out_param);
139
140         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
141
142         BT_DBG("-");
143         return result;
144 }
145
146 BT_EXPORT_API int bluetooth_pbap_get_phonebook(const bluetooth_device_address_t *address,
147                 bt_pbap_folder_t *folder, bt_pbap_pull_parameters_t *app_param)
148 {
149         BT_DBG("+");
150         int result;
151
152         BT_CHECK_ENABLED(return);
153         BT_CHECK_PBAP_INITIALIZED(return);
154
155         BT_INIT_PARAMS();
156         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
157
158         g_array_append_vals(in_param1, address,
159                                 sizeof(bluetooth_device_address_t));
160         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
161         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_pull_parameters_t));
162         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_PHONEBOOK,
163                 in_param1, in_param2, in_param3, in_param4, &out_param);
164
165         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
166
167         BT_DBG("-");
168         return result;
169 }
170
171 BT_EXPORT_API int bluetooth_pbap_get_list(const bluetooth_device_address_t *address,
172                 bt_pbap_folder_t *folder, bt_pbap_list_parameters_t *app_param)
173 {
174         BT_DBG("+");
175         int result;
176
177         BT_CHECK_ENABLED(return);
178         BT_CHECK_PBAP_INITIALIZED(return);
179
180         BT_INIT_PARAMS();
181         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
182
183         g_array_append_vals(in_param1, address,
184                                 sizeof(bluetooth_device_address_t));
185         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
186         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_list_parameters_t));
187
188         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_GET_LIST,
189                 in_param1, in_param2, in_param3, in_param4, &out_param);
190
191         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
192
193         BT_DBG("-");
194         return result;
195 }
196
197 BT_EXPORT_API int bluetooth_pbap_pull_vcard(const bluetooth_device_address_t *address,
198                 bt_pbap_folder_t *folder, bt_pbap_pull_vcard_parameters_t *app_param)
199 {
200         BT_DBG("+");
201         int result;
202
203         BT_CHECK_ENABLED(return);
204         BT_CHECK_PBAP_INITIALIZED(return);
205
206         BT_INIT_PARAMS();
207         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
208
209         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
210         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
211         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_pull_vcard_parameters_t));
212
213         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_PULL_VCARD,
214                 in_param1, in_param2, in_param3, in_param4, &out_param);
215
216         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
217
218         BT_DBG("-");
219         return result;
220 }
221
222 BT_EXPORT_API int bluetooth_pbap_phonebook_search(const bluetooth_device_address_t *address,
223                 bt_pbap_folder_t *folder, bt_pbap_search_parameters_t *app_param)
224 {
225         BT_DBG("+");
226         int result;
227         BT_CHECK_ENABLED(return);
228         BT_CHECK_PBAP_INITIALIZED(return);
229
230         BT_INIT_PARAMS();
231         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
232
233         g_array_append_vals(in_param1, address, sizeof(bluetooth_device_address_t));
234         g_array_append_vals(in_param2, folder, sizeof(bt_pbap_folder_t));
235         g_array_append_vals(in_param3, app_param, sizeof(bt_pbap_search_parameters_t));
236
237         result = _bt_send_request(BT_OBEX_SERVICE, BT_PBAP_PHONEBOOK_SEARCH,
238                 in_param1, in_param2, in_param3, in_param4, &out_param);
239
240         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
241
242         BT_DBG("-");
243         return result;
244 }