Add FreeBSD support for temperature and battery components
authorMichael Buch <michaelbuch12@gmail.com>
Sun, 27 Jan 2019 15:44:39 +0000 (15:44 +0000)
committerAaron Marcher <me@drkhsh.at>
Tue, 5 Feb 2019 08:30:21 +0000 (09:30 +0100)
components/battery.c
components/temperature.c
config.def.h

index 1178f2080e3aa723b775c7fb40fcbc9f6e27d3bc..07b6ac16f28c98cbcbd6267bc198a0eb4aa7dc01 100644 (file)
 
                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) == -1
+                               || !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, 0) == -1
+                               || !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) == -1
+                               || !len
+                               || rem == -1)
+                       return NULL;
+
+               return bprintf("%uh %02um", rem / 60, rem % 60);
+       }
 #endif
index d56cc0e73f4023510980b91bd371ba4b0412c9f5..8462d0fc65e82727c44c4b93b01db15a59e69839 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "../util.h"
 
+
 #if defined(__linux__)
        #include <stdint.h>
 
                /* 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", zone);
+               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) % 10));
+       }
 #endif
index ccc2aee8d73312437cf779034102c5de3d8e0777..e06be6674f47fce9c700ade1712646a9b8853fd2 100644 (file)
@@ -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