4 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include "bluetooth-api.h"
21 #include "bluetooth-audio-api.h"
22 #include "bt-internal-types.h"
24 #include "bt-common.h"
25 #include "bt-request-sender.h"
26 #include "bt-event-handler.h"
28 BT_EXPORT_API int bluetooth_audio_init(bt_audio_func_ptr cb, void *user_data)
32 ret = _bt_init_event_handler();
34 if (ret != BLUETOOTH_ERROR_NONE &&
35 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
36 BT_ERR("Fail to init the event handler");
40 _bt_set_user_data(BT_AUDIO, (void *)cb, user_data);
42 /* Register All events */
43 _bt_register_event(BT_HEADSET_EVENT , (void *)cb, user_data);
45 return BLUETOOTH_ERROR_NONE;
48 BT_EXPORT_API int bluetooth_audio_deinit(void)
50 _bt_unregister_event(BT_HEADSET_EVENT);
52 _bt_set_user_data(BT_AUDIO, NULL, NULL);
54 return BLUETOOTH_ERROR_NONE;
57 BT_EXPORT_API int bluetooth_audio_connect(bluetooth_device_address_t *remote_address)
60 bt_user_info_t *user_info;
62 BT_CHECK_PARAMETER(remote_address, return);
63 BT_CHECK_ENABLED(return);
66 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
68 user_info = _bt_get_user_data(BT_AUDIO);
69 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
71 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
77 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
82 BT_EXPORT_API int bluetooth_audio_disconnect(bluetooth_device_address_t *remote_address)
85 bt_user_info_t *user_info;
87 BT_CHECK_PARAMETER(remote_address, return);
88 BT_CHECK_ENABLED(return);
91 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
93 user_info = _bt_get_user_data(BT_AUDIO);
94 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
96 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
102 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
107 BT_EXPORT_API int bluetooth_ag_connect(bluetooth_device_address_t *remote_address)
110 bt_user_info_t *user_info;
112 BT_CHECK_PARAMETER(remote_address, return);
113 BT_CHECK_ENABLED(return);
116 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
118 user_info = _bt_get_user_data(BT_AUDIO);
119 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
121 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
127 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
132 BT_EXPORT_API int bluetooth_ag_disconnect(bluetooth_device_address_t *remote_address)
135 bt_user_info_t *user_info;
137 BT_CHECK_PARAMETER(remote_address, return);
138 BT_CHECK_ENABLED(return);
141 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
143 user_info = _bt_get_user_data(BT_AUDIO);
144 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
146 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
152 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
157 BT_EXPORT_API int bluetooth_av_connect(bluetooth_device_address_t *remote_address)
160 bt_user_info_t *user_info;
162 BT_CHECK_PARAMETER(remote_address, return);
163 BT_CHECK_ENABLED(return);
166 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
168 user_info = _bt_get_user_data(BT_AUDIO);
169 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
171 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
177 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
182 BT_EXPORT_API int bluetooth_av_disconnect(bluetooth_device_address_t *remote_address)
185 bt_user_info_t *user_info;
187 BT_CHECK_PARAMETER(remote_address, return);
188 BT_CHECK_ENABLED(return);
191 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
193 user_info = _bt_get_user_data(BT_AUDIO);
194 retv_if(user_info == NULL, BLUETOOTH_ERROR_INTERNAL);
196 g_array_append_vals(in_param1, remote_address, sizeof(bluetooth_device_address_t));
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);
202 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
207 BT_EXPORT_API int bluetooth_ag_get_headset_volume(unsigned int *speaker_gain)
211 BT_CHECK_PARAMETER(speaker_gain, return);
212 BT_CHECK_ENABLED(return);
215 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
217 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_GET_SPEAKER_GAIN,
218 in_param1, in_param2, in_param3, in_param4, &out_param);
220 if (result == BLUETOOTH_ERROR_NONE) {
221 *speaker_gain = g_array_index(out_param,
225 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
230 BT_EXPORT_API int bluetooth_ag_set_speaker_gain(unsigned int speaker_gain)
234 BT_CHECK_ENABLED(return);
237 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
239 g_array_append_vals(in_param1, &speaker_gain, sizeof(unsigned int));
241 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_SET_SPEAKER_GAIN,
242 in_param1, in_param2, in_param3, in_param4, &out_param);
244 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);