No more limits to the number of I2C temperatures allowed.

SVN revision: 28147
This commit is contained in:
David Walter Seikel 2007-01-28 16:08:12 +00:00
parent 07d6799234
commit c604c7368d
3 changed files with 83 additions and 33 deletions

View File

@ -125,28 +125,27 @@ _fill_data(E_Config_Dialog_Data *cfdata)
case SENSOR_TYPE_LINUX_MACMINI: case SENSOR_TYPE_LINUX_MACMINI:
break; break;
case SENSOR_TYPE_LINUX_I2C: case SENSOR_TYPE_LINUX_I2C:
therms = ecore_file_ls("/sys/bus/i2c/devices"); therms = temperature_get_i2c_files();
if (therms) if (therms)
{ {
char *therm_name; char *name;
while ((therm_name = ecore_list_next(therms))) while ((name = ecore_list_next(therms)))
{ {
int i; if (ecore_file_exists(name))
{
int len;
/* If there are ever more than 9 temperatures, then just increase this number. */ sprintf(path, "%s", ecore_file_get_file(name));
for (i = 0; i < 9; i++) len = strlen(path);
{ if (len > 6)
sprintf(path, "/sys/bus/i2c/devices/%s/temp%d_input", therm_name, i); path[len - 6] = '\0';
if (ecore_file_exists(path)) ecore_list_append(cfdata->sensors, strdup(path));
{ /* TODO: Track down the user friendly names and display them instead. */
sprintf(path, "temp%d", i); }
ecore_list_append(cfdata->sensors, strdup(path)); }
} ecore_list_destroy(therms);
} }
}
ecore_list_destroy(therms);
}
ecore_list_goto_first(cfdata->sensors); ecore_list_goto_first(cfdata->sensors);
while ((name = ecore_list_next(cfdata->sensors))) while ((name = ecore_list_next(cfdata->sensors)))

View File

@ -238,28 +238,25 @@ _temperature_sensor_init(Config_Face *inst)
} }
else else
{ {
therms = ecore_file_ls("/sys/bus/i2c/devices"); therms = temperature_get_i2c_files();
if (therms) if (therms)
{ {
char *name; char *name;
while ((name = ecore_list_next(therms))) if ((name = ecore_list_next(therms)))
{ {
int i; if (ecore_file_exists(name))
/* If there are ever more than 9 temperatures, then just increase this number. */
for (i = 0; i < 9; i++)
{
sprintf(path, "/sys/bus/i2c/devices/%s/temp%d_input", name, i);
if (ecore_file_exists(path))
{ {
sprintf(path, "temp%d", i); int len;
sprintf(path, "%s", ecore_file_get_file(name));
len = strlen(path);
if (len > 6)
path[len - 6] = '\0';
inst->sensor_type = SENSOR_TYPE_LINUX_I2C; inst->sensor_type = SENSOR_TYPE_LINUX_I2C;
inst->sensor_path = evas_stringshare_add(name);
inst->sensor_name = evas_stringshare_add(path); inst->sensor_name = evas_stringshare_add(path);
break;
} }
}
if (inst->sensor_type) break;
} }
ecore_list_destroy(therms); ecore_list_destroy(therms);
} }
@ -304,6 +301,7 @@ _temperature_sensor_init(Config_Face *inst)
if (ecore_file_exists(path)) if (ecore_file_exists(path))
{ {
inst->sensor_path = evas_stringshare_add(path); inst->sensor_path = evas_stringshare_add(path);
/* We really only care about the first one for the default. */
break; break;
} }
} }
@ -527,6 +525,58 @@ temperature_face_update_config(Config_Face *inst)
ecore_timer_add(inst->poll_time, _temperature_cb_check, inst); ecore_timer_add(inst->poll_time, _temperature_cb_check, inst);
} }
Ecore_List *
temperature_get_i2c_files()
{
Ecore_List *result;
Ecore_List *therms;
char path[PATH_MAX];
result = ecore_list_new();
if (result)
{
ecore_list_set_free_cb(result, free);
/* Look through all the i2c devices. */
therms = ecore_file_ls("/sys/bus/i2c/devices");
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))
{
char *f;
sprintf(path, "/sys/bus/i2c/devices/%s/%s", name, file);
f = strdup(path);
if (f)
ecore_list_append(result, f);
}
}
ecore_list_destroy(files);
}
}
ecore_list_destroy(therms);
}
ecore_list_goto_first(result);
}
return result;
}
/***************************************************************************/ /***************************************************************************/
/**/ /**/
/* module setup */ /* module setup */

View File

@ -64,6 +64,7 @@ EAPI int e_modapi_about (E_Module *m);
void config_temperature_module(Config_Face *inst); void config_temperature_module(Config_Face *inst);
void temperature_face_update_config(Config_Face *inst); void temperature_face_update_config(Config_Face *inst);
Ecore_List *temperature_get_i2c_files(void);
#endif #endif