summaryrefslogtreecommitdiff
path: root/dxr3audio-oss.c
diff options
context:
space:
mode:
Diffstat (limited to 'dxr3audio-oss.c')
-rw-r--r--dxr3audio-oss.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/dxr3audio-oss.c b/dxr3audio-oss.c
index c13e91d..148c900 100644
--- a/dxr3audio-oss.c
+++ b/dxr3audio-oss.c
@@ -24,6 +24,7 @@
#include "dxr3audio-oss.h"
#include "dxr3device.h"
+#include "settings.h"
static const char *DEV_DXR3_OSS = "_ma";
@@ -91,21 +92,34 @@ void cAudioOss::poll(cPoller &poller)
void cAudioOss::setDigitalAudio(bool on)
{
- if (digitalAudio == on) {
+ if (digitalAudio == on)
return;
- }
- uint32_t ioval = 0;
+ reconfigure();
- if (on) {
- ioval = EM8300_AUDIOMODE_DIGITALPCM;
+ digitalAudio = on;
+}
+
+void cAudioOss::reconfigure()
+{
+ uint32_t ioval = 0;
+ dsyslog("[dxr3-oss] reconfigure");
+
+ // this is quite an imporant part, as we need to
+ // decide how we set the audiomode of oss device.
+ if (digitalAudio) {
+ ioval = EM8300_AUDIOMODE_DIGITALAC3;
} else {
- ioval = EM8300_AUDIOMODE_ANALOG;
+
+ // digital or analog pcm?
+ if (cSettings::instance()->useDigitalOut()) {
+ ioval = EM8300_AUDIOMODE_DIGITALPCM;
+ } else {
+ ioval = EM8300_AUDIOMODE_ANALOG;
+ }
}
// we need to do it this way, as we dont have access
// to the file handle for the conrtol sub device.
cDxr3Device::instance()->ossSetPlayMode(ioval);
-
- digitalAudio = on;
}