X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/7246dc4381c6c95454672a5c1aff65a02d6d3747..aced8326228ea3cf1673828a6e488b8f75108f45:/components/battery.c diff --git a/components/battery.c b/components/battery.c index f384aab..aef5b5f 100644 --- a/components/battery.c +++ b/components/battery.c @@ -1,21 +1,50 @@ /* See LICENSE file for copyright and license details. */ -#include +#include #include +#if defined(__linux__) +#include #include +#elif defined(__OpenBSD__) +#include +#include +#include +#include +#endif #include "../util.h" const char * battery_perc(const char *bat) { +#if defined(__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 defined(__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 } +#if defined(__linux__) const char * battery_power(const char *bat) { @@ -54,3 +83,4 @@ battery_state(const char *bat) } return (i == LEN(map)) ? "?" : map[i].symbol; } +#endif