t* dwmstatus for OpenBSD URI git clone git://git.codevoid.de/dwmstatus-sdk DIR Log DIR Files DIR Refs DIR LICENSE --- DIR commit 7bf763a0426f1124a7eca8f21255e496e9747ea2 DIR parent e591bf9a6df8ae266b612bacec9e407fc9c4c1f7 URI Author: Stefan Hagen <sh+git[at]codevoid[dot]de> Date: Sat, 24 Nov 2018 19:50:00 +0100 Update 2018-11-24 19:50 OpenBSD/amd64 Diffstat: M dwmstatus.c | 75 +++++++++---------------------- 1 file changed, 22 insertions(+), 53 deletions(-) --- DIR diff --git a/dwmstatus.c b/dwmstatus.c t@@ -15,6 +15,7 @@ #include <sys/ioctl.h> #include <sys/audioio.h> #include <sys/socket.h> +#include <machine/apmvar.h> #include <sys/wait.h> #include <signal.h> #include <fcntl.h> t@@ -171,55 +172,6 @@ char * readfile(char *base, char *file) { return smprintf("%s", line); } -char * getbattery(char *base) { - char *co, status; - int descap, remcap; - - descap = -1; - remcap = -1; - - co = readfile(base, "present"); - if (co == NULL) - return smprintf(""); - if (co[0] != '1') { - free(co); - return smprintf("not present"); - } - free(co); - - co = readfile(base, "charge_full_design"); - if (co == NULL) { - co = readfile(base, "energy_full_design"); - if (co == NULL) - return smprintf(""); - } - sscanf(co, "%d", &descap); - free(co); - - co = readfile(base, "charge_now"); - if (co == NULL) { - co = readfile(base, "energy_now"); - if (co == NULL) - return smprintf(""); - } - sscanf(co, "%d", &remcap); - free(co); - - co = readfile(base, "status"); - if (!strncmp(co, "Discharging", 11)) { - status = '-'; - } else if(!strncmp(co, "Charging", 8)) { - status = '+'; - } else { - status = '?'; - } - - if (remcap < 0 || descap < 0) - return smprintf("invalid"); - - return smprintf("%.0f%%%c", ((float)remcap / (float)descap) * 100, status); -} - char * gettemperature(char *base, char *sensor) { char *co; co = readfile(base, sensor); t@@ -228,6 +180,23 @@ char * gettemperature(char *base, char *sensor) { return smprintf("%02.0f°C", atof(co) / 1000); } +char * getbattery() +{ + int fd; + struct apm_power_info pi; + + if ((fd = open("/dev/apm", O_RDONLY)) == -1 || + ioctl(fd, APM_IOC_GETPOWER, &pi) == -1 || + close(fd) == -1) + return smprintf("battery"); + + if (pi.battery_state == APM_BATT_UNKNOWN || + pi.battery_state == APM_BATTERY_ABSENT) + return smprintf("no battery"); + + return smprintf("%i", pi.battery_life); +} + // update all values and print statusbar void update() { t@@ -248,8 +217,8 @@ void update() { // cpufreq = smprintf("%i", getsysctl("dev.cpu.0.freq")); // battery - // battery = smprintf("%i", getsysctl("hw.acpi.battery.life")); - + // battery = smprintf("%i", ge tsysctl("hw.acpi.battery.life")); + // audio volume char *volume = getvolume(); t@@ -265,9 +234,9 @@ void update() { warn = " !!! LOW DISK SPACE WARNING @ ROOT !!! |"; // display status - setstatus(smprintf("Volume: %s | Load: %s | %s | %s;" + setstatus(smprintf("Battery: %s%% | Volume: %s%% | Load: %s | %s | %s;" "Network: %s | Address: %s |%s /home: %sMB | /: %sMB", - volume, loadavg(), date, time, + getbattery(), volume, loadavg(), date, time, "PowerMate 2.4GHz", "192.168.2.235", warn, freehomespace, freerootspace)); // free everything up