AudioHardware: Dispatch setParameters to input and output
[tinyalsa-audio.git] / Mixer.h
1 /*
2  * Copyright (C) 2012 Paul Kocialkowski <contact@paulk.fr>
3  * 
4  * This is based on TinyHardware:
5  * Copyright 2011 Wolfson Microelectronics plc
6  *
7  * This is based on Nexus S AudioHardware implementation:
8  * Copyright 2010, The Android Open-Source Project
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  */
22
23 #ifndef TINYALSA_MIXER_H
24 #define TINYALSA_MIXER_H
25
26 #include <media/AudioSystem.h>
27
28 #include "tinyalsa/asoundlib.h"
29 #include <expat.h>
30
31 namespace android {
32
33 #define TINYALSA_MIXER_CONFIG_FILE      "/system/etc/tinyalsa-audio.xml"
34
35 enum tinyalsa_mixer_data_type {
36         MIXER_DATA_TYPE_CTL,
37         MIXER_DATA_TYPE_WRITE,
38         MIXER_DATA_TYPE_MAX
39 };
40
41 struct list_head {
42         struct list_head *prev;
43         struct list_head *next;
44
45         void *data;
46 };
47
48 struct tinyalsa_mixer_data {
49         char *name;
50         char *value;
51         char *attr;
52
53         tinyalsa_mixer_data_type type;
54 };
55
56 struct tinyalsa_mixer_device_name {
57         int type;
58         char *name;
59 };
60
61 struct tinyalsa_mixer_mode_name {
62         int mode;
63         char *name;
64 };
65
66 struct tinyalsa_mixer_device {
67         int type;
68         int mode;
69
70         int enabled;
71         struct list_head *enable;
72         struct list_head *disable;
73 };
74
75 struct tinyalsa_mixer_config_data {
76         struct tinyalsa_mixer_device *device;
77         struct list_head **list_start;
78         struct list_head *list;
79 };
80
81 class TinyALSAMixer
82 {
83 public:
84         TinyALSAMixer();
85         virtual ~TinyALSAMixer();
86         virtual status_t route(int type);
87         virtual status_t route(int type, int mode);
88         status_t setVoiceVolume(float volume);
89         status_t setMicMute(bool state);
90
91 private:
92         struct mixer *mMixer;
93         int mMainInstance;
94
95 };
96
97 }; // namespace android
98
99 #endif