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