Add support for mute API set
[platform/core/multimedia/libmm-sound.git] / include / mm_sound.h
1 /*
2  * libmm-sound
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Seungbae Shin <seungbae.shin@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21
22 /**
23  * @file                mm_sound.h
24  * @brief               Application interface library for sound module.
25  * @date
26  * @version             Release
27  *
28  * Application interface library for sound module.
29  */
30
31 #ifndef __MM_SOUND_H__
32 #define __MM_SOUND_H__
33
34 #include <mm_types.h>
35 #include <mm_error.h>
36 #include <mm_message.h>
37
38 #ifdef __cplusplus
39         extern "C" {
40 #endif
41
42 /**
43         @addtogroup SOUND
44         @{
45         @par
46         This part is describes the sound module of multimedia framework. Sound
47         module provides APIs to implement play wav file with simple api, to handle volume information,
48         to handle audio route policy.
49
50         @par
51         There is six different volume type for normal usage. application should set proper volume type to multimedia playback APIs.
52         <div> <table>
53         <tr>
54         <td><B>Type</B></td>
55         <td><B>Description</B></td>
56         </tr>
57         <tr>
58         <td>VOLUME_TYPE_SYSTEM</td>
59         <td>volume for normal system sound (e.g. keysound, camera shutter)</td>
60         </tr>
61         <tr>
62         <td>VOLUME_TYPE_NOTIFICATION</td>
63         <td>volume for notification (e.g. message, email notification)</td>
64         </tr>
65         <tr>
66         <td>VOLUME_TYPE_RINGTONE</td>
67         <td>volume for incoming call ring</td>
68         </tr>
69         <tr>
70         <td>VOLUME_TYPE_MEDIA</td>
71         <td>volume for media playback (e.g. music, video playback)</td>
72         </tr>
73         <tr>
74         <td>VOLUME_TYPE_CALL</td>
75         <td>volume for call</td>
76         </tr>
77         </table> </div>
78
79         @par
80         application can change audio route policy with mm-sound API.
81         Audio route is input and output of audio stream.
82
83         @par
84         @image html             audio_device.png        "Figure1. Audio Devices of mobile phone"        width=12cm
85         @image latex    audio_device.png        "Figure1. Audio Devices of mobile phone"        width=12cm
86
87         @par
88         Default audio route policy is like follows
89         @par
90         for playback
91         <div><table>
92         <tr>
93         <td><B>Bluetooth headset</B></td>
94         <td><B>Wired headset</B></td>
95         <td><B>Playback Device</B></td>
96         </tr>
97         <tr>
98         <td>connected</td>
99         <td>plugged</td>
100         <td>Bluetooth headset</td>
101         </tr>
102         <tr>
103         <td>connected</td>
104         <td>unplugged</td>
105         <td>Bluetooth headset</td>
106         </tr>
107         <tr>
108         <td>disconnected</td>
109         <td>plugged</td>
110         <td>Wired headset</td>
111         </tr>
112         <tr>
113         <td>disconnected</td>
114         <td>unplugged</td>
115         <td>Loud speaker</td>
116         </tr>
117         </table></div>
118
119         @par
120         for capture (bluetooth headset mic used only in call mode)
121         <div><table>
122         <tr>
123         <td><B>Bluetooth headset mic</B></td>
124         <td><B>Wired headset mic</B></td>
125         <td><B>Capture Device</B></td>
126         </tr>
127         <tr>
128         <td>connected</td>
129         <td>plugged</td>
130         <td>Wired headset mic</td>
131         </tr>
132         <tr>
133         <td>connected</td>
134         <td>unplugged</td>
135         <td>microphone</td>
136         </tr>
137         <tr>
138         <td>disconnected</td>
139         <td>plugged</td>
140         <td>Wired headset mic</td>
141         </tr>
142         <tr>
143         <td>disconnected</td>
144         <td>unplugged</td>
145         <td>Wired headset mic</td>
146         </tr>
147         </table></div>
148
149         @par
150         If application changes routing policy to SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP with mm_sound_route_set_system_policy
151         audio routing policy has changed to ignore bluetooth headset connection.
152         @par
153         for playback
154         <div><table>
155         <tr>
156         <td><B>Bluetooth headset</B></td>
157         <td><B>Wired headset</B></td>
158         <td><B>Playback Device</B></td>
159         </tr>
160         <tr>
161         <td>connected</td>
162         <td>plugged</td>
163         <td>Wired headset</td>
164         </tr>
165         <tr>
166         <td>connected</td>
167         <td>unplugged</td>
168         <td>Loud speaker</td>
169         </tr>
170         <tr>
171         <td>disconnected</td>
172         <td>plugged</td>
173         <td>Wired headset</td>
174         </tr>
175         <tr>
176         <td>disconnected</td>
177         <td>unplugged</td>
178         <td>Loud speaker</td>
179         </tr>
180         </table></div>
181
182         @par
183         for capture (bluetooth headset mic used only in call mode)
184         <div><table>
185         <tr>
186         <td><B>Bluetooth headset mic</B></td>
187         <td><B>Wired headset mic</B></td>
188         <td><B>Capture Device</B></td>
189         </tr>
190         <tr>
191         <td>connected</td>
192         <td>plugged</td>
193         <td>Wired headset mic</td>
194         </tr>
195         <tr>
196         <td>connected</td>
197         <td>unplugged</td>
198         <td>microphone</td>
199         </tr>
200         <tr>
201         <td>disconnected</td>
202         <td>plugged</td>
203         <td>Wired headset mic</td>
204         </tr>
205         <tr>
206         <td>disconnected</td>
207         <td>unplugged</td>
208         <td>Wired headset mic</td>
209         </tr>
210         </table></div>
211
212         @par
213         If application changes routing policy to SYSTEM_AUDIO_ROUTE_POLICY_HANDSET_ONLY with mm_sound_route_set_system_policy
214         audio routing policy has changed to use only loud speaker and microphone.
215         @par
216         for playback
217         <div><table>
218         <tr>
219         <td><B>Bluetooth headset</B></td>
220         <td><B>Wired headset</B></td>
221         <td><B>Playback Device</B></td>
222         </tr>
223         <tr>
224         <td>connected</td>
225         <td>plugged</td>
226         <td>Loud speaker</td>
227         </tr>
228         <tr>
229         <td>connected</td>
230         <td>unplugged</td>
231         <td>Loud speaker</td>
232         </tr>
233         <tr>
234         <td>disconnected</td>
235         <td>plugged</td>
236         <td>Loud speaker</td>
237         </tr>
238         <tr>
239         <td>disconnected</td>
240         <td>unplugged</td>
241         <td>Loud speaker</td>
242         </tr>
243         </table></div>
244
245         @par
246         for capture (bluetooth headset mic used only in call mode)
247         <div><table>
248         <tr>
249         <td><B>Bluetooth headset mic</B></td>
250         <td><B>Wired headset mic</B></td>
251         <td><B>Capture Device</B></td>
252         </tr>
253         <tr>
254         <td>connected</td>
255         <td>plugged</td>
256         <td>microphone</td>
257         </tr>
258         <tr>
259         <td>connected</td>
260         <td>unplugged</td>
261         <td>microphone</td>
262         </tr>
263         <tr>
264         <td>disconnected</td>
265         <td>plugged</td>
266         <td>microphone</td>
267         </tr>
268         <tr>
269         <td>disconnected</td>
270         <td>unplugged</td>
271         <td>microphone</td>
272         </tr>
273         </table></div>
274
275  */
276
277 /*
278  * MMSound Volume APIs
279  */
280
281 /**
282  * Enumerations of Volume type.
283  */
284
285 typedef enum {
286         VOLUME_TYPE_SYSTEM,                             /**< System volume type */
287         VOLUME_TYPE_NOTIFICATION,               /**< Notification volume type */
288         VOLUME_TYPE_ALARM,                              /**< Alarm volume type */
289         VOLUME_TYPE_RINGTONE,                   /**< Ringtone volume type */
290         VOLUME_TYPE_MEDIA,                              /**< Media volume type */
291         VOLUME_TYPE_CALL,                               /**< Call volume type */
292         VOLUME_TYPE_VOIP,                               /**< VOIP volume type */
293         VOLUME_TYPE_VOICE,                              /**< VOICE volume type */
294         VOLUME_TYPE_FIXED,                              /**< Volume type for fixed acoustic level */
295         VOLUME_TYPE_MAX,                                /**< Volume type count */
296 } volume_type_t;
297
298 typedef enum {
299         VOLUME_GAIN_DEFAULT             = 0,
300         VOLUME_GAIN_DIALER              = 1<<8,
301         VOLUME_GAIN_TOUCH               = 2<<8,
302         VOLUME_GAIN_AF                  = 3<<8,
303         VOLUME_GAIN_SHUTTER1    = 4<<8,
304         VOLUME_GAIN_SHUTTER2    = 5<<8,
305         VOLUME_GAIN_CAMCORDING  = 6<<8,
306         VOLUME_GAIN_MIDI                = 7<<8,
307         VOLUME_GAIN_BOOTING             = 8<<8,
308         VOLUME_GAIN_VIDEO               = 9<<8,
309         VOLUME_GAIN_TTS                 = 10<<8,
310 } volume_gain_t;
311
312 /**
313  * @brief Enumerations of supporting source_type
314  */
315 typedef enum {
316         SUPPORT_SOURCE_TYPE_DEFAULT,
317         SUPPORT_SOURCE_TYPE_MIRRORING,
318         SUPPORT_SOURCE_TYPE_VOICECONTROL,
319         SUPPORT_SOURCE_TYPE_SVR,
320         SUPPORT_SOURCE_TYPE_VIDEOCALL,
321         SUPPORT_SOURCE_TYPE_VOICERECORDING,
322         SUPPORT_SOURCE_TYPE_VOIP, /* Supporting VoIP source*/
323         SUPPORT_SOURCE_TYPE_CALL_FORWARDING,
324         SUPPORT_SOURCE_TYPE_FMRADIO,
325         SUPPORT_SOURCE_TYPE_LOOPBACK,
326 } mm_sound_source_type_e;
327
328 /**
329  * Active volume change callback function type.
330  *
331  * @param       type                    [in]    The sound type of changed volume
332  * @param       volume                  [in]    The new volume value
333  * @param       user_data               [in]    Argument passed when callback has called
334  *
335  * @return      No return value
336  * @remark      None.
337  * @see         mm_sound_add_volume_changed_callback mm_sound_remove_volume_changed_callback
338  */
339 typedef void (*mm_sound_volume_changed_cb) (volume_type_t type, unsigned int volume, void *user_data);
340
341
342
343
344 int mm_sound_add_volume_changed_callback(mm_sound_volume_changed_cb func, void* user_data, unsigned int *id);
345
346
347 /**
348  * This function is to remove volume changed callback.
349  *
350  * @param       type                    [in]    volume type to set change callback function
351  *
352  * @return      This function returns MM_ERROR_NONE on success, or negative value
353  *                      with error code.
354  * @remark      None.
355  * @pre         Callback function should be registered previously for given volume type.
356  * @post        Callback function will not be called anymore.
357  * @see         volume_type_t
358  * @par Example
359  * @code
360 void _volume_callback(void *data)
361 {
362         printf("Callback function\n");
363 }
364
365 int volume_callback()
366 {
367         int ret = 0;
368         int vol_type = VOLUME_TYPE_MEDIA;
369
370         mm_sound_volume_add_callback(vol_type, _volume_callback, NULL);
371
372         ret = mm_sound_volume_remove_callback(vol_type);
373         if ( MM_ERROR_NONE == ret)
374         {
375                 printf("Remove callback success\n");
376         }
377         else
378         {
379                 printf("Remove callback failed\n");
380         }
381
382         return ret;
383 }
384
385  * @endcode
386  */
387 int mm_sound_volume_remove_callback(volume_type_t type);
388
389 /**
390  * This function is to remove volume change callback.
391  *
392  * @return      This function returns MM_ERROR_NONE on success, or negative value
393  *                      with error code.
394  **/
395 int mm_sound_remove_volume_changed_callback(unsigned int id);
396
397 /**
398  * This function is to set volume level of certain volume type.
399  *
400  * @param       type                    [in]    volume type to set value.
401  * @param       value                   [in]    volume value.
402  *
403  * @return      This function returns MM_ERROR_NONE on success, or negative value
404  *                      with error code.
405  * @remark      value should be 0 ~ MAX
406  * @see         mm_sound_volume_get_value volume_type_t
407  * @pre         None.
408  * @post        Volume value will be changed to given value for given volume type.
409  * @par Example
410  */
411 int mm_sound_volume_set_value(volume_type_t type, const unsigned int value);
412
413
414 /**
415  * This function is to get volume level of certain volume type.
416  *
417  * @param       type                    [in]    volume type to get value.
418  * @param       value                   [out]   volume value.
419  *
420  * @return      This function returns MM_ERROR_NONE on success, or negative value
421  *                      with error code.
422  * @remark      None.
423  * @pre         None.
424  * @post        None.
425  * @see         volume_type_t mm_sound_volume_set_value
426  * @par Example
427  * @code
428 int value = 0;
429 int ret = 0;
430
431 ret = mm_sound_volume_get_value(VOLUME_TYPE_SYSTEM, &value);
432 if(ret < 0)
433 {
434         printf("Can not get volume\n");
435 }
436 else
437 {
438         printf("System type volume is %d\n", value);
439 }
440  * @endcode
441  * @see         mm_sound_volume_set_value
442  */
443 int mm_sound_volume_get_value(volume_type_t type, unsigned int *value);
444
445 int mm_sound_set_mute(volume_type_t type, bool mute);
446 int mm_sound_get_mute(volume_type_t type, bool *muted);
447
448 /**
449  * This function is to set sound filter and apply to selected stream type.
450  *
451  * @param       stream_type                     [in]    stream type to apply
452  * @param       filter_name                     [in]    name of filter module to apply
453  * @param       filter_parameters       [in]    extra filter parameters(optional)
454  * @param       filter_group            [in]    extra filter group(optional)
455  *
456  * @return      This function returns MM_ERROR_NONE on success, or negative value
457  *                      with error code.
458  * @remark      None
459  * @pre         None
460  * @post        None
461  * @see         None
462  */
463 int mm_sound_set_filter(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group);
464
465 /**
466  * This function is to unset sound filter and remove from selected stream type.
467  *
468  * @param       stream_type                     [in]    stream type to remove
469  *
470  * @return      This function returns MM_ERROR_NONE on success, or negative value
471  *                      with error code.
472  * @remark      None
473  * @pre         None
474  * @post        None
475  * @see         None
476  */
477 int mm_sound_unset_filter(const char *stream_type);
478
479 /**
480  * This function is to control filter configurations to selected stream type.
481  *
482  * @param       stream_type                     [in]    stream type to apply
483  * @param       filter_name                     [in]    specify filter module to apply
484  * @param       filter_controls         [in]    filter control parameters(e.g, "0.0, 0.1, 3.0")
485  *
486  * @return      This function returns MM_ERROR_NONE on success, or negative value
487  *                      with error code.
488  * @remark      None
489  * @pre         None
490  * @post        None
491  * @see         None
492  */
493 int mm_sound_control_filter(const char *stream_type, const char *filter_name, const char *filter_controls);
494
495 /**
496  * Terminate callback function type.
497  *
498  * @param       data            [in]    Argument passed when callback was set
499  * @param       id                      [in]    handle which has completed playing
500  *
501  * @return      No return value
502  * @remark      It is not allowed to call MMSound API recursively or do time-consuming
503  *                      task in this callback because this callback is called synchronously.
504  * @see         mm_sound_play_sound
505  */
506 typedef void (*mm_sound_stop_callback_func) (void *data, int id);
507
508 /*
509  * MMSound Play APIs
510  */
511
512 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 _completed_cb, void *data, int *handle);
513
514 /**
515  * This function is to stop playing system sound.
516  *
517  * @param       handle  [in] Handle of mm_sound_play_sound
518  *
519  * @return      This function returns MM_ERROR_NONE on success, or negative value
520  *                      with error code.
521  *
522  * @remark      When system sound is terminated with this function call, it does not
523  *                      call stop callback which was set when start playing system sound.
524  * @see         mm_sound_play_sound
525  * @pre         An sound play handle should be valid.
526  * @post        Playing sound file will be stopped.
527  * @par Example
528  * @code
529 int g_stop=0;
530 void _stop_callback(void* data)
531 {
532         printf("Stop callback\n");
533         g_stop = 1;
534 }
535
536 int play_file_one_second()
537 {
538         char filename[] ="testfile.wav";
539         volume_type_t volume = VOLUME_TYPE_SYSTEM;
540         int ret = 0;
541         int handle = -1;
542
543         ret = mm_sound_play_sound(filename, volume, _stop_callback, NULL, &handle);
544         if(ret < 0)
545         {
546                 printf("play file failed\n");
547         }
548         else
549         {
550                 printf("play file success\n");
551         }
552
553         sleep(1); //wait 1 second
554
555         ret = mm_sound_stop_sound(handle);
556         if(ret < 0)
557         {
558                 printf("stop failed\n");
559         }
560         else
561         {
562                 printf("play stopped\n");
563         }
564         return 0;
565 }
566  * @endcode
567  */
568 int mm_sound_stop_sound(int handle);
569
570
571 /**
572  * Enumerations for TONE
573  */
574
575 typedef enum  {
576         MM_SOUND_TONE_DTMF_0 = 0,                       /**< Predefined DTMF 0 */
577         MM_SOUND_TONE_DTMF_1,                           /**< Predefined DTMF 1 */
578         MM_SOUND_TONE_DTMF_2,                           /**< Predefined DTMF 2 */
579         MM_SOUND_TONE_DTMF_3,                           /**< Predefined DTMF 3 */
580         MM_SOUND_TONE_DTMF_4,                           /**< Predefined DTMF 4 */
581         MM_SOUND_TONE_DTMF_5,                           /**< Predefined DTMF 5 */
582         MM_SOUND_TONE_DTMF_6,                           /**< Predefined DTMF 6 */
583         MM_SOUND_TONE_DTMF_7,                           /**< Predefined DTMF 7 */
584         MM_SOUND_TONE_DTMF_8,                           /**< Predefined DTMF 8 */
585         MM_SOUND_TONE_DTMF_9,                           /**< Predefined DTMF 9 */
586         MM_SOUND_TONE_DTMF_S,                           /**< Predefined DTMF Star - Asterisk (*) */
587         MM_SOUND_TONE_DTMF_P,                           /**< Predefined DTMF sharP (#) */
588         MM_SOUND_TONE_DTMF_A,                           /**< Predefined DTMF A (A) */
589         MM_SOUND_TONE_DTMF_B,                           /**< Predefined DTMF B (B) */
590         MM_SOUND_TONE_DTMF_C,                           /**< Predefined DTMF C (C) */
591         MM_SOUND_TONE_DTMF_D,                           /**< Predefined DTMF D (D) */
592
593         /**< Pre-defined TONE */
594         MM_SOUND_TONE_SUP_DIAL,                         /**Call supervisory tone, Dial tone: CEPT: 425Hz, continuous */
595         MM_SOUND_TONE_ANSI_DIAL,                                /**Call supervisory tone, Dial tone: ANSI (IS-95): 350Hz+440Hz, continuous */
596         MM_SOUND_TONE_JAPAN_DIAL,                               /**Call supervisory tone, Dial tone: JAPAN: 400Hz, continuous*/
597         MM_SOUND_TONE_SUP_BUSY,                         /**Call supervisory tone, Busy: CEPT: 425Hz, 500ms ON, 500ms OFF... */
598         MM_SOUND_TONE_ANSI_BUSY,                                /**Call supervisory tone, Busy: ANSI (IS-95): 480Hz+620Hz, 500ms ON, 500ms OFF... */
599         MM_SOUND_TONE_JAPAN_BUSY,                               /**Call supervisory tone, Busy: JAPAN: 400Hz, 500ms ON, 500ms OFF...*/
600         MM_SOUND_TONE_SUP_CONGESTION,           /**Call supervisory tone, Congestion: CEPT, JAPAN: 425Hz, 200ms ON, 200ms OFF */
601         MM_SOUND_TONE_ANSI_CONGESTION,          /**Call supervisory tone, Congestion: ANSI (IS-95): 480Hz+620Hz, 250ms ON, 250ms OFF... */
602         MM_SOUND_TONE_SUP_RADIO_ACK,                    /**Call supervisory tone, Radio path acknowlegment : CEPT, ANSI: 425Hz, 200ms ON  */
603         MM_SOUND_TONE_JAPAN_RADIO_ACK,          /**Call supervisory tone, Radio path acknowlegment : JAPAN: 400Hz, 1s ON, 2s OFF...*/
604         MM_SOUND_TONE_SUP_RADIO_NOTAVAIL,               /**Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts */
605         MM_SOUND_TONE_SUP_ERROR,                                /**Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF... */
606         MM_SOUND_TONE_SUP_CALL_WAITING,         /**Call supervisory tone, Call Waiting: CEPT, JAPAN: 425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...  */
607         MM_SOUND_TONE_ANSI_CALL_WAITING,                /**Call supervisory tone, Call Waiting: ANSI (IS-95): 440 Hz, 300 ms ON, 9.7 s OFF, (100 ms ON, 100 ms OFF, 100 ms ON, 9.7s OFF ...) */
608         MM_SOUND_TONE_SUP_RINGTONE,                     /**Call supervisory tone, Ring Tone: CEPT, JAPAN: 425Hz, 1s ON, 4s OFF... */
609         MM_SOUND_TONE_ANSI_RINGTONE,                    /**Call supervisory tone, Ring Tone: ANSI (IS-95): 440Hz + 480Hz, 2s ON, 4s OFF... */
610         MM_SOUND_TONE_PROP_BEEP,                                /**General beep: 400Hz+1200Hz, 35ms ON */
611         MM_SOUND_TONE_PROP_ACK,                         /**Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts */
612         MM_SOUND_TONE_PROP_NACK,                                /**Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON */
613         MM_SOUND_TONE_PROP_PROMPT,                      /**Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON         */
614         MM_SOUND_TONE_PROP_BEEP2,                               /**Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON */
615         MM_SOUND_TONE_SUP_INTERCEPT,                                            /**Call supervisory tone (IS-95), intercept tone: alternating 440 Hz and 620 Hz tones, each on for 250 ms */
616         MM_SOUND_TONE_SUP_INTERCEPT_ABBREV,                             /**Call supervisory tone (IS-95), abbreviated intercept: intercept tone limited to 4 seconds */
617         MM_SOUND_TONE_SUP_CONGESTION_ABBREV,                            /**Call supervisory tone (IS-95), abbreviated congestion: congestion tone limited to 4 seconds */
618         MM_SOUND_TONE_SUP_CONFIRM,                                              /**Call supervisory tone (IS-95), confirm tone: a 350 Hz tone added to a 440 Hz tone repeated 3 times in a 100 ms on, 100 ms off cycle */
619         MM_SOUND_TONE_SUP_PIP,                                                  /**Call supervisory tone (IS-95), pip tone: four bursts of 480 Hz tone (0.1 s on, 0.1 s off). */
620         MM_SOUND_TONE_CDMA_DIAL_TONE_LITE,                              /**425Hz continuous */
621         MM_SOUND_TONE_CDMA_NETWORK_USA_RINGBACK,                /**CDMA USA Ringback: 440Hz+480Hz 2s ON, 4000 OFF ...*/
622         MM_SOUND_TONE_CDMA_INTERCEPT,                                   /**CDMA Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON ...*/
623         MM_SOUND_TONE_CDMA_ABBR_INTERCEPT,                              /**CDMA Abbr Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON */
624         MM_SOUND_TONE_CDMA_REORDER,                                             /**CDMA Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF... */
625         MM_SOUND_TONE_CDMA_ABBR_REORDER,                                /**CDMA Abbr Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF repeated for 8 times */
626         MM_SOUND_TONE_CDMA_NETWORK_BUSY,                                /**CDMA Network Busy tone: 480Hz+620Hz 500ms ON, 500ms OFF continuous */
627         MM_SOUND_TONE_CDMA_CONFIRM,                                             /**CDMA Confirm tone: 350Hz+440Hz 100ms ON, 100ms OFF repeated for 3 times */
628         MM_SOUND_TONE_CDMA_ANSWER,                                              /**CDMA answer tone: silent tone - defintion Frequency 0, 0ms ON, 0ms OFF */
629         MM_SOUND_TONE_CDMA_NETWORK_CALLWAITING,                 /**CDMA Network Callwaiting tone: 440Hz 300ms ON */
630         MM_SOUND_TONE_CDMA_PIP,                                                 /**CDMA PIP tone: 480Hz 100ms ON, 100ms OFF repeated for 4 times */
631         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL,             /**ISDN Call Signal Normal tone: {2091Hz 32ms ON, 2556 64ms ON} 20 times, 2091 32ms ON, 2556 48ms ON, 4s OFF */
632         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP, /**ISDN Call Signal Intergroup tone: {2091Hz 32ms ON, 2556 64ms ON} 8 times, 2091Hz 32ms ON, 400ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} 8times, 2091Hz 32ms ON, 4s OFF.*/
633         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI,             /**ISDN Call Signal SP PRI tone:{2091Hz 32ms ON, 2556 64ms ON} 4 times 2091Hz 16ms ON, 200ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} 4 times, 2091Hz 16ms ON, 200ms OFF */
634         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PAT3,               /**SDN Call sign PAT3 tone: silent tone */
635         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING,  /**ISDN Ping Ring tone: {2091Hz 32ms ON, 2556Hz 64ms ON} 5 times 2091Hz 20ms ON */
636         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PAT5,               /**ISDN Pat5 tone: silent tone */
637         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PAT6,               /**ISDN Pat6 tone: silent tone */
638         MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PAT7,               /**ISDN Pat7 tone: silent tone */
639         MM_SOUND_TONE_CDMA_HIGH_L,                                              /**TONE_CDMA_HIGH_L tone: {3700Hz 25ms, 4000Hz 25ms} 40 times 4000ms OFF, Repeat .... */
640         MM_SOUND_TONE_CDMA_MED_L,                                               /**TONE_CDMA_MED_L tone: {2600Hz 25ms, 2900Hz 25ms} 40 times 4000ms OFF, Repeat .... */
641         MM_SOUND_TONE_CDMA_LOW_L,                                               /**TONE_CDMA_LOW_L tone: {1300Hz 25ms, 1450Hz 25ms} 40 times, 4000ms OFF, Repeat .... */
642         MM_SOUND_TONE_CDMA_HIGH_SS,                                             /**CDMA HIGH SS tone: {3700Hz 25ms, 4000Hz 25ms} repeat 16 times, 400ms OFF, repeat .... */
643         MM_SOUND_TONE_CDMA_MED_SS,                                              /**CDMA MED SS tone: {2600Hz 25ms, 2900Hz 25ms} repeat 16 times, 400ms OFF, repeat .... */
644         MM_SOUND_TONE_CDMA_LOW_SS,                                              /**CDMA LOW SS tone: {1300z 25ms, 1450Hz 25ms} repeat 16 times, 400ms OFF, repeat .... */
645         MM_SOUND_TONE_CDMA_HIGH_SSL,                                            /**CDMA HIGH SSL tone: {3700Hz 25ms, 4000Hz 25ms} 8 times, 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 8 times, 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 16 times, 4000ms OFF, repeat ... */
646         MM_SOUND_TONE_CDMA_MED_SSL,                                             /**CDMA MED SSL tone: {2600Hz 25ms, 2900Hz 25ms} 8 times, 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 8 times, 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 16 times, 4000ms OFF, repeat ... */
647         MM_SOUND_TONE_CDMA_LOW_SSL,                                             /**CDMA LOW SSL tone: {1300Hz 25ms, 1450Hz 25ms} 8 times, 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 8 times, 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 16 times, 4000ms OFF, repeat ... */
648         MM_SOUND_TONE_CDMA_HIGH_SS_2,                                   /**CDMA HIGH SS2 tone: {3700Hz 25ms, 4000Hz 25ms} 20 times, 1000ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times, 3000ms OFF, repeat .... */
649         MM_SOUND_TONE_CDMA_MED_SS_2,                                            /**CDMA MED SS2 tone: {2600Hz 25ms, 2900Hz 25ms} 20 times, 1000ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times, 3000ms OFF, repeat .... */
650         MM_SOUND_TONE_CDMA_LOW_SS_2,                                            /**CDMA LOW SS2 tone: {1300Hz 25ms, 1450Hz 25ms} 20 times, 1000ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times, 3000ms OFF, repeat .... */
651         MM_SOUND_TONE_CDMA_HIGH_SLS,                                            /**CDMA HIGH SLS tone: {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times, 500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 3000ms OFF, REPEAT */
652         MM_SOUND_TONE_CDMA_MED_SLS,                                             /**CDMA MED SLS tone: {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 3000ms OFF, REPEAT */
653         MM_SOUND_TONE_CDMA_LOW_SLS,                                             /**CDMA LOW SLS tone: {1300Hz 25ms, 1450Hz 25ms} 10 times, 500ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times, 500ms OFF, {1300Hz 25ms, 1450Hz 25ms} 10 times, 3000ms OFF, REPEAT */
654         MM_SOUND_TONE_CDMA_HIGH_S_X4,                                   /**CDMA HIGH S X4 tone: {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 2500ms OFF, REPEAT.... */
655         MM_SOUND_TONE_CDMA_MED_S_X4,                                            /**CDMA MED S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT.... */
656         MM_SOUND_TONE_CDMA_LOW_S_X4,                                            /**CDMA LOW S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT....*/
657         MM_SOUND_TONE_CDMA_HIGH_PBX_L,                                  /**CDMA HIGH PBX L: {3700Hz 25ms, 4000Hz 25ms}20 times, 2000ms OFF, REPEAT.... */
658         MM_SOUND_TONE_CDMA_MED_PBX_L,                                   /**CDMA MED PBX L: {2600Hz 25ms, 2900Hz 25ms}20 times, 2000ms OFF, REPEAT.... */
659         MM_SOUND_TONE_CDMA_LOW_PBX_L,                                   /**CDMA LOW PBX L: {1300Hz 25ms,1450Hz 25ms}20 times, 2000ms OFF, REPEAT.... */
660         MM_SOUND_TONE_CDMA_HIGH_PBX_SS,                                 /**CDMA HIGH PBX SS tone: {3700Hz 25ms, 4000Hz 25ms} 8 times 200 ms OFF, {3700Hz 25ms 4000Hz 25ms}8 times, 2000ms OFF, REPEAT.... */
661         MM_SOUND_TONE_CDMA_MED_PBX_SS,                                  /**CDMA MED PBX SS tone: {2600Hz 25ms, 2900Hz 25ms} 8 times 200 ms OFF, {2600Hz 25ms 2900Hz 25ms}8 times, 2000ms OFF, REPEAT.... */
662         MM_SOUND_TONE_CDMA_LOW_PBX_SS,                                  /**CDMA LOW PBX SS tone: {1300Hz 25ms, 1450Hz 25ms} 8 times 200 ms OFF, {1300Hz 25ms 1450Hz 25ms}8 times, 2000ms OFF, REPEAT.... */
663         MM_SOUND_TONE_CDMA_HIGH_PBX_SSL,                                        /**CDMA HIGH PBX SSL tone:{3700Hz 25ms, 4000Hz 25ms} 8 times 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 8 times, 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 16 times, 1000ms OFF, REPEAT.... */
664         MM_SOUND_TONE_CDMA_MED_PBX_SSL,                                 /**CDMA MED PBX SSL tone:{2600Hz 25ms, 2900Hz 25ms} 8 times 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 8 times, 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 16 times, 1000ms OFF, REPEAT.... */
665         MM_SOUND_TONE_CDMA_LOW_PBX_SSL,                                 /**CDMA LOW PBX SSL tone:{1300Hz 25ms, 1450Hz 25ms} 8 times 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 8 times, 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 16 times, 1000ms OFF, REPEAT.... */
666         MM_SOUND_TONE_CDMA_HIGH_PBX_SLS,                                        /**CDMA HIGH PBX SLS tone:{3700Hz 25ms, 4000Hz 25ms} 8 times 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 16 times, 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 8 times, 1000ms OFF, REPEAT....  */
667         MM_SOUND_TONE_CDMA_MED_PBX_SLS,                                 /**CDMA MED PBX SLS tone:{2600Hz 25ms, 2900Hz 25ms} 8 times 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 16 times, 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 8 times, 1000ms OFF, REPEAT.... */
668         MM_SOUND_TONE_CDMA_LOW_PBX_SLS,                                 /**CDMA LOW PBX SLS tone:{1300Hz 25ms, 1450Hz 25ms} 8 times 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 16 times, 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 8 times, 1000ms OFF, REPEAT.... */
669         MM_SOUND_TONE_CDMA_HIGH_PBX_S_X4,                               /**CDMA HIGH PBX X S4 tone: {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF, {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF, {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF, {3700Hz 25ms 4000Hz 25ms} 8 times, 800ms OFF, REPEAT... */
670         MM_SOUND_TONE_CDMA_MED_PBX_S_X4,                                        /**CDMA MED PBX X S4 tone: {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF, {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF, {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF, {2600Hz 25ms 2900Hz 25ms} 8 times, 800ms OFF, REPEAT... */
671         MM_SOUND_TONE_CDMA_LOW_PBX_S_X4,                                        /**CDMA LOW PBX X S4 tone: {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF, {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF, {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF, {1300Hz 25ms 1450Hz 25ms} 8 times, 800ms OFF, REPEAT... */
672         MM_SOUND_TONE_CDMA_ALERT_NETWORK_LITE,                  /**CDMA Alert Network Lite tone: 1109Hz 62ms ON, 784Hz 62ms ON, 740Hz 62ms ON 622Hz 62ms ON, 1109Hz 62ms ON */
673         MM_SOUND_TONE_CDMA_ALERT_AUTOREDIAL_LITE,               /**CDMA Alert Auto Redial tone: {1245Hz 62ms ON, 659Hz 62ms ON} 3 times, 1245 62ms ON */
674         MM_SOUND_TONE_CDMA_ONE_MIN_BEEP,                                        /**CDMA One Min Beep tone: 1150Hz+770Hz 400ms ON */
675         MM_SOUND_TONE_CDMA_KEYPAD_VOLUME_KEY_LITE,              /**CDMA KEYPAD Volume key lite tone: 941Hz+1477Hz 120ms ON */
676         MM_SOUND_TONE_CDMA_PRESSHOLDKEY_LITE,                   /**CDMA PRESSHOLDKEY LITE tone: 587Hz 375ms ON, 1175Hz 125ms ON */
677         MM_SOUND_TONE_CDMA_ALERT_INCALL_LITE,                           /**CDMA ALERT INCALL LITE tone: 587Hz 62ms, 784 62ms, 831Hz 62ms, 784Hz 62ms, 1109 62ms, 784Hz 62ms, 831Hz 62ms, 784Hz 62ms*/
678         MM_SOUND_TONE_CDMA_EMERGENCY_RINGBACK,                  /**CDMA EMERGENCY RINGBACK tone: {941Hz 125ms ON, 10ms OFF} 3times 4990ms OFF, REPEAT... */
679         MM_SOUND_TONE_CDMA_ALERT_CALL_GUARD,                    /**CDMA ALERT CALL GUARD tone: {1319Hz 125ms ON, 125ms OFF} 3 times */
680         MM_SOUND_TONE_CDMA_SOFT_ERROR_LITE,                             /**CDMA SOFT ERROR LITE tone: 1047Hz 125ms ON, 370Hz 125ms */
681         MM_SOUND_TONE_CDMA_CALLDROP_LITE,                               /**CDMA CALLDROP LITE tone: 1480Hz 125ms, 1397Hz 125ms, 784Hz 125ms */
682         MM_SOUND_TONE_CDMA_NETWORK_BUSY_ONE_SHOT,               /**CDMA_NETWORK_BUSY_ONE_SHOT tone: 425Hz 500ms ON, 500ms OFF. */
683         MM_SOUND_TONE_CDMA_ABBR_ALERT,                                  /**CDMA_ABBR_ALERT tone: 1150Hz+770Hz 400ms ON */
684         MM_SOUND_TONE_CDMA_SIGNAL_OFF,                                  /**CDMA_SIGNAL_OFF - silent tone */
685         MM_SOUND_TONE_LOW_FRE,                                  /**100Hz continuous */
686         MM_SOUND_TONE_MED_FRE,                                  /**200Hz continuous */
687         MM_SOUND_TONE_HIGH_FRE,                                 /**300Hz continuous */
688         MM_SOUND_TONE_NUM,
689 } MMSoundTone_t;
690
691 typedef unsigned long sound_time_msec_t;                /**< millisecond unit */
692
693 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);
694
695 /*
696  * Enumerations of device & route
697  */
698
699 typedef enum {
700         MM_SOUND_DIRECTION_NONE,
701         MM_SOUND_DIRECTION_IN,                                                  /**< Capture */
702         MM_SOUND_DIRECTION_OUT,                                                 /**< Playback */
703 } mm_sound_direction;
704
705 typedef enum {
706         MM_SOUND_DEVICE_IN_NONE                         = 0x00,
707         MM_SOUND_DEVICE_IN_MIC                          = 0x01,         /**< Device builtin microphone */
708         MM_SOUND_DEVICE_IN_WIRED_ACCESSORY      = 0x02,         /**< Wired input devices */
709         MM_SOUND_DEVICE_IN_BT_SCO       = 0x08,         /**< Bluetooth SCO device */
710 } mm_sound_device_in;
711
712 typedef enum {
713         MM_SOUND_DEVICE_OUT_NONE                        = 0x000,
714         MM_SOUND_DEVICE_OUT_SPEAKER             = 0x001<<8,     /**< Device builtin speaker */
715         MM_SOUND_DEVICE_OUT_RECEIVER            = 0x002<<8,     /**< Device builtin receiver */
716         MM_SOUND_DEVICE_OUT_WIRED_ACCESSORY     = 0x004<<8,     /**< Wired output devices such as headphone, headset, and so on. */
717         MM_SOUND_DEVICE_OUT_BT_SCO                      = 0x008<<8,     /**< Bluetooth SCO device */
718         MM_SOUND_DEVICE_OUT_BT_A2DP             = 0x010<<8,     /**< Bluetooth A2DP device */
719         MM_SOUND_DEVICE_OUT_DOCK                        = 0x020<<8,     /**< DOCK device */
720         MM_SOUND_DEVICE_OUT_HDMI                        = 0x040<<8,     /**< HDMI device */
721         MM_SOUND_DEVICE_OUT_MIRRORING           = 0x080<<8,     /**< MIRRORING device */
722         MM_SOUND_DEVICE_OUT_USB_AUDIO           = 0x100<<8,     /**< USB Audio device */
723         MM_SOUND_DEVICE_OUT_MULTIMEDIA_DOCK     = 0x200<<8,     /**< Multimedia DOCK device */
724 } mm_sound_device_out;
725
726 typedef enum {
727         MM_SOUND_VOLUME_DEVICE_OUT_SPEAKER,                             /**< Device builtin speaker */
728         MM_SOUND_VOLUME_DEVICE_OUT_RECEIVER,                    /**< Device builtin receiver */
729         MM_SOUND_VOLUME_DEVICE_OUT_WIRED_ACCESSORY,             /**< Wired output devices such as headphone, headset, and so on. */
730         MM_SOUND_VOLUME_DEVICE_OUT_BT_SCO,                              /**< Bluetooth SCO device */
731         MM_SOUND_VOLUME_DEVICE_OUT_BT_A2DP,                             /**< Bluetooth A2DP device */
732         MM_SOUND_VOLUME_DEVICE_OUT_DOCK,                                /**< DOCK device */
733         MM_SOUND_VOLUME_DEVICE_OUT_HDMI,                                /**< HDMI device */
734         MM_SOUND_VOLUME_DEVICE_OUT_MIRRORING,                   /**< MIRRORING device */
735         MM_SOUND_VOLUME_DEVICE_OUT_USB_AUDIO,                   /**< USB Audio device */
736         MM_SOUND_VOLUME_DEVICE_OUT_MULTIMEDIA_DOCK,             /**< Multimedia DOCK device */
737 } mm_sound_volume_device_out_t;
738
739 /*
740  * MMSound Device APIs
741  */
742
743 typedef enum {
744         MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG      = 0x0001,  /**< Flag for input devices */
745         MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG     = 0x0002,  /**< Flag for output devices */
746         MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG    = 0x0004,  /**< Flag for input/output devices (both directions are available) */
747         MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG        = 0x0010,  /**< Flag for built-in devices */
748         MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG        = 0x0020,  /**< Flag for external devices */
749         MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG    = 0x1000,  /**< Flag for deactivated devices */
750         MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG      = 0x2000,  /**< Flag for activated devices */
751         MM_SOUND_DEVICE_ALL_FLAG                  = 0xFFFF,  /**< Flag for all devices */
752 } mm_sound_device_flags_e;
753
754 typedef enum {
755         MM_SOUND_DEVICE_IO_DIRECTION_IN           = 0x1,
756         MM_SOUND_DEVICE_IO_DIRECTION_OUT          = 0x2,
757         MM_SOUND_DEVICE_IO_DIRECTION_BOTH         = MM_SOUND_DEVICE_IO_DIRECTION_IN | MM_SOUND_DEVICE_IO_DIRECTION_OUT,
758 } mm_sound_device_io_direction_e;
759
760 typedef enum {
761         MM_SOUND_DEVICE_STATE_DEACTIVATED,
762         MM_SOUND_DEVICE_STATE_ACTIVATED,
763 } mm_sound_device_state_e;
764
765 typedef enum {
766         MM_SOUND_DEVICE_TYPE_BUILTIN_SPEAKER,   /**< Built-in speaker */
767         MM_SOUND_DEVICE_TYPE_BUILTIN_RECEIVER,  /**< Built-in receiver */
768         MM_SOUND_DEVICE_TYPE_BUILTIN_MIC,       /**< Built-in microphone */
769         MM_SOUND_DEVICE_TYPE_AUDIOJACK,         /**< Audio jack such as headphone, headset, and so on */
770         MM_SOUND_DEVICE_TYPE_BLUETOOTH,         /**< Bluetooth */
771         MM_SOUND_DEVICE_TYPE_BLUETOOTH_A2DP = MM_SOUND_DEVICE_TYPE_BLUETOOTH,    /**< Bluetooth A2DP */
772         MM_SOUND_DEVICE_TYPE_HDMI,              /**< HDMI */
773         MM_SOUND_DEVICE_TYPE_MIRRORING,         /**< MIRRORING */
774         MM_SOUND_DEVICE_TYPE_USB_AUDIO,         /**< USB Audio */
775         MM_SOUND_DEVICE_TYPE_BLUETOOTH_SCO,     /**< Bluetooth SCO */
776         MM_SOUND_DEVICE_TYPE_RAOP,              /**< RAOP Audio */
777 } mm_sound_device_type_e;
778
779 typedef void *MMSoundDevice_t;          /**< MMsound Device handle */
780 typedef void *MMSoundDeviceList_t;      /**< MMsound Device list handle */
781 typedef void (*mm_sound_device_connected_cb) (MMSoundDevice_t device_h, bool is_connected, void *user_data);
782 typedef void (*mm_sound_device_info_changed_cb) (MMSoundDevice_t device_h, int changed_info_type, void *user_data);
783 typedef void (*mm_sound_device_state_changed_cb) (MMSoundDevice_t device_h, mm_sound_device_state_e state, void *user_data);
784 typedef void (*mm_sound_device_running_changed_cb) (MMSoundDevice_t device_h, bool is_running, void *user_data);
785
786 int mm_sound_add_device_connected_callback(int flags, mm_sound_device_connected_cb func, void *user_data, unsigned int *id);
787 int mm_sound_remove_device_connected_callback(unsigned int id);
788 int mm_sound_add_device_information_changed_callback(int flags, mm_sound_device_info_changed_cb func, void *user_data, unsigned int *id);
789 int mm_sound_remove_device_information_changed_callback(unsigned int id);
790 int mm_sound_add_device_state_changed_callback(int flags, mm_sound_device_state_changed_cb func, void *user_data, unsigned int *id);
791 int mm_sound_remove_device_state_changed_callback(unsigned int id);
792 int mm_sound_add_device_running_changed_callback(int flags, mm_sound_device_running_changed_cb func, void *user_data, unsigned int *id);
793 int mm_sound_remove_device_running_changed_callback(unsigned int id);
794
795 int mm_sound_get_current_device_list(mm_sound_device_flags_e device_mask, MMSoundDeviceList_t *device_list);
796 int mm_sound_get_device_list(int device_mask, MMSoundDeviceList_t *device_list);
797 /* Free this device handle with mm_sound_free_device */
798 int mm_sound_get_device_by_id(int device_id, MMSoundDevice_t *device);
799 int mm_sound_free_device_list(MMSoundDeviceList_t device_list);
800 /* Use this only for the device handle which got from mm_sound_get_device_by_id */
801 int mm_sound_free_device(MMSoundDevice_t device_h);
802 int mm_sound_get_next_device(MMSoundDeviceList_t device_list, MMSoundDevice_t *device);
803 int mm_sound_get_prev_device(MMSoundDeviceList_t device_list, MMSoundDevice_t *device);
804 int mm_sound_get_device_type(MMSoundDevice_t device_h, mm_sound_device_type_e *type);
805 int mm_sound_get_device_io_direction(MMSoundDevice_t device_h, mm_sound_device_io_direction_e *io_direction);
806 int mm_sound_get_device_id(MMSoundDevice_t device_h, int *id);
807 int mm_sound_get_device_state(MMSoundDevice_t device_h, mm_sound_device_state_e *state);
808 int mm_sound_get_device_name(MMSoundDevice_t device_h, char **name);
809 int mm_sound_get_device_vendor_id(MMSoundDevice_t device_h, int *vendor_id);
810 int mm_sound_get_device_product_id(MMSoundDevice_t device_h, int *product_id);
811
812 /**
813  * Active device changed callback function type.
814  *
815  * @param       user_data               [in]    Argument passed when callback has called
816  *
817  * @return      No return value
818  * @remark      None.
819  * @see         mm_sound_add_active_device_changed_callback mm_sound_remove_active_device_changed_callback
820  */
821 typedef void (*mm_sound_active_device_changed_cb) (mm_sound_device_in device_in, mm_sound_device_out device_out, void *user_data);
822
823 typedef void (*mm_sound_test_cb) (int a, void *user_data);
824 int mm_sound_test(int a, int b, int* get);
825 int mm_sound_add_test_callback(mm_sound_test_cb func, void *user_data, unsigned int *id);
826 int mm_sound_remove_test_callback(unsigned int sub_id);
827
828 void mm_sound_convert_volume_type_to_stream_type(int volume_type, char *stream_type);
829
830 int mm_sound_is_stream_on_device(int stream_id, MMSoundDevice_t device_h, bool *is_on);
831 int mm_sound_is_stream_on_device_by_id(int stream_id, int device_id, bool *is_on);
832 int mm_sound_is_device_running(MMSoundDevice_t device_h, bool *is_running);
833
834 #ifdef TIZEN_TV
835 void mm_sound_dotnet_cleanup(int signo);
836 #endif
837
838 /**
839         @}
840  */
841
842 #ifdef __cplusplus
843 }
844 #endif
845
846 #endif  /* __MM_SOUND_H__ */
847