forked from Lainports/opnsense-ports
180 lines
4.4 KiB
C
180 lines
4.4 KiB
C
--- src/oss_backend.c.orig 2013-02-25 16:52:49.000000000 +0100
|
|
+++ src/oss_backend.c 2015-03-07 20:58:26.522101000 +0100
|
|
@@ -22,7 +22,7 @@
|
|
//##############################################################################
|
|
|
|
#include OSS_HEADER
|
|
-#include <stropts.h>
|
|
+#include <sys/soundcard.h>
|
|
#include <fcntl.h>
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
@@ -30,12 +30,16 @@
|
|
|
|
#include "oss_backend.h"
|
|
|
|
+#define MIXT_MONOSLIDER16 19
|
|
+#define MIXT_STEREOSLIDER16 20
|
|
+#define MIXT_MUTE 21
|
|
+
|
|
//##############################################################################
|
|
// Static variables
|
|
//##############################################################################
|
|
static char * m_channel = NULL;
|
|
static GList * m_channel_names = NULL;
|
|
-static int m_actual_maxvalue = 0;
|
|
+//static int m_actual_maxvalue = 0;
|
|
static int m_mixer_fd = -1;
|
|
static oss_mixext m_ext;
|
|
|
|
@@ -44,6 +48,7 @@ static oss_mixext m_ext;
|
|
//##############################################################################
|
|
static int get_raw_value()
|
|
{
|
|
+#if 0
|
|
assert(m_mixer_fd != -1);
|
|
|
|
oss_mixer_value vr;
|
|
@@ -51,7 +56,7 @@ static int get_raw_value()
|
|
vr.ctrl = m_ext.ctrl;
|
|
vr.timestamp = m_ext.timestamp;
|
|
|
|
- int result = ioctl(m_mixer_fd, SNDCTL_MIX_READ, &vr);
|
|
+ int result = ioctl(m_mixer_fd, SOUND_MIXER_READ_VOLUME, &vr);
|
|
if(result == -1)
|
|
return 0;
|
|
|
|
@@ -78,6 +83,7 @@ static int get_raw_value()
|
|
return short_value->lower;
|
|
}
|
|
|
|
+#endif
|
|
return 0;
|
|
}
|
|
|
|
@@ -97,9 +103,20 @@ const GList * oss_get_channel_names()
|
|
int oss_get_volume()
|
|
{
|
|
assert(m_mixer_fd != -1);
|
|
+#if 0
|
|
if(m_actual_maxvalue == 0)
|
|
return 0;
|
|
return 100 * get_raw_value() / m_actual_maxvalue;
|
|
+#endif
|
|
+
|
|
+ int current_volume;
|
|
+ if (ioctl(m_mixer_fd, SOUND_MIXER_READ_VOLUME, ¤t_volume) == -1) {
|
|
+ perror("Cannot read volume!");
|
|
+ exit(EXIT_FAILURE);
|
|
+ }
|
|
+
|
|
+ /* Only the left channel is returned */
|
|
+ return current_volume & 0x7f;
|
|
}
|
|
|
|
gboolean oss_get_mute()
|
|
@@ -108,6 +125,7 @@ gboolean oss_get_mute()
|
|
|
|
gboolean mute = FALSE;
|
|
|
|
+#if 0
|
|
// Save current control;
|
|
int parent = m_ext.parent;
|
|
int control = m_ext.ctrl;
|
|
@@ -132,6 +150,7 @@ gboolean oss_get_mute()
|
|
// Restore to previous control
|
|
m_ext.ctrl = control;
|
|
ioctl(m_mixer_fd, SNDCTL_MIX_EXTINFO, &m_ext);
|
|
+#endif
|
|
|
|
return mute;
|
|
}
|
|
@@ -148,12 +167,13 @@ void oss_setup(const gchar * card, const
|
|
char * devmixer;
|
|
if((devmixer=getenv("OSS_MIXERDEV")) == NULL)
|
|
devmixer = "/dev/mixer";
|
|
- if((m_mixer_fd = open(devmixer, O_RDWR, 0)) == -1)
|
|
+ if((m_mixer_fd = open(devmixer, O_RDWR)) == -1)
|
|
{
|
|
perror(devmixer);
|
|
exit(1);
|
|
}
|
|
|
|
+#if 0
|
|
// Check that there is at least one mixer
|
|
int nmix;
|
|
ioctl(m_mixer_fd, SNDCTL_MIX_NRMIX, &nmix);
|
|
@@ -163,6 +183,7 @@ void oss_setup(const gchar * card, const
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
+
|
|
m_ext.dev=0;
|
|
m_ext.ctrl = 0;
|
|
while(ioctl(m_mixer_fd, SNDCTL_MIX_EXTINFO, &m_ext) >= 0)
|
|
@@ -175,6 +196,7 @@ void oss_setup(const gchar * card, const
|
|
}
|
|
m_ext.ctrl++;
|
|
}
|
|
+#endif
|
|
|
|
// Setup channel using the provided channelname
|
|
if(channel != NULL)
|
|
@@ -195,6 +217,7 @@ void oss_set_channel(const gchar * chann
|
|
g_free(m_channel);
|
|
m_channel = g_strdup(channel);
|
|
|
|
+#if 0
|
|
// Find channel and then return
|
|
m_ext.dev=0;
|
|
m_ext.ctrl = 0;
|
|
@@ -207,6 +230,7 @@ void oss_set_channel(const gchar * chann
|
|
}
|
|
m_ext.ctrl++;
|
|
}
|
|
+#endif
|
|
}
|
|
|
|
void oss_set_mute(gboolean mute)
|
|
@@ -219,6 +243,7 @@ void oss_set_mute(gboolean mute)
|
|
|
|
// Check for mute in this group
|
|
m_ext.ctrl = 0;
|
|
+#if 0
|
|
while(ioctl(m_mixer_fd, SNDCTL_MIX_EXTINFO, &m_ext) >= 0)
|
|
{
|
|
if(m_ext.parent == parent && m_ext.type == MIXT_MUTE)
|
|
@@ -239,6 +264,7 @@ void oss_set_mute(gboolean mute)
|
|
m_ext.ctrl = control;
|
|
ioctl(m_mixer_fd, SNDCTL_MIX_EXTINFO, &m_ext);
|
|
|
|
+#endif
|
|
// If no mute control was found, revert to setting the volume to zero
|
|
if(!mute_found && mute)
|
|
{
|
|
@@ -251,6 +277,7 @@ void oss_set_volume(int volume)
|
|
assert(m_mixer_fd != -1);
|
|
assert(volume >= 0 && volume <= 100);
|
|
|
|
+#if 0
|
|
oss_mixer_value vr;
|
|
vr.dev = m_ext.dev;
|
|
vr.ctrl = m_ext.ctrl;
|
|
@@ -286,9 +313,14 @@ void oss_set_volume(int volume)
|
|
default:
|
|
return;
|
|
}
|
|
-
|
|
- ioctl(m_mixer_fd, SNDCTL_MIX_WRITE, &vr);
|
|
-
|
|
+#endif
|
|
+ volume = (volume << 8) | volume;
|
|
+ if(ioctl(m_mixer_fd, SOUND_MIXER_WRITE_VOLUME, &volume) == -1) {
|
|
+ perror("Mixer write failed");
|
|
+ exit(EXIT_FAILURE);
|
|
+ }
|
|
+#if 0
|
|
if(volume == 100)
|
|
m_actual_maxvalue = get_raw_value();
|
|
+#endif
|
|
}
|