diff options
-rw-r--r-- | src/print_cpu_temperature.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/print_cpu_temperature.c b/src/print_cpu_temperature.c index 51df790..c687474 100644 --- a/src/print_cpu_temperature.c +++ b/src/print_cpu_temperature.c @@ -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> @@ -17,6 +17,13 @@ #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)) |