summaryrefslogtreecommitdiff
path: root/src/get_cpu_temperature.c
diff options
context:
space:
mode:
authorMichael Stapelberg <michael@stapelberg.de>2009-07-23 18:40:49 +0200
committerMichael Stapelberg <michael@stapelberg.de>2009-07-23 18:40:49 +0200
commita86361510c10ac5f19e2959d33e9ffb7f6c5099e (patch)
tree4b606ef03e6065f4d0eacdeed8ecac165d3f7ee1 /src/get_cpu_temperature.c
parent3de290742744de5f08be17d14f1dce377815e3f4 (diff)
Implement battery status and thermal zones for FreeBSD (patch by Baptiste Daroussin)
Diffstat (limited to 'src/get_cpu_temperature.c')
-rw-r--r--src/get_cpu_temperature.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/get_cpu_temperature.c b/src/get_cpu_temperature.c
index d000d2d..09fbd25 100644
--- a/src/get_cpu_temperature.c
+++ b/src/get_cpu_temperature.c
@@ -5,6 +5,15 @@
#include "i3status.h"
+#if defined(__FreeBSD__)
+#include <err.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#define TZ_ZEROC 2732
+#define TZ_KELVTOC(x) (((x) - TZ_ZEROC) / 10), abs(((x) - TZ_ZEROC) % 10)
+#endif
+
+
/*
* Reads the CPU temperature from /sys/class/thermal/thermal_zone0/temp and
* returns the temperature in degree celcius.
@@ -12,15 +21,23 @@
*/
const char *get_cpu_temperature_info() {
static char buf[16];
- long int temp;
+#if defined(LINUX)
+ long int temp;
slurp(thermal_zone, buf, sizeof(buf));
temp = strtol(buf, NULL, 10);
-
if (temp == LONG_MIN || temp == LONG_MAX || temp <= 0)
(void)snprintf(buf, sizeof(buf), "T: ? C");
else
(void)snprintf(buf, sizeof(buf), "T: %ld C", (temp/1000));
+#elif defined(__FreeBSD__)
+ int sysctl_rslt;
+ size_t sysctl_size = sizeof (sysctl_rslt);
+ if (sysctlbyname(thermal_zone,&sysctl_rslt,&sysctl_size,NULL,0))
+ return "No Thermal";
+
+ snprintf(buf,sizeof(buf),"T: %d.%d C",TZ_KELVTOC(sysctl_rslt));
+#endif
return buf;
}