Rollback changes to submit TIZEN:COMMON project
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-audio.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 "bluetooth-audio-api.h"
22 #include "bt-internal-types.h"
23
24 #include "bt-common.h"
25 #include "bt-request-sender.h"
26 #include "bt-event-handler.h"
27
28 BT_EXPORT_API int bluetooth_audio_init(bt_audio_func_ptr cb, void *user_data)
29 {
30         int ret;
31
32         ret = _bt_init_event_handler();
33
34         if (ret != BLUETOOTH_ERROR_NONE &&
35              ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
36                 BT_ERR("Fail to init the event handler");
37                 return ret;
38         }
39
40         _bt_set_user_data(BT_AUDIO, (void *)cb, user_data);
41
42         /* Register All events */
43         _bt_register_event(BT_HEADSET_EVENT , (void *)cb, user_data);
44
45         return BLUETOOTH_ERROR_NONE;
46 }
47
48 BT_EXPORT_API int bluetooth_audio_deinit(void)
49 {
50         _bt_unregister_event(BT_HEADSET_EVENT);
51
52         _bt_set_user_data(BT_AUDIO, NULL, NULL);
53
54         return BLUETOOTH_ERROR_NONE;
55 }
56
57 BT_EXPORT_API int bluetooth_audio_connect(bluetooth_device_address_t *remote_address)
58 {
59         int result;
60         bt_user_info_t *user_info;
61
62         BT_CHECK_PARAMETER(remote_address, return);
63         BT_CHECK_ENABLED(return);
64
65         BT_INIT_PARAMS();
66         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
67
68         user_info = _bt_get_user_data(BT_AUDIO);
69         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
70
71         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
72
73         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AUDIO_CONNECT,
74                 in_param1, in_param2, in_param3, in_param4,
75                 user_info->cb, user_info->user_data);
76
77         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
78
79         return result;
80 }
81
82 BT_EXPORT_API int bluetooth_audio_disconnect(bluetooth_device_address_t *remote_address)
83 {
84         int result;
85         bt_user_info_t *user_info;
86
87         BT_CHECK_PARAMETER(remote_address, return);
88         BT_CHECK_ENABLED(return);
89
90         BT_INIT_PARAMS();
91         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
92
93         user_info = _bt_get_user_data(BT_AUDIO);
94         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
95
96         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
97
98         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AUDIO_DISCONNECT,
99                 in_param1, in_param2, in_param3, in_param4,
100                 user_info->cb, user_info->user_data);
101
102         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
103
104         return result;
105 }
106
107 BT_EXPORT_API int bluetooth_ag_connect(bluetooth_device_address_t *remote_address)
108 {
109         int result;
110         bt_user_info_t *user_info;
111
112         BT_CHECK_PARAMETER(remote_address, return);
113         BT_CHECK_ENABLED(return);
114
115         BT_INIT_PARAMS();
116         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
117
118         user_info = _bt_get_user_data(BT_AUDIO);
119         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
120
121         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
122
123         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AG_CONNECT,
124                 in_param1, in_param2, in_param3, in_param4,
125                 user_info->cb, user_info->user_data);
126
127         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
128
129         return result;
130 }
131
132 BT_EXPORT_API int bluetooth_ag_disconnect(bluetooth_device_address_t *remote_address)
133 {
134         int result;
135         bt_user_info_t *user_info;
136
137         BT_CHECK_PARAMETER(remote_address, return);
138         BT_CHECK_ENABLED(return);
139
140         BT_INIT_PARAMS();
141         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
142
143         user_info = _bt_get_user_data(BT_AUDIO);
144         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
145
146         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
147
148         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AG_DISCONNECT,
149                 in_param1, in_param2, in_param3, in_param4,
150                 user_info->cb, user_info->user_data);
151
152         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
153
154         return result;
155 }
156
157 BT_EXPORT_API int bluetooth_av_connect(bluetooth_device_address_t *remote_address)
158 {
159         int result;
160         bt_user_info_t *user_info;
161
162         BT_CHECK_PARAMETER(remote_address, return);
163         BT_CHECK_ENABLED(return);
164
165         BT_INIT_PARAMS();
166         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
167
168         user_info = _bt_get_user_data(BT_AUDIO);
169         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
170
171         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
172
173         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AV_CONNECT,
174                 in_param1, in_param2, in_param3, in_param4,
175                 user_info->cb, user_info->user_data);
176
177         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
178
179         return result;
180 }
181
182 BT_EXPORT_API int bluetooth_av_disconnect(bluetooth_device_address_t *remote_address)
183 {
184         int result;
185         bt_user_info_t *user_info;
186
187         BT_CHECK_PARAMETER(remote_address, return);
188         BT_CHECK_ENABLED(return);
189
190         BT_INIT_PARAMS();
191         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
192
193         user_info = _bt_get_user_data(BT_AUDIO);
194         retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
195
196         g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
197
198         result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_AV_DISCONNECT,
199                 in_param1, in_param2, in_param3, in_param4,
200                 user_info->cb, user_info->user_data);
201
202         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
203
204         return result;
205 }
206
207 BT_EXPORT_API int bluetooth_ag_get_headset_volume(unsigned int *speaker_gain)
208 {
209         int result;
210
211         BT_CHECK_PARAMETER(speaker_gain, return);
212         BT_CHECK_ENABLED(return);
213
214         BT_INIT_PARAMS();
215         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
216
217         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SPEAKER_GAIN,
218                 in_param1, in_param2, in_param3, in_param4, &out_param);
219
220         if (result == BLUETOOTH_ERROR_NONE) {
221                 *speaker_gain = g_array_index(out_param,
222                                 unsigned int, 0);
223         }
224
225         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
226
227         return result;
228 }
229
230 BT_EXPORT_API int bluetooth_ag_set_speaker_gain(unsigned int speaker_gain)
231 {
232         int result;
233
234         BT_CHECK_ENABLED(return);
235
236         BT_INIT_PARAMS();
237         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
238
239         g_array_append_vals(in_param1, &speaker_gain, sizeof(unsigned int));
240
241         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SPEAKER_GAIN,
242                 in_param1, in_param2, in_param3, in_param4, &out_param);
243
244         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
245
246         return result;
247 }
248