]> git.sur5r.net Git - i3/i3status/commitdiff
Fix Dragonfly BSD CPU temperature gauge
authorRobin Hahling <robin.hahling@gw-computing.net>
Mon, 4 Aug 2014 14:54:08 +0000 (16:54 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 8 Aug 2014 09:57:01 +0000 (11:57 +0200)
This patch fixes CPU temperature gauge for DragonFly BSD.
Commit 0eeded8 assumed that fetching CPU temperature for DragonFly
BSD was similar to that of FreeBSD but this assumption is false.

src/print_cpu_temperature.c

index 51df79072536c5832c96f5993d0615893e13bebd..c687474b7671b87d54d2c87983d008c3a0e799a3 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "i3status.h"
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include <err.h>
 #include <sys/types.h>
 #include <sys/sysctl.h>
 #define TZ_AVG(x) ((x) - TZ_ZEROC) / 10
 #endif
 
+#if defined(__DragonFly__)
+#include <sys/sysctl.h>
+#include <sys/types.h>
+#include <sys/sensors.h>
+#define MUKTOC(v) ((v - 273150000) / 1000000.0)
+#endif
+
 #if defined(__OpenBSD__)
 #include <sys/param.h>
 #include <sys/types.h>
@@ -82,7 +89,27 @@ void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const
                                         colorful_output = false;
                                 }
                         }
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#elif defined(__DragonFly__)
+                       struct sensor th_sensor;
+                       size_t th_sensorlen;
+
+                       th_sensorlen = sizeof(th_sensor);
+
+                       if (sysctlbyname(thermal_zone, &th_sensor, &th_sensorlen, NULL, 0) == -1) {
+                               perror("sysctlbyname");
+                               goto error;
+                       }
+                       if (MUKTOC(th_sensor.value) >= max_threshold) {
+                               START_COLOR("color_bad");
+                               colorful_output = true;
+                       }
+                       outwalk += sprintf(outwalk, "%.2f", MUKTOC(th_sensor.value));
+                       if (colorful_output) {
+                               END_COLOR;
+                               colorful_output = false;
+                       }
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
                         int sysctl_rslt;
                         size_t sysctl_size = sizeof(sysctl_rslt);
                         if (sysctlbyname(thermal_zone, &sysctl_rslt, &sysctl_size, NULL, 0))