OSDN Git Service

More generic support for poll descriptors
[android-x86/external-alsa-lib.git] / include / mixer.h
1 /****************************************************************************
2  *                                                                          *
3  *                               mixer.h                                    *
4  *                           Mixer Interface                                *
5  *                                                                          *
6  ****************************************************************************/
7
8 typedef struct _snd_mixer snd_mixer_t;
9 typedef struct _snd_mixer_class snd_mixer_class_t;
10 typedef struct _snd_mixer_info snd_mixer_info_t;
11 typedef struct _snd_mixer_elem snd_mixer_elem_t;
12 typedef int (*snd_mixer_callback_t)(snd_mixer_t *ctl,
13                                     snd_ctl_event_type_t event,
14                                     snd_mixer_elem_t *elem);
15 typedef int (*snd_mixer_elem_callback_t)(snd_mixer_elem_t *elem,
16                                          snd_ctl_event_type_t event);
17 typedef int (*snd_mixer_compare_t)(const snd_mixer_elem_t *e1,
18                                    const snd_mixer_elem_t *e2);
19
20 enum _snd_mixer_elem_type {
21         SND_MIXER_ELEM_SIMPLE,
22         SND_MIXER_ELEM_LAST = SND_MIXER_ELEM_SIMPLE,
23 };
24
25 #ifdef SND_ENUM_TYPECHECK
26 typedef struct __snd_mixer_elem_type *snd_mixer_elem_type_t;
27 #else
28 typedef enum _snd_mixer_elem_type snd_mixer_elem_type_t;
29 #endif
30
31 #define SND_MIXER_ELEM_SIMPLE ((snd_mixer_elem_type_t) SND_MIXER_ELEM_SIMPLE)
32 #define SND_MIXER_ELEM_LAST ((snd_mixer_elem_type_t) SND_MIXER_ELEM_LAST)
33
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 int snd_mixer_open(snd_mixer_t **mixer);
40 int snd_mixer_close(snd_mixer_t *mixer);
41 int snd_mixer_info(snd_mixer_t *mixer, snd_mixer_info_t *info);
42 snd_mixer_elem_t *snd_mixer_first_elem(snd_mixer_t *mixer);
43 snd_mixer_elem_t *snd_mixer_last_elem(snd_mixer_t *mixer);
44 int snd_mixer_handle_events(snd_mixer_t *mixer);
45 int snd_mixer_attach(snd_mixer_t *mixer, const char *name);
46 int snd_mixer_detach(snd_mixer_t *mixer, const char *name);
47 int snd_mixer_poll_descriptors(snd_mixer_t *mixer, struct pollfd *pfds, unsigned int space);
48 int snd_mixer_load(snd_mixer_t *mixer);
49 int snd_mixer_wait(snd_mixer_t *mixer, int timeout);
50 int snd_mixer_set_compare(snd_mixer_t *mixer, snd_mixer_compare_t msort);
51
52 snd_mixer_elem_t *snd_mixer_elem_next(snd_mixer_elem_t *elem);
53 snd_mixer_elem_t *snd_mixer_elem_prev(snd_mixer_elem_t *helem);
54
55 int snd_mixer_class_unregister(snd_mixer_class_t *clss);
56
57 #ifdef __cplusplus
58 }
59 #endif
60
61 /*
62  *  Simple (legacy) mixer API
63  */
64
65 enum _snd_mixer_selem_channel_id {
66         SND_MIXER_SCHN_UNKNOWN = -1,
67         SND_MIXER_SCHN_FRONT_LEFT = 0,
68         SND_MIXER_SCHN_FRONT_RIGHT,
69         SND_MIXER_SCHN_FRONT_CENTER,
70         SND_MIXER_SCHN_REAR_LEFT,
71         SND_MIXER_SCHN_REAR_RIGHT,
72         SND_MIXER_SCHN_WOOFER,
73         SND_MIXER_SCHN_LAST = 31,
74         SND_MIXER_SCHN_MONO = SND_MIXER_SCHN_FRONT_LEFT
75 };
76
77 /* Simple mixer */
78
79 typedef struct _snd_mixer_selem_info snd_mixer_selem_info_t;
80 typedef struct _snd_mixer_selem_value snd_mixer_selem_value_t;
81 typedef struct _snd_mixer_selem_id snd_mixer_selem_id_t;
82
83 #ifdef SND_ENUM_TYPECHECK
84 typedef struct __snd_mixer_selem_channel_id *snd_mixer_selem_channel_id_t;
85 #else
86 typedef enum _snd_mixer_selem_channel_id snd_mixer_selem_channel_id_t;
87 #endif
88
89 #define SND_MIXER_SCHN_UNKNOWN ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_UNKNOWN)
90 #define SND_MIXER_SCHN_FRONT_LEFT ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_FRONT_LEFT)
91 #define SND_MIXER_SCHN_FRONT_RIGHT ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_FRONT_RIGHT)
92 #define SND_MIXER_SCHN_FRONT_CENTER ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_FRONT_CENTER)
93 #define SND_MIXER_SCHN_REAR_LEFT ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_REAR_LEFT)
94 #define SND_MIXER_SCHN_REAR_RIGHT ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_REAR_RIGHT)
95 #define SND_MIXER_SCHN_WOOFER ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_WOOFER)
96 #define SND_MIXER_SCHN_LAST ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_LAST)
97 #define SND_MIXER_SCHN_MONO ((snd_mixer_selem_channel_id_t) SND_MIXER_SCHN_MONO)
98
99 #ifdef __cplusplus
100 extern "C" {
101 #endif
102
103 const char *snd_mixer_selem_channel_name(snd_mixer_selem_channel_id_t channel);
104
105 int snd_mixer_selem_register(snd_mixer_t *mixer, snd_mixer_class_t **classp);
106 void snd_mixer_selem_get_id(snd_mixer_elem_t *element,
107                             snd_mixer_selem_id_t *id);
108 snd_mixer_elem_t *snd_mixer_find_selem(snd_mixer_t *mixer,
109                                        const snd_mixer_selem_id_t *id);
110 int snd_mixer_selem_info(snd_mixer_elem_t *element,
111                          snd_mixer_selem_info_t *info);
112 int snd_mixer_selem_read(snd_mixer_elem_t *element,
113                          snd_mixer_selem_value_t *value);
114 int snd_mixer_selem_write(snd_mixer_elem_t *element,
115                           const snd_mixer_selem_value_t *value);
116
117 int snd_mixer_selem_info_is_mono(const snd_mixer_selem_info_t *info);
118 int snd_mixer_selem_info_has_channel(const snd_mixer_selem_info_t *obj, snd_mixer_selem_channel_id_t channel);
119 long snd_mixer_selem_value_get_volume(const snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel);
120 void snd_mixer_selem_value_set_volume(snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel, long value);
121 int snd_mixer_selem_value_get_mute(const snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel);
122 int snd_mixer_selem_value_get_capture(const snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel);
123 void snd_mixer_selem_value_set_mute(snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel, int mute);
124 void snd_mixer_selem_value_set_capture(snd_mixer_selem_value_t *obj, snd_mixer_selem_channel_id_t channel, int capture);
125 void snd_mixer_selem_value_set_mute_all(snd_mixer_selem_value_t *obj, int mute);
126 void snd_mixer_selem_value_set_capture_all(snd_mixer_selem_value_t *obj, int capture);
127 void snd_mixer_selem_value_set_volume_all(snd_mixer_selem_value_t *obj, long value);
128
129 #ifdef __cplusplus
130 }
131 #endif
132