tempget: Add more temperature sources for FreeBSD

Summary:
Not all motherboards have 'hw.acpi.thermal.tz0.temperature' sensor.
Fallback to 'dev.cpu.0.temperature' (provided by coretemp(4) or
amdtemp(4)), or 'dev.aibs.0.temp.0' (aibs(4)) (per suggestion of Dmitry
Luhtionov).

Test Plan: Ran `src/modules/temperature/tempget` manually with some debugging printfs and various sensors commented out. I can only test tz0 and dev.cpu (coretemp(4)) on my system.

Reviewers: zmike, q66

Reviewed By: q66

Subscribers: seoz

Projects: #enlightenment-git

Differential Revision: https://phab.enlightenment.org/D2335
This commit is contained in:
Daniel Kolesa 2015-04-13 11:02:33 +01:00
parent 4d46aae57c
commit 4389030678
1 changed files with 33 additions and 11 deletions

View File

@ -6,6 +6,7 @@
#ifdef __FreeBSD__
# include <sys/types.h>
# include <sys/sysctl.h>
# include <errno.h>
#endif
#ifdef __OpenBSD__
@ -28,7 +29,17 @@ static int cur_poll_interval = 32;
static char *sensor_path = NULL;
#if defined (__FreeBSD__) || defined (__OpenBSD__)
static int mib[5];
static int mib[CTL_MAXNAME];
#endif
#ifdef __FreeBSD__
static unsigned miblen;
static const char *sources[] =
{
"hw.acpi.thermal.tz0.temperature",
"dev.cpu.0.temperature",
"dev.aibs.0.temp.0",
NULL
};
#endif
#ifdef __OpenBSD__
@ -95,7 +106,9 @@ init(void)
Eina_List *therms;
char path[PATH_MAX];
#ifdef __FreeBSD__
unsigned i;
size_t len;
int rc;
#endif
if ((!sensor_type) || ((!sensor_name) || (sensor_name[0] == 0)))
@ -103,9 +116,16 @@ init(void)
E_FREE(sensor_name);
E_FREE(sensor_path);
#ifdef __FreeBSD__
/* TODO: FreeBSD can also have more temperature sensors! */
sensor_type = SENSOR_TYPE_FREEBSD;
sensor_name = strdup("tz0");
for (i = 0; sources[i]; i++)
{
rc = sysctlbyname(sources[i], NULL, NULL, NULL, 0);
if (rc == 0)
{
sensor_type = SENSOR_TYPE_FREEBSD;
sensor_name = strdup(sources[i]);
break;
}
}
#elif __OpenBSD__
mib[0] = CTL_HW;
mib[1] = HW_SENSORS;
@ -270,11 +290,13 @@ init(void)
case SENSOR_TYPE_FREEBSD:
#ifdef __FreeBSD__
snprintf(path, sizeof(path), "hw.acpi.thermal.%s.temperature",
sensor_name);
sensor_path = strdup(path);
len = 5;
sysctlnametomib(sensor_path, mib, &len);
len = sizeof(mib) / sizeof(mib[0]);
rc = sysctlnametomib(sensor_name, mib, &len);
if (rc == 0)
{
miblen = len;
sensor_path = strdup(sensor_name);
}
#endif
break;
@ -394,8 +416,8 @@ check(void)
case SENSOR_TYPE_FREEBSD:
#ifdef __FreeBSD__
len = sizeof(temp);
if (sysctl(mib, 5, &ftemp, &len, NULL, 0) != -1)
len = sizeof(ftemp);
if (sysctl(mib, miblen, &ftemp, &len, NULL, 0) == 0)
{
temp = (ftemp - 2732) / 10;
ret = 1;