AudioHardware: Dispatch setParameters to input and output
[tinyalsa-audio.git] / AudioRILInterface.cpp
1 /*
2  * Copyright (C) 2012 Paul Kocialkowski <contact@paulk.fr>
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <dlfcn.h>
18
19 #define LOG_TAG "AudioHardware"
20 #include <cutils/log.h>
21
22 #include "AudioHardware.h"
23 #include "AudioRILInterface.h"
24
25 namespace android {
26
27 TinyALSAAudioRILInterface::TinyALSAAudioRILInterface() :
28         mInterface(NULL)
29 {
30         void *mDlHandle = NULL;
31
32         LOGD("AudioRILInterface()");
33
34         mDlHandle = dlopen(AUDIO_RIL_INTERFACE_LIB, RTLD_NOW);
35         if(mDlHandle != NULL) {
36                 mInterfaceOpen = (struct audio_ril_interface *(*)(void))
37                         dlsym(mDlHandle, "audio_ril_interface_open");
38                 mInterfaceClose = (void (*)(struct audio_ril_interface *))
39                         dlsym(mDlHandle, "audio_ril_interface_close");
40
41                 if(mInterfaceOpen == NULL || mInterfaceClose == NULL) {
42                         LOGE("AudioRILInterface(): Unable to get the functions from %s",
43                                 AUDIO_RIL_INTERFACE_LIB);
44                 } else {
45                         mInterface = mInterfaceOpen();
46
47                         if(mInterface == NULL) {
48                                 LOGE("AudioRILInterface(): Unable to get interface");
49                         }
50                 }
51         } else {
52                 LOGE("AudioRILInterface(): Unable to dlopen %s", AUDIO_RIL_INTERFACE_LIB);
53         }
54 }
55
56 TinyALSAAudioRILInterface::~TinyALSAAudioRILInterface()
57 {
58         LOGD("~AudioRILInterface()");
59
60         dlclose(mDlHandle);
61         mDlHandle = NULL;
62         mInterface = NULL;
63 }
64
65 status_t TinyALSAAudioRILInterface::setMode(int mode)
66 {
67         int rc;
68
69         LOGD("TinyALSAAudioRILInterface::setMode(%d)", mode);
70
71         if(mInterface == NULL || mInterface->mode == NULL)
72                 return BAD_VALUE;
73
74         rc = mInterface->mode(mInterface->pdata, mode);
75         if(rc < 0) {
76                 LOGD("TinyALSAAudioRILInterface::setMode(): Error");
77                 return BAD_VALUE;
78         }
79
80         return NO_ERROR;
81 }
82
83 status_t TinyALSAAudioRILInterface::setMicMute(bool mute)
84 {
85         int rc;
86
87         LOGD("TinyALSAAudioRILInterface::setMicMute(%d)", (int) mute);
88
89         if(mInterface == NULL || mInterface->mic_mute == NULL)
90                 return BAD_VALUE;
91
92         rc = mInterface->mic_mute(mInterface->pdata, mute);
93         if(rc < 0) {
94                 LOGD("TinyALSAAudioRILInterface::setMicMute(): Error");
95                 return BAD_VALUE;
96         }
97
98         return NO_ERROR;
99 }
100
101 status_t TinyALSAAudioRILInterface::setVoiceVolume(float volume)
102 {
103         int rc;
104
105         LOGD("TinyALSAAudioRILInterface::setVoiceVolume(%f)", volume);
106
107         if(mInterface == NULL || mInterface->voice_volume == NULL)
108                 return BAD_VALUE;
109
110         rc = mInterface->voice_volume(mInterface->pdata, volume);
111         if(rc < 0) {
112                 LOGD("TinyALSAAudioRILInterface::setVoiceVolume(): Error");
113                 return BAD_VALUE;
114         }
115
116         return NO_ERROR;
117 }
118
119 status_t TinyALSAAudioRILInterface::setRouting(int route)
120 {
121         int rc;
122
123         LOGD("TinyALSAAudioRILInterface::setRouting(%d)", route);
124
125         if(mInterface == NULL || mInterface->routing == NULL)
126                 return BAD_VALUE;
127
128         rc = mInterface->routing(mInterface->pdata, route);
129         if(rc < 0) {
130                 LOGD("TinyALSAAudioRILInterface::setRouting(): Error");
131                 return BAD_VALUE;
132         }
133
134         return NO_ERROR;
135 }
136
137 }; // namespace android