slstatus

My fork of https://tools.suckless.org/slstatus/
git clone https://git.inz.fi/slstatus
Log | Files | Refs | README | LICENSE

commit 7e3f80c1a39e16973f3c9235d3f9d85df0d1b995
parent ad5b7c8b1ca5e5019d6d3978045296bfbddcc349
Author: Aaron Marcher <me@drkhsh.at>
Date:   Mon, 19 Mar 2018 18:44:52 +0100

battery_perc: Port to OpenBSD.

In OpenBSD battery percentage gets fetched using apm now.

Diffstat:
MREADME | 2+-
Mcomponents/battery.c | 30+++++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/README b/README @@ -69,6 +69,6 @@ The following functions are not portable at the moment: - cpu_{freq,perc,iowait} - entropy - swap_{free,perc,total,used} -- battery_{perc,power,state} +- battery_{power,state} - temp - vol_perc diff --git a/components/battery.c b/components/battery.c @@ -1,22 +1,50 @@ /* See LICENSE file for copyright and license details. */ +#include <err.h> +#include <stdio.h> #ifdef __linux__ #include <limits.h> -#include <stdio.h> #include <string.h> +#elif __OpenBSD__ +#include <sys/ioctl.h> +#include <fcntl.h> +#include <unistd.h> +#include <machine/apmvar.h> +#endif #include "../util.h" const char * battery_perc(const char *bat) { +#ifdef __linux__ int perc; char path[PATH_MAX]; snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity"); return (pscanf(path, "%i", &perc) == 1) ? bprintf("%d", perc) : NULL; +#elif __OpenBSD__ + struct apm_power_info apm_info; + int fd; + + fd = open("/dev/apm", O_RDONLY); + if (fd < 0) { + warn("Failed to open file /dev/apm"); + return NULL; + } + + if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) { + warn("Failed to get battery info"); + close(fd); + return NULL; + } + close(fd); + + return bprintf("%d", apm_info.battery_life); +#endif } +#ifdef __linux__ const char * battery_power(const char *bat) {