4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Seungbae Shin <seungbae.shin@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
33 #include "include/mm_sound_private.h"
34 #include "include/mm_sound_utils.h"
35 #include "include/mm_sound_client.h"
36 #include "include/mm_sound_pa_client.h"
37 #include "include/mm_sound_common.h"
39 #define MASTER_VOLUME_MAX 100
40 #define MASTER_VOLUME_MIN 0
44 #define MM_SOUND_DBUS_BUS_NAME_PREPIX "org.tizen.MMSound"
45 #define MM_SOUND_DBUS_OBJECT_PATH "/org/tizen/MMSound"
46 #define MM_SOUND_DBUS_INTERFACE "org.tizen.mmsound"
48 static const char* _get_volume_str(volume_type_t type)
50 static const char *volume_type_str[VOLUME_TYPE_MAX] = {
51 "SYSTEM", "NOTIFICATION", "ALARM", "RINGTONE", "MEDIA", "CALL", "VOIP", "VOICE", "FIXED"
54 return (type < VOLUME_TYPE_MAX) ? volume_type_str[type] : "Unknown";
58 int mm_sound_volume_remove_callback(volume_type_t type)
60 /* FIXME : Will be removed */
61 return MM_ERROR_NOT_SUPPORT_API;
65 int mm_sound_add_volume_changed_callback(mm_sound_volume_changed_cb func, void* user_data, unsigned int *subs_id)
67 int ret = MM_ERROR_NONE;
69 if (func == NULL || subs_id == NULL) {
70 debug_error("argument is not valid");
71 return MM_ERROR_INVALID_ARGUMENT;
74 ret = mm_sound_client_add_volume_changed_callback(func, user_data, subs_id);
76 debug_error("Can not add volume changed callback, ret = %x", ret);
83 int mm_sound_remove_volume_changed_callback(unsigned int subs_id)
85 int ret = MM_ERROR_NONE;
87 ret = mm_sound_client_remove_volume_changed_callback(subs_id);
89 debug_error("Can not remove volume changed callback, ret = %x", ret);
96 int mm_sound_volume_set_value(volume_type_t type, const unsigned int value)
98 int ret = MM_ERROR_NONE;
100 /* request daemon to set volume */
101 ret = mm_sound_client_set_volume_by_type(type, value);
103 debug_error("can not set volume, type(%s), value(%d), ret=0x%x", _get_volume_str(type), value, ret);
105 debug_msg("set (%s) volume to (%d)", _get_volume_str(type), value);
111 int mm_sound_volume_get_value(volume_type_t type, unsigned int *value)
113 int ret = MM_ERROR_NONE;
115 ret = mm_sound_client_get_volume_by_type(type, value);
117 debug_error("can not get volume, type(%s), ret=0x%x", _get_volume_str(type), ret);
119 debug_msg("(%s) volume : %d", _get_volume_str(type), *value);
125 int mm_sound_set_mute(volume_type_t type, bool mute)
127 int ret = MM_ERROR_NONE;
129 ret = mm_sound_client_set_mute_by_type(type, mute);
131 debug_error("can not set mute, type(%s), mute(%d), ret=0x%x", _get_volume_str(type), mute, ret);
133 debug_msg("set (%s) mute to (%d)", _get_volume_str(type), mute);
139 int mm_sound_get_mute(volume_type_t type, bool *muted)
141 int ret = MM_ERROR_NONE;
143 /* Check input param */
145 debug_error("invalid argument");
146 return MM_ERROR_INVALID_ARGUMENT;
148 if (type > VOLUME_TYPE_VOICE) {
149 debug_error("invalid volume type value %d", type);
150 return MM_ERROR_INVALID_ARGUMENT;
153 ret = mm_sound_client_get_mute_by_type(type, muted);
155 debug_error("can not get mute, type(%s), ret=0x%x", _get_volume_str(type), ret);
157 debug_msg("(%s) mute state : %d", _get_volume_str(type), *muted);
163 int mm_sound_set_filter(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group)
165 /* Check input param */
166 if (!stream_type || !filter_name) {
167 debug_error("invalid argument");
168 return MM_ERROR_INVALID_ARGUMENT;
170 if (!filter_parameters)
171 filter_parameters = "";
173 filter_group = "default";
175 debug_msg("stream_type(%s), filter_name(%s), filter_parameters(%s), filter_group(%s)", stream_type, filter_name, filter_parameters, filter_group);
177 return mm_sound_client_set_filter_by_type(stream_type, filter_name, filter_parameters, filter_group);
181 int mm_sound_unset_filter(const char *stream_type)
183 /* Check input param */
185 debug_error("invalid argument");
186 return MM_ERROR_INVALID_ARGUMENT;
189 debug_msg("stream_type(%s)", stream_type);
191 return mm_sound_client_unset_filter_by_type(stream_type);
195 int mm_sound_control_filter(const char *stream_type, const char *filter_name, const char *filter_controls)
197 /* Check input param */
198 if (!stream_type || !filter_name || !filter_controls) {
199 debug_error("invalid argument");
200 return MM_ERROR_INVALID_ARGUMENT;
203 debug_msg("stream_type(%s), filter_name(%s), filter_controls(%s)", stream_type, filter_name, filter_controls);
205 return mm_sound_client_control_filter_by_type(stream_type, filter_name, filter_controls);
208 ///////////////////////////////////
209 //// MMSOUND PLAY APIs
210 ///////////////////////////////////
212 int mm_sound_play_sound_with_stream_info(const char *filename, char *stream_type, int stream_id, unsigned int loop, mm_sound_stop_callback_func callback, void *data, int *handle)
214 MMSoundPlayParam param = { 0, };
217 param.filename = filename;
218 param.volume = 0; //volume value dose not effect anymore
219 param.callback = callback;
227 err = mm_sound_client_play_sound_with_stream_info(¶m, handle, stream_type, stream_id);
229 debug_error("Failed to play sound");
233 debug_warning("success : handle=[%p]", handle);
235 return MM_ERROR_NONE;
241 int mm_sound_stop_sound(int handle)
245 debug_warning("enter : handle=[%d]", handle);
247 err = mm_sound_client_stop_sound(handle);
249 debug_error("Fail to stop sound");
252 debug_warning("success : handle=[%d]", handle);
254 return MM_ERROR_NONE;
257 ///////////////////////////////////
258 //// MMSOUND TONE APIs
259 ///////////////////////////////////
261 int mm_sound_play_tone_with_stream_info(MMSoundTone_t tone, char *stream_type, int stream_id, const double volume, const int duration, int *handle)
264 int err = MM_ERROR_NONE;
266 err = mm_sound_client_play_tone_with_stream_info(tone, stream_type, stream_id, volume, duration, handle);
268 debug_error("Failed to play sound");
276 ///////////////////////////////////
277 //// MMSOUND ROUTING APIs
278 ///////////////////////////////////
281 int mm_sound_test(int a, int b, int* getv)
283 int ret = MM_ERROR_NONE;
285 debug_log("mm_sound_test enter");
287 debug_error("argu null");
288 return MM_ERROR_INVALID_ARGUMENT;
290 ret = mm_sound_client_test(a, b, getv);
292 debug_error("Can not mm sound test, ret = %x", ret);
294 debug_log("mm_sound_test leave");
300 int mm_sound_add_test_callback(mm_sound_test_cb func, void *user_data, unsigned int *subs_id)
302 int ret = MM_ERROR_NONE;
305 if (!func || !subs_id) {
306 debug_error("argument is not valid");
307 return MM_ERROR_INVALID_ARGUMENT;
310 ret = mm_sound_client_add_test_callback(func, user_data, subs_id);
312 debug_error("Can not add test callback, ret = %x", ret);
320 int mm_sound_remove_test_callback(unsigned int subs_id)
322 int ret = MM_ERROR_NONE;
325 ret = mm_sound_client_remove_test_callback(subs_id);
327 debug_error("Can not remove test callback, ret = %x", ret);
335 int mm_sound_add_ducking_state_changed_callback(mm_sound_ducking_state_changed_cb func, void *user_data, unsigned int *subs_id)
337 int ret = MM_ERROR_NONE;
339 if (func == NULL || subs_id == NULL) {
340 debug_error("argument is not valid");
341 return MM_ERROR_INVALID_ARGUMENT;
344 ret = mm_sound_client_add_ducking_state_changed_callback(func, user_data, subs_id);
346 debug_error("Can not add ducking state changed callback, ret = %x", ret);
353 int mm_sound_remove_ducking_state_changed_callback(unsigned int subs_id)
355 int ret = MM_ERROR_NONE;
357 ret = mm_sound_client_remove_ducking_state_changed_callback(subs_id);
359 debug_error("Can not remove ducking state changed callback, ret = %x", ret);
367 void mm_sound_dotnet_cleanup(int signo)
372 __attribute__ ((constructor))
373 static void _mm_sound_initialize(void)
375 mm_sound_client_initialize();
379 __attribute__ ((destructor))
380 static void _mm_sound_finalize(void)
382 mm_sound_client_finalize();