Add FreeBSD support for temperature and battery components

This commit is contained in:
Michael Buch
2019-01-27 15:44:39 +00:00
committed by Aaron Marcher
parent dd7f1896aa
commit ec306623df
3 changed files with 80 additions and 3 deletions

View File

@ -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

View File

@ -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