temp module patches to make it work again.

SVN revision: 33685
This commit is contained in:
Carsten Haitzler 2008-02-06 00:13:25 +00:00
parent 0c3c93f9ad
commit 44191ab9cf
4 changed files with 160 additions and 43 deletions

View File

@ -125,7 +125,43 @@ _fill_data(E_Config_Dialog_Data *cfdata)
case SENSOR_TYPE_LINUX_INTELCORETEMP:
break;
case SENSOR_TYPE_LINUX_I2C:
therms = temperature_get_i2c_files();
therms = temperature_get_bus_files("i2c");
if (therms)
{
char *name;
while ((name = ecore_list_next(therms)))
{
if (ecore_file_exists(name))
{
int len;
sprintf(path, "%s", ecore_file_file_get(name));
len = strlen(path);
if (len > 6)
path[len - 6] = '\0';
ecore_list_append(cfdata->sensors, strdup(path));
/* TODO: Track down the user friendly names and display them instead.
* User friendly names are not available on the system, lm-sensors
* contains a database in /etc/sensors.conf, but the format may change,
* so the best way to use that database is thru libsensors, but we
* don't want to add any more library dependencies.
*/
}
}
ecore_list_destroy(therms);
}
ecore_list_first_goto(cfdata->sensors);
while ((name = ecore_list_next(cfdata->sensors)))
{
if (!strcmp(cfdata->inst->sensor_name, name))
break;
cfdata->sensor++;
}
break;
case SENSOR_TYPE_LINUX_PCI:
therms = temperature_get_bus_files("pci");
if (therms)
{
char *name;

View File

@ -407,54 +407,57 @@ temperature_face_update_config(Config_Face *inst)
}
Ecore_List *
temperature_get_i2c_files()
temperature_get_bus_files(const char* bus)
{
Ecore_List *result;
Ecore_List *therms;
char path[PATH_MAX];
char busdir[PATH_MAX];
result = ecore_list_new();
if (result)
{
ecore_list_free_cb_set(result, free);
/* Look through all the i2c devices. */
therms = ecore_file_ls("/sys/bus/i2c/devices");
if (therms)
{
char *name;
ecore_list_free_cb_set(result, free);
snprintf(busdir, sizeof(busdir), "/sys/bus/%s/devices", bus);
/* Look through all the devices for the given bus. */
therms = ecore_file_ls(busdir);
if (therms)
{
char *name;
while ((name = ecore_list_next(therms)))
{
Ecore_List *files;
/* Search each device for temp*_input, these should be i2c temperature devices. */
sprintf(path, "/sys/bus/i2c/devices/%s", name);
files = ecore_file_ls(path);
if (files)
{
char *file;
while ((file = ecore_list_next(files)))
{
if ((strncmp("temp", file, 4) == 0) && (strcmp("_input", &file[strlen(file) - 6]) == 0))
Ecore_List *files;
/* Search each device for temp*_input, these should be
* temperature devices. */
snprintf(path, sizeof(path),
"%s/%s", busdir, name);
files = ecore_file_ls(path);
if (files)
{
char *file;
while ((file = ecore_list_next(files)))
{
if ((!strncmp("temp", file, 4)) &&
(!strcmp("_input", &file[strlen(file) - 6])))
{
char *f;
sprintf(path, "/sys/bus/i2c/devices/%s/%s", name, file);
f = strdup(path);
if (f)
ecore_list_append(result, f);
char *f;
snprintf(path, sizeof(path),
"%s/%s/%s", busdir, name, file);
f = strdup(path);
if (f) ecore_list_append(result, f);
}
}
ecore_list_destroy(files);
}
ecore_list_destroy(files);
}
}
ecore_list_destroy(therms);
}
ecore_list_first_goto(result);
}
ecore_list_first_goto(result);
}
return result;
}

View File

@ -21,6 +21,7 @@ typedef enum _Sensor_Type
SENSOR_TYPE_LINUX_MACMINI,
SENSOR_TYPE_LINUX_I2C,
SENSOR_TYPE_LINUX_ACPI,
SENSOR_TYPE_LINUX_PCI,
SENSOR_TYPE_LINUX_PBOOK,
SENSOR_TYPE_LINUX_INTELCORETEMP
} Sensor_Type;
@ -69,7 +70,7 @@ EAPI int e_modapi_save (E_Module *m);
void config_temperature_module(Config_Face *inst);
void temperature_face_update_config(Config_Face *inst);
Ecore_List *temperature_get_i2c_files(void);
Ecore_List *temperature_get_bus_files(const char* bus);
#endif

