Introduction
Introduction Statistics Contact Development Disclaimer Help
tEquivalent of mixerctl outputs.master in percentage - spoon - dwm status utili…
git clone git://src.adamsgaard.dk/spoon
Log
Files
Refs
LICENSE
---
commit ff5d7123662884975ea6f343746dd6206f1153b1
parent f25c8bd0592be9c238e3b7b70176d20367b9f60a
Author: lostd <[email protected]>
Date: Tue, 24 May 2016 21:36:23 +0100
Equivalent of mixerctl outputs.master in percentage
Diffstat:
M spoon.c | 65 +++++++++++++++++++++++++++++…
1 file changed, 65 insertions(+), 0 deletions(-)
---
diff --git a/spoon.c b/spoon.c
t@@ -19,6 +19,7 @@ int mpdread(char *buf, size_t len);
int cpuread(char *buf, size_t len);
int tempread(char *buf, size_t len);
int battread(char *buf, size_t len);
+int mixread(char *buf, size_t len);
int wifiread(char *buf, size_t len);
int dateread(char *buf, size_t len);
int xkblayoutread(char *buf, size_t len);
t@@ -29,6 +30,7 @@ struct ent {
} ents[] = {
/* reorder this if you want */
{ .fmt = "[%s] ", .read = mpdread },
+ { .fmt = "[%s] ", .read = mixread },
{ .fmt = "[%s] ", .read = xkblayoutread },
{ .fmt = "[%s] ", .read = cpuread },
{ .fmt = "[%s] ", .read = tempread },
t@@ -83,6 +85,7 @@ out:
#include <sys/sysctl.h>
#include <sys/sensors.h>
#include <sys/ioctl.h>
+#include <sys/audioio.h>
#include <net/if.h>
#include <net/if_media.h>
t@@ -130,6 +133,62 @@ tempread(char *buf, size_t len)
}
int
+mixread(char *buf, size_t len)
+{
+ mixer_devinfo_t dinfo;
+ mixer_ctrl_t mctl;
+ int fd, master, ret = 0, i = -1;
+
+ fd = open("/dev/mixer", O_RDONLY);
+ if (fd == -1) {
+ warn("open %s", "/dev/mixer");
+ return -1;
+ }
+ /* outputs */
+ for (dinfo.index = 0; ; dinfo.index++) {
+ ret = ioctl(fd, AUDIO_MIXER_DEVINFO, &dinfo);
+ if (ret == -1) {
+ warn("AUDIO_MIXER_DEVINFO %s", "/dev/mixer");
+ close(fd);
+ return -1;
+ }
+ if (dinfo.type == AUDIO_MIXER_CLASS &&
+ strcmp(dinfo.label.name, AudioCoutputs) == 0) {
+ i = dinfo.index;
+ break;
+ }
+ }
+ if (i == -1) {
+ warnx("no outputs mixer class: %s", "/dev/mixer");
+ goto out;
+ }
+ /* outputs.master */
+ for (; ; dinfo.index++) {
+ ret = ioctl(fd, AUDIO_MIXER_DEVINFO, &dinfo);
+ if (ret == -1) {
+ warn("AUDIO_MIXER_DEVINFO %s", "/dev/mixer");
+ goto out;
+ }
+ if (dinfo.type == AUDIO_MIXER_VALUE &&
+ dinfo.prev == AUDIO_MIXER_LAST &&
+ dinfo.mixer_class == i &&
+ strcmp(dinfo.label.name, AudioNmaster) == 0)
+ break;
+ }
+ mctl.dev = dinfo.index;
+ ret = ioctl(fd, AUDIO_MIXER_READ, &mctl);
+ if (ret == -1) {
+ warn("AUDIO_MIXER_READ %s", "/dev/mixer");
+ goto out;
+ }
+ master = mctl.un.value.level[0] * 100 / 255;
+ snprintf(buf, len, "%d%%", master);
+out:
+ close(fd);
+ return ret;
+}
+
+int
battread(char *buf, size_t len)
{
struct apm_power_info info;
t@@ -256,6 +315,12 @@ tempread(char *buf, size_t len)
}
int
+mixread(char *buf, size_t len)
+{
+ return -1;
+}
+
+int
battread(char *buf, size_t len)
{
return -1;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.