[note new email address]

jaroslav:  i've fixed the problem and made a patch.

i'm using the delta audiophile 2496.  the following two lines do not work.
they end up muting both sides.
  amixer cset iface=MIXER,name='Multi Capture Switch',index=[0-9] 0,1
  amixer cset iface=MIXER,name='Multi Playback Switch',index=[0-9] 0,1

i can get values=off,off, values=on,on, values=off,on, and values=on,off
using envy24control, but i could not get values=off,on using amixer, as
there was no statement(?) to adjust ptr when the first value was 0 or
equivalent (see below).  i've fixed this and attached a patch.  i made
sure that it works with the latest cvs version of amixer (which has not
changed since at least 10/20/01 other than the address of the fsf).

woohoo!  my first real contribution to linux audio...

-dave

# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=on,on
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0,1
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1,0
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=on,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 0,0 (redundant)
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=off,off
# amixer cset iface=MIXER,name='Multi Capture Switch',index=0 1,1 (redundant)
numid=25,iface=MIXER,name='Multi Capture Switch'
  ; type=BOOLEAN,access=rw---,values=2
  : values=on,on

diff -Naur amixer/amixer.c amixer.patched/amixer.c
--- amixer/amixer.c     Thu Sep 27 19:14:26 2001
+++ amixer.patched/amixer.c     Wed Jan  9 22:25:50 2002
@@ -951,8 +951,21 @@
                                        tmp = snd_ctl_elem_value_get_boolean(control, 
idx);
                                        tmp = tmp > 0 ? 0 : 1;
                                        ptr += 6;
-                               } else if (atoi(ptr)) {
+                               } else if (!strncasecmp(ptr, "1", 1)) {
                                        tmp = 1;
+                                       while (isdigit(*ptr))
+                                               ptr++;
+                               } else if (!strncasecmp(ptr, "off", 3)) {
+                                       tmp = 0;
+                                       ptr += 3;
+                               } else if (!strncasecmp(ptr, "down", 4)) {
+                                       tmp = 0;
+                                       ptr += 4;
+                               } else if (!strncasecmp(ptr, "no", 2)) {
+                                       tmp = 0;
+                                       ptr += 2;
+                               } else if (!strncasecmp(ptr, "0", 1)) {
+                                       tmp = 0;
                                        while (isdigit(*ptr))
                                                ptr++;
                                }

Reply via email to