View File

@ -26,18 +26,20 @@ static int check(void);
static int poll_cb(void *data);
Ecore_List *
temperature_get_i2c_files()
temperature_get_bus_files(const char* bus)
{
Ecore_List *result;
Ecore_List *therms;
char path[PATH_MAX];
char busdir[PATH_MAX];
result = ecore_list_new();
if (result)
{
ecore_list_free_cb_set(result, free);
/* Look through all the i2c devices. */
therms = ecore_file_ls("/sys/bus/i2c/devices");
snprintf(busdir, sizeof(busdir), "/sys/bus/%s/devices", bus);
/* Look through all the devices for the given bus. */
therms = ecore_file_ls(busdir);
if (therms)
{
char *name;
@ -47,9 +49,9 @@ temperature_get_i2c_files()
Ecore_List *files;
/* Search each device for temp*_input, these should be
* i2c temperature devices. */
* temperature devices. */
snprintf(path, sizeof(path),
"/sys/bus/i2c/devices/%s", name);
"%s/%s", busdir, name);
files = ecore_file_ls(path);
if (files)
{
@ -63,8 +65,7 @@ temperature_get_i2c_files()
char *f;
snprintf(path, sizeof(path),
"/sys/bus/i2c/devices/%s/%s",
name, file);
"%s/%s/%s", busdir, name, file);
f = strdup(path);
if (f) ecore_list_append(result, f);
}
@ -133,7 +134,8 @@ init(void)
}
else
{
therms = temperature_get_i2c_files();
// try the i2c bus
therms = temperature_get_bus_files("i2c");
if (therms)
{
char *name;
@ -151,10 +153,44 @@ init(void)
sensor_type = SENSOR_TYPE_LINUX_I2C;
sensor_path = strdup(name);
sensor_name = strdup(path);
printf("sensor type = i2c\n"
"sensor path = %s\n"
"sensor name = %s\n",
sensor_path, sensor_name);
}
}
ecore_list_destroy(therms);
}
if (!sensor_path)
{
// try the pci bus
therms = temperature_get_bus_files("pci");
if (therms)
{
char *name;
if ((name = ecore_list_next(therms)))
{
if (ecore_file_exists(name))
{
int len;
snprintf(path, sizeof(path),
"%s", ecore_file_file_get(name));
len = strlen(path);
if (len > 6) path[len - 6] = '\0';
sensor_type = SENSOR_TYPE_LINUX_PCI;
sensor_path = strdup(name);
sensor_name = strdup(path);
printf("sensor type = pci\n"
"sensor path = %s\n"
"sensor name = %s\n",
sensor_path, sensor_name);
}
}
ecore_list_destroy(therms);
}
}
}
}
#endif
@ -208,6 +244,28 @@ init(void)
ecore_list_destroy(therms);
}
break;
case SENSOR_TYPE_LINUX_PCI:
therms = ecore_file_ls("/sys/bus/pci/devices");
if (therms)
{
char *name;
while ((name = ecore_list_next(therms)))
{
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;
}
}
ecore_list_destroy(therms);
}
break;
case SENSOR_TYPE_LINUX_ACPI:
snprintf(path, sizeof(path),
"/proc/acpi/thermal_zone/%s/temperature",
@ -301,6 +359,25 @@ check(void)
else
goto error;
break;
case SENSOR_TYPE_LINUX_PCI:
f = fopen(sensor_path, "r");
if (f)
{
fgets(buf, sizeof(buf), f);
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)