Add FreeBSD support for temperature and battery components - slstatus - status … | |
git clone git://git.suckless.org/slstatus | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit ec306623df7321a4e6ec11f70b6152a2e614d1ed | |
parent dd7f1896aa9883f33b4d28cd192e8088db0cab5a | |
Author: Michael Buch <[email protected]> | |
Date: Sun, 27 Jan 2019 15:44:39 +0000 | |
Add FreeBSD support for temperature and battery components | |
Diffstat: | |
M components/battery.c | 53 ++++++++++++++++++++++++++++++ | |
M components/temperature.c | 22 ++++++++++++++++++++++ | |
M config.def.h | 8 +++++--- | |
3 files changed, 80 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/components/battery.c b/components/battery.c | |
@@ -195,4 +195,57 @@ | |
return NULL; | |
} | |
+#elif defined(__FreeBSD__) | |
+ #include <sys/sysctl.h> | |
+ | |
+ const char * | |
+ battery_perc(const char *unused) | |
+ { | |
+ int cap; | |
+ size_t len; | |
+ | |
+ len = sizeof(cap); | |
+ if (sysctlbyname("hw.acpi.battery.life", &cap, &len, NULL, 0) … | |
+ || !len) | |
+ return NULL; | |
+ | |
+ return bprintf("%d", cap); | |
+ } | |
+ | |
+ const char * | |
+ battery_state(const char *unused) | |
+ { | |
+ int state; | |
+ size_t len; | |
+ | |
+ len = sizeof(state); | |
+ if (sysctlbyname("hw.acpi.battery.state", &state, &len, NULL, … | |
+ || !len) | |
+ return NULL; | |
+ | |
+ switch(state) { | |
+ case 0: | |
+ case 2: | |
+ return "+"; | |
+ case 1: | |
+ return "-"; | |
+ default: | |
+ return "?"; | |
+ } | |
+ } | |
+ | |
+ const char * | |
+ battery_remaining(const char *unused) | |
+ { | |
+ int rem; | |
+ size_t len; | |
+ | |
+ len = sizeof(rem); | |
+ if (sysctlbyname("hw.acpi.battery.time", &rem, &len, NULL, 0) … | |
+ || !len | |
+ || rem == -1) | |
+ return NULL; | |
+ | |
+ return bprintf("%uh %02um", rem / 60, rem % 60); | |
+ } | |
#endif | |
diff --git a/components/temperature.c b/components/temperature.c | |
@@ -3,6 +3,7 @@ | |
#include "../util.h" | |
+ | |
#if defined(__linux__) | |
#include <stdint.h> | |
@@ -46,4 +47,25 @@ | |
/* kelvin to celsius */ | |
return bprintf("%d", (temp.value - 273150000) / 1E6); | |
} | |
+#elif defined(__FreeBSD__) | |
+ #include <stdio.h> | |
+ #include <stdlib.h> | |
+ #include <sys/sysctl.h> | |
+ | |
+ const char * | |
+ temp(const char *zone) | |
+ { | |
+ char buf[256]; | |
+ int temp; | |
+ size_t len; | |
+ | |
+ len = sizeof(temp); | |
+ snprintf(buf, sizeof(buf), "hw.acpi.thermal.%s.temperature", z… | |
+ if (sysctlbyname(buf, &temp, &len, NULL, 0) == -1 | |
+ || !len) | |
+ return NULL; | |
+ | |
+ /* kelvin to decimal celcius */ | |
+ return bprintf("%d.%d", (temp - 2731) / 10, abs((temp - 2731) … | |
+ } | |
#endif | |
diff --git a/config.def.h b/config.def.h | |
@@ -13,11 +13,11 @@ static const char unknown_str[] = "n/a"; | |
* function description argument (example) | |
* | |
* battery_perc battery percentage battery name (BAT0) | |
- * NULL on OpenBSD | |
+ * NULL on OpenBSD/FreeBSD | |
* battery_state battery charging state battery name (BAT0) | |
- * NULL on OpenBSD | |
+ * NULL on OpenBSD/FreeBSD | |
* battery_remaining battery remaining HH:MM battery name (BAT0) | |
- * NULL on OpenBSD | |
+ * NULL on OpenBSD/FreeBSD | |
* cpu_perc cpu usage in percent NULL | |
* cpu_freq cpu frequency in MHz NULL | |
* datetime date and time format string (%F %T) | |
@@ -52,6 +52,8 @@ static const char unknown_str[] = "n/a"; | |
* temp temperature in degree celsius sensor file | |
* (/sys/class/thermal/...) | |
* NULL on OpenBSD | |
+ * thermal zone on FreeBSD | |
+ * (tz0, tz1, etc.) | |
* uid UID of current user NULL | |
* uptime system uptime NULL | |
* username username of current user NULL |