Add FreeBSD support for temperature and battery components - slstatus - status monitor
 (HTM) git clone git://git.suckless.org/slstatus
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ec306623df7321a4e6ec11f70b6152a2e614d1ed
 (DIR) parent dd7f1896aa9883f33b4d28cd192e8088db0cab5a
 (HTM) Author: Michael Buch <michaelbuch12@gmail.com>
       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(-)
       ---
 (DIR) 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) == -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
 (DIR) 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", 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
 (DIR) 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