Hi,
I don't really know sensors on linux, but it seems
that there is a mistake in the temperature module.
Here are two patches: the first is for formatting
(it was a shame),the second for the fix.
thanks
--- tempget.c 2012-11-02 16:09:54.045398884 +0100
+++ tempget.c 2012-11-02 16:10:24.195728698 +0100
@@ -345,7 +345,7 @@
break;
case SENSOR_TYPE_LINUX_SYS:
snprintf(path, sizeof(path),
- "/sys/class/thermal/thermal/%s/temp", sensor_name);
+ "/sys/class/thermal/%s/temp", sensor_name);
sensor_path = strdup(path);
break;
default:
--- tempget.c 2012-11-02 16:06:59.442817832 +0100
+++ tempget.c 2012-11-02 16:06:52.480839157 +0100
@@ -37,7 +37,7 @@
#ifdef __OpenBSD__
static int dev, numt;
-static struct sensordev snsrdev;
+static struct sensordev snsrdev;
static size_t sdlen = sizeof(snsrdev);
static struct sensor snsr;
static size_t slen = sizeof(snsr);
@@ -104,46 +104,49 @@
if ((!sensor_type) || ((!sensor_name) || (sensor_name[0] == 0)))
{
- if (sensor_name) free(sensor_name);
- if (sensor_path) free(sensor_path);
- sensor_path = NULL;
+ if (sensor_name) free(sensor_name);
+ if (sensor_path) free(sensor_path);
+ sensor_path = NULL;
#ifdef __FreeBSD__
- /* TODO: FreeBSD can also have more temperature sensors! */
- sensor_type = SENSOR_TYPE_FREEBSD;
- sensor_name = strdup("tz0");
+ /* TODO: FreeBSD can also have more temperature sensors! */
+ sensor_type = SENSOR_TYPE_FREEBSD;
+ sensor_name = strdup("tz0");
#elif __OpenBSD__
- mib[0] = CTL_HW;
- mib[1] = HW_SENSORS;
+ mib[0] = CTL_HW;
+ mib[1] = HW_SENSORS;
- for (dev = 0; ; dev++) {
- mib[2] = dev;
- if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1) {
- if (errno == ENOENT) /* no further sensors */
- break;
- else
- continue;
- }
- if (strcmp(snsrdev.xname, "cpu0") == 0) {
- sensor_type = SENSOR_TYPE_OPENBSD;
- sensor_name = strdup("cpu0");
- break;
- }
- }
+ for (dev = 0; ; dev++)
+ {
+ mib[2] = dev;
+ if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1)
+ {
+ if (errno == ENOENT) /* no further sensors */
+ break;
+ else
+ continue;
+ }
+ if (strcmp(snsrdev.xname, "cpu0") == 0)
+ {
+ sensor_type = SENSOR_TYPE_OPENBSD;
+ sensor_name = strdup("cpu0");
+ break;
+ }
+ }
#else
- therms = ecore_file_ls("/proc/acpi/thermal_zone");
- if (therms)
- {
- char *name;
-
- name = eina_list_data_get(therms);
- sensor_type = SENSOR_TYPE_LINUX_ACPI;
- sensor_name = strdup(name);
-
- eina_list_free(therms);
- }
- else
- {
- eina_list_free(therms);
+ therms = ecore_file_ls("/proc/acpi/thermal_zone");
+ if (therms)
+ {
+ char *name;
+
+ name = eina_list_data_get(therms);
+ sensor_type = SENSOR_TYPE_LINUX_ACPI;
+ sensor_name = strdup(name);
+
+ eina_list_free(therms);
+ }
+ else
+ {
+ eina_list_free(therms);
therms = ecore_file_ls("/sys/class/thermal");
if (therms)
{
@@ -249,106 +252,105 @@
eina_list_free(therms);
}
}
- }
- }
- }
+ }
+ }
+ }
#endif
}
if ((sensor_type) && (sensor_name) && (!sensor_path))
{
- char *name;
+ char *name;
- switch (sensor_type)
- {
- case SENSOR_TYPE_NONE:
- break;
- case SENSOR_TYPE_FREEBSD:
+ switch (sensor_type)
+ {
+ case SENSOR_TYPE_NONE:
+ break;
+ 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);
+ snprintf(path, sizeof(path), "hw.acpi.thermal.%s.temperature",
+ sensor_name);
+ sensor_path = strdup(path);
+ len = 5;
+ sysctlnametomib(sensor_path, mib, &len);
#endif
- break;
- case SENSOR_TYPE_OPENBSD:
+ break;
+ case SENSOR_TYPE_OPENBSD:
#ifdef __OpenBSD__
- for (numt = 0; numt < snsrdev.maxnumt[SENSOR_TEMP]; numt++) {
- mib[4] = numt;
- slen = sizeof(snsr);
- if (sysctl(mib, 5, &snsr, &slen, NULL, 0) == -1)
- continue;
- if (slen > 0 && (snsr.flags & SENSOR_FINVALID) == 0) {
- break;
- }
- }
+ for (numt = 0; numt < snsrdev.maxnumt[SENSOR_TEMP]; numt++)
+ {
+ mib[4] = numt;
+ slen = sizeof(snsr);
+ if (sysctl(mib, 5, &snsr, &slen, NULL, 0) == -1)
+ continue;
+ if (slen > 0 && (snsr.flags & SENSOR_FINVALID) == 0)
+ break;
+ }
#endif
-
- break;
- case SENSOR_TYPE_OMNIBOOK:
- sensor_path = strdup("/proc/omnibook/temperature");
- break;
- case SENSOR_TYPE_LINUX_MACMINI:
- sensor_path = strdup("/sys/devices/temperatures/cpu_temperature");
- break;
- case SENSOR_TYPE_LINUX_PBOOK:
- sensor_path = strdup("/sys/devices/temperatures/sensor1_temperature");
- break;
- case SENSOR_TYPE_LINUX_INTELCORETEMP:
- sensor_path = strdup("/sys/devices/platform/coretemp.0/temp1_input");
- break;
- case SENSOR_TYPE_LINUX_THINKPAD:
- sensor_path = strdup("/sys/devices/platform/thinkpad_hwmon/temp1_input");
- break;
- case SENSOR_TYPE_LINUX_I2C:
- therms = ecore_file_ls("/sys/bus/i2c/devices");
-
- EINA_LIST_FREE(therms, name)
- {
- snprintf(path, sizeof(path),
- "/sys/bus/i2c/devices/%s/%s_input",
- name, sensor_name);
- if (ecore_file_exists(path))
- {
- sensor_path = strdup(path);
- /* We really only care about the first
- * one for the default. */
- break;
- }
- free(name);
- }
- break;
- case SENSOR_TYPE_LINUX_PCI:
- therms = ecore_file_ls("/sys/bus/pci/devices");
-
- EINA_LIST_FREE(therms, name)
- {
- snprintf(path, sizeof(path),
- "/sys/bus/pci/devices/%s/%s_input",
- name, sensor_name);
- if (ecore_file_exists(path))
- {
- sensor_path = strdup(path);
- /* We really only care about the first
- * one for the default. */
- break;
- }
- free(name);
- }
- break;
- case SENSOR_TYPE_LINUX_ACPI:
- snprintf(path, sizeof(path),
- "/proc/acpi/thermal_zone/%s/temperature", sensor_name);
- sensor_path = strdup(path);
- break;
- case SENSOR_TYPE_LINUX_SYS:
- snprintf(path, sizeof(path),
- "/sys/class/thermal/thermal/%s/temp", sensor_name);
- sensor_path = strdup(path);
- break;
- default:
- break;
- }
+ break;
+ case SENSOR_TYPE_OMNIBOOK:
+ sensor_path = strdup("/proc/omnibook/temperature");
+ break;
+ case SENSOR_TYPE_LINUX_MACMINI:
+ sensor_path = strdup("/sys/devices/temperatures/cpu_temperature");
+ break;
+ case SENSOR_TYPE_LINUX_PBOOK:
+ sensor_path = strdup("/sys/devices/temperatures/sensor1_temperature");
+ break;
+ case SENSOR_TYPE_LINUX_INTELCORETEMP:
+ sensor_path = strdup("/sys/devices/platform/coretemp.0/temp1_input");
+ break;
+ case SENSOR_TYPE_LINUX_THINKPAD:
+ sensor_path = strdup("/sys/devices/platform/thinkpad_hwmon/temp1_input");
+ break;
+ case SENSOR_TYPE_LINUX_I2C:
+ therms = ecore_file_ls("/sys/bus/i2c/devices");
+
+ EINA_LIST_FREE(therms, name)
+ {
+ snprintf(path, sizeof(path),
+ "/sys/bus/i2c/devices/%s/%s_input",
+ name, sensor_name);
+ if (ecore_file_exists(path))
+ {
+ sensor_path = strdup(path);
+ /* We really only care about the first
+ * one for the default. */
+ break;
+ }
+ free(name);
+ }
+ break;
+ case SENSOR_TYPE_LINUX_PCI:
+ therms = ecore_file_ls("/sys/bus/pci/devices");
+
+ EINA_LIST_FREE(therms, name)
+ {
+ snprintf(path, sizeof(path),
+ "/sys/bus/pci/devices/%s/%s_input",
+ name, sensor_name);
+ if (ecore_file_exists(path))
+ {
+ sensor_path = strdup(path);
+ /* We really only care about the first
+ * one for the default. */
+ break;
+ }
+ free(name);
+ }
+ break;
+ case SENSOR_TYPE_LINUX_ACPI:
+ snprintf(path, sizeof(path),
+ "/proc/acpi/thermal_zone/%s/temperature", sensor_name);
+ sensor_path = strdup(path);
+ break;
+ case SENSOR_TYPE_LINUX_SYS:
+ snprintf(path, sizeof(path),
+ "/sys/class/thermal/thermal/%s/temp", sensor_name);
+ sensor_path = strdup(path);
+ break;
+ default:
+ break;
+ }
}
}
@@ -370,150 +372,151 @@
*/
switch (sensor_type)
{
- case SENSOR_TYPE_NONE:
- /* TODO: Slow down poller? */
- break;
- case SENSOR_TYPE_FREEBSD:
+ case SENSOR_TYPE_NONE:
+ /* TODO: Slow down poller? */
+ break;
+ case SENSOR_TYPE_FREEBSD:
#ifdef __FreeBSD__
- len = sizeof(temp);
- if (sysctl(mib, 5, &ftemp, &len, NULL, 0) != -1)
- {
- temp = (ftemp - 2732) / 10;
- ret = 1;
- }
- else
- goto error;
+ len = sizeof(temp);
+ if (sysctl(mib, 5, &ftemp, &len, NULL, 0) != -1)
+ {
+ temp = (ftemp - 2732) / 10;
+ ret = 1;
+ }
+ else
+ goto error;
#endif
- break;
- case SENSOR_TYPE_OPENBSD:
+ break;
+ case SENSOR_TYPE_OPENBSD:
#ifdef __OpenBSD__
- if (sysctl(mib, 5, &snsr, &slen, NULL, 0) != -1) {
- temp = (snsr.value - 273150000) / 1000000.0;
- ret = 1;
- }
- else
- goto error;
+ if (sysctl(mib, 5, &snsr, &slen, NULL, 0) != -1)
+ {
+ temp = (snsr.value - 273150000) / 1000000.0;
+ ret = 1;
+ }
+ else
+ goto error;
#endif
- break;
- case SENSOR_TYPE_OMNIBOOK:
- f = fopen(sensor_path, "r");
- if (f)
- {
- char dummy[4096];
-
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- buf[sizeof(buf) - 1] = 0;
- if (sscanf(buf, "%s %s %i", dummy, dummy, &temp) == 3)
- ret = 1;
- else
- goto error;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_MACMINI:
- case SENSOR_TYPE_LINUX_PBOOK:
- f = fopen(sensor_path, "rb");
- if (f)
- {
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- fclose(f);
- buf[sizeof(buf) - 1] = 0;
- if (sscanf(buf, "%i", &temp) == 1)
- ret = 1;
- else
- goto error;
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_INTELCORETEMP:
- case SENSOR_TYPE_LINUX_I2C:
- case SENSOR_TYPE_LINUX_THINKPAD:
- f = fopen(sensor_path, "r");
- if (f)
- {
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- buf[sizeof(buf) - 1] = 0;
-
- /* actually read the temp */
- if (sscanf(buf, "%i", &temp) == 1)
- ret = 1;
- else
- goto error;
- /* Hack for temp */
- temp = temp / 1000;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_PCI:
- f = fopen(sensor_path, "r");
- if (f)
- {
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- buf[sizeof(buf) - 1] = 0;
-
- /* actually read the temp */
- if (sscanf(buf, "%i", &temp) == 1)
- ret = 1;
- else
- goto error;
- /* Hack for temp */
- temp = temp / 1000;
- fclose(f);
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_ACPI:
- f = fopen(sensor_path, "r");
- if (f)
- {
- char *p, *q;
-
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- buf[sizeof(buf) - 1] = 0;
- fclose(f);
- p = strchr(buf, ':');
- if (p)
- {
- p++;
- while (*p == ' ') p++;
- q = strchr(p, ' ');
- if (q) *q = 0;
- temp = atoi(p);
- ret = 1;
- }
- else
- goto error;
- }
- else
- goto error;
- break;
- case SENSOR_TYPE_LINUX_SYS:
- f = fopen(sensor_path, "r");
- if (f)
- {
- if (fgets(buf, sizeof(buf), f) == NULL) goto error;
-
- buf[sizeof(buf) - 1] = 0;
- fclose(f);
- temp = atoi(buf);
- temp /= 1000;
- }
- else
- goto error;
- break;
- default:
- break;
+ break;
+ case SENSOR_TYPE_OMNIBOOK:
+ f = fopen(sensor_path, "r");
+ if (f)
+ {
+ char dummy[4096];
+
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ buf[sizeof(buf) - 1] = 0;
+ if (sscanf(buf, "%s %s %i", dummy, dummy, &temp) == 3)
+ ret = 1;
+ else
+ goto error;
+ fclose(f);
+ }
+ else
+ goto error;
+ break;
+ case SENSOR_TYPE_LINUX_MACMINI:
+ case SENSOR_TYPE_LINUX_PBOOK:
+ f = fopen(sensor_path, "rb");
+ if (f)
+ {
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ fclose(f);
+ buf[sizeof(buf) - 1] = 0;
+ if (sscanf(buf, "%i", &temp) == 1)
+ ret = 1;
+ else
+ goto error;
+ }
+ else
+ goto error;
+ break;
+ case SENSOR_TYPE_LINUX_INTELCORETEMP:
+ case SENSOR_TYPE_LINUX_I2C:
+ case SENSOR_TYPE_LINUX_THINKPAD:
+ f = fopen(sensor_path, "r");
+ if (f)
+ {
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ buf[sizeof(buf) - 1] = 0;
+
+ /* actually read the temp */
+ if (sscanf(buf, "%i", &temp) == 1)
+ ret = 1;
+ else
+ goto error;
+ /* Hack for temp */
+ temp = temp / 1000;
+ fclose(f);
+ }
+ else
+ goto error;
+ break;
+ case SENSOR_TYPE_LINUX_PCI:
+ f = fopen(sensor_path, "r");
+ if (f)
+ {
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ buf[sizeof(buf) - 1] = 0;
+
+ /* actually read the temp */
+ if (sscanf(buf, "%i", &temp) == 1)
+ ret = 1;
+ else
+ goto error;
+ /* Hack for temp */
+ temp = temp / 1000;
+ fclose(f);
+ }
+ else
+ goto error;
+ break;
+ case SENSOR_TYPE_LINUX_ACPI:
+ f = fopen(sensor_path, "r");
+ if (f)
+ {
+ char *p, *q;
+
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ buf[sizeof(buf) - 1] = 0;
+ fclose(f);
+ p = strchr(buf, ':');
+ if (p)
+ {
+ p++;
+ while (*p == ' ') p++;
+ q = strchr(p, ' ');
+ if (q) *q = 0;
+ temp = atoi(p);
+ ret = 1;
+ }
+ else
+ goto error;
+ }
+ else
+ goto error;
+ break;
+ case SENSOR_TYPE_LINUX_SYS:
+ f = fopen(sensor_path, "r");
+ if (f)
+ {
+ if (fgets(buf, sizeof(buf), f) == NULL) goto error;
+
+ buf[sizeof(buf) - 1] = 0;
+ fclose(f);
+ temp = atoi(buf);
+ temp /= 1000;
+ }
+ else
+ goto error;
+ break;
+ default:
+ break;
}
if (ret) return temp;
@@ -537,28 +540,28 @@
pp = cur_poll_interval;
if (t != ptemp)
{
- cur_poll_interval /= 2;
- if (cur_poll_interval < 4) cur_poll_interval = 4;
+ cur_poll_interval /= 2;
+ if (cur_poll_interval < 4) cur_poll_interval = 4;
}
else
{
- cur_poll_interval *= 2;
- if (cur_poll_interval > 256) cur_poll_interval = 256;
+ cur_poll_interval *= 2;
+ if (cur_poll_interval > 256) cur_poll_interval = 256;
}
/* adapt polling based on if temp changes - every time it changes,
* halve the time between polls, otherwise double it, between 4 and
* 256 ticks */
if (pp != cur_poll_interval)
{
- if (poller) ecore_poller_del(poller);
- poller = ecore_poller_add(ECORE_POLLER_CORE, cur_poll_interval,
- poll_cb, NULL);
+ if (poller) ecore_poller_del(poller);
+ poller = ecore_poller_add(ECORE_POLLER_CORE, cur_poll_interval,
+ poll_cb, NULL);
}
if (t != ptemp)
{
- if (t == -999) printf("ERROR\n");
- else printf("%i\n", t);
- fflush(stdout);
+ if (t == -999) printf("ERROR\n");
+ else printf("%i\n", t);
+ fflush(stdout);
}
ptemp = t;
return ECORE_CALLBACK_RENEW;
@@ -569,15 +572,15 @@
{
if (argc != 4)
{
- printf("ARGS INCORRECT!\n");
- return 0;
+ printf("ARGS INCORRECT!\n");
+ return 0;
}
sensor_type = atoi(argv[1]);
sensor_name = strdup(argv[2]);
if (!strcmp(sensor_name, "-null-"))
{
- free(sensor_name);
- sensor_name = NULL;
+ free(sensor_name);
+ sensor_name = NULL;
}
poll_interval = atoi(argv[3]);
cur_poll_interval = poll_interval;
@@ -588,7 +591,7 @@
if (poller) ecore_poller_del(poller);
poller = ecore_poller_add(ECORE_POLLER_CORE, cur_poll_interval,
- poll_cb, NULL);
+ poll_cb, NULL);
poll_cb(NULL);
ecore_main_loop_begin();
------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel