]> git.sur5r.net Git - i3/i3status/commitdiff
Support mixer_idx with OSS
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 19 Mar 2013 17:32:08 +0000 (18:32 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 19 Mar 2013 18:53:26 +0000 (19:53 +0100)
make mixer_idx load the default mixer

man/i3status.man
src/print_volume.c

index 0fccb7e417376be1bb5bb0d85a2f3cf428a6a47d..4bf67498e055b9b3dc5b53cdcdc3297719631450 100644 (file)
@@ -312,9 +312,10 @@ details on the format string.
 Outputs the volume of the specified mixer on the specified device. Works only
 on Linux because it uses ALSA.
 A simplified configuration can be used on FreeBSD and OpenBSD due to
-the lack of ALSA,  the +device+, +mixer+ and +mixder_idx+ options can be
+the lack of ALSA,  the +device+ and +mixer+ options can be
 ignored on these systems. On these systems the OSS API is used instead to
-query +/dev/mixer+ directly.
+query +/dev/mixer+ directly if +mixer_dix+ is -1, otherwise
++/dev/mixer++mixer_idx+.
 
 *Example order*: +volume master+
 
index 1b03e5efa01f1547bfb3b082ca0e38b249dce3aa..6a87b1e48aa40530c530e67d96f702a150a14e0d 100644 (file)
@@ -175,12 +175,22 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *
        }
 #endif
 #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-        char mixerpath[] = "/dev/mixer";
+        char *mixerpath;
+        char defaultmixer[] = "/dev/mixer";
         int mixfd, vol, devmask = 0;
         pbval = 1;
 
+        if (mixer_idx > 0)
+                asprintf(&mixerpath, "/dev/mixer%d", mixer_idx);
+        else
+                mixerpath = defaultmixer;
+
         if ((mixfd = open(mixerpath, O_RDWR)) < 0)
                 return;
+
+        if (mixer_idx > 0)
+                free(mixerpath);
+
         if (ioctl(mixfd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
                 return;
         if (ioctl(mixfd, MIXER_READ(0),&vol) == -1)