diff options
| author | Ondrej Čerman <ondrej.cerman@gmail.com> | 2019-05-25 22:35:27 +0200 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-05-25 14:14:18 -0700 | 
| commit | 57fcf75037639f8c9de9b907e4e2b2f1ef8012cc (patch) | |
| tree | 2a3cb6af4ebcd364d9750a1726bebe18507540ad /modules | |
| parent | 443151486e0ba43c5641a262c0341fc9130c7186 (diff) | |
devices/sensors: hwmon - driver key replaced with device name key
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/devices/sensors.c | 67 | 
1 files changed, 34 insertions, 33 deletions
| diff --git a/modules/devices/sensors.c b/modules/devices/sensors.c index 796d295c..6d9a628e 100644 --- a/modules/devices/sensors.c +++ b/modules/devices/sensors.c @@ -29,7 +29,7 @@ GHashTable *sensor_compute = NULL;  GHashTable *sensor_labels = NULL;  gboolean hwmon_first_run = TRUE; -static void read_sensor_labels(gchar *driver) { +static void read_sensor_labels(gchar *devname) {      FILE *conf;      gchar buf[256], *line, *p;      gboolean lock = FALSE; @@ -64,7 +64,7 @@ static void read_sensor_labels(gchar *driver) {                      continue;                  if (!key) -                    key = g_strdup_printf("%s/%s", driver, names[i]); +                    key = g_strdup_printf("%s/%s", devname, names[i]);                  else if (!value)                      value = g_strdup(names[i]);                  else @@ -82,7 +82,7 @@ static void read_sensor_labels(gchar *driver) {              while (*p == ' ')                  p++; -            g_hash_table_insert(sensor_labels, g_strdup_printf("%s/%s", driver, p), "ignore"); +            g_hash_table_insert(sensor_labels, g_strdup_printf("%s/%s", devname, p), "ignore");          } else if (lock && strstr(line, "compute")) { /* compute lines */              strend(line, ',');              gchar **formulas = g_strsplit(strstr(line, "compute") + 7, " ", 0); @@ -93,7 +93,7 @@ static void read_sensor_labels(gchar *driver) {                      continue;                  if (!key) -                    key = g_strdup_printf("%s/%s", driver, formulas[i]); +                    key = g_strdup_printf("%s/%s", devname, formulas[i]);                  else if (!formula)                      formula = g_strdup(formulas[i]);                  else @@ -111,7 +111,7 @@ static void read_sensor_labels(gchar *driver) {                  for (i = 1; chips[i]; i++) {                      strend(chips[i], '*'); -                    if (g_str_has_prefix(chips[i] + 1, driver)) { +                    if (g_str_has_prefix(chips[i] + 1, devname)) {                          lock = TRUE;                          break;                      } @@ -129,15 +129,15 @@ static void read_sensor_labels(gchar *driver) {  static void add_sensor(const char *type,                         const char *sensor, -                       const char *driver, +                       const char *parent,                         double value,                         const char *unit) {      char key[64];      sensors = h_strdup_cprintf("%s/%s=%.2f%s|%s\n", sensors, -        driver, sensor, value, unit, type); +        parent, sensor, value, unit, type); -    snprintf(key, sizeof(key), "%s/%s", driver, sensor); +    snprintf(key, sizeof(key), "%s/%s", parent, sensor);      moreinfo_add_with_prefix("DEV", key, g_strdup_printf("%.2f%s", value, unit));      lginterval = h_strdup_cprintf("UpdateInterval$%s=1000\n", lginterval, key); @@ -167,34 +167,35 @@ static char *get_sensor_path(int number, const char *prefix) {      return g_strdup_printf("/sys/class/hwmon/hwmon%d/%s", number, prefix);  } -static char *determine_driver_for_hwmon_path(char *path) { -    char *tmp, *driver; +static char *determine_devname_for_hwmon_path(char *path) { +    char *tmp, *devname = NULL; +    // device name +    tmp = g_strdup_printf("%s/name", path); +    g_file_get_contents(tmp, &devname, NULL, NULL); +    g_free(tmp); +    if (devname) +        return g_strstrip(devname); + +    // fallback: driver name (from driver link)      tmp = g_strdup_printf("%s/device/driver", path); -    driver = g_file_read_link(tmp, NULL); +    devname = g_file_read_link(tmp, NULL);      g_free(tmp); -    if (driver) { -        tmp = g_path_get_basename(driver); -        g_free(driver); -        driver = tmp; -    } else { +    if (!devname) { +        // fallback: device folder name (from device link)          tmp = g_strdup_printf("%s/device", path); -        driver = g_file_read_link(tmp, NULL); +        devname = g_file_read_link(tmp, NULL);          g_free(tmp);      } -    if (!driver) { -        tmp = g_strdup_printf("%s/name", path); -        if (!g_file_get_contents(tmp, &driver, NULL, NULL)) { -            driver = g_strdup("unknown"); -        } else { -            driver = g_strstrip(driver); -        } -        g_free(tmp); +    if (devname) { +        tmp = g_path_get_basename(devname); +        g_free(devname); +        return tmp;      } -    return driver; +    return g_strdup("unknown");  }  struct HwmonSensor { @@ -284,7 +285,7 @@ static gboolean read_raw_hwmon_value(gchar *path_hwmon, const gchar *item_path_f  static void read_sensors_hwmon(void) {      int hwmon, count, min, max; -    gchar *path_hwmon, *tmp, *driver, *name, *mon, *key; +    gchar *path_hwmon, *tmp, *devname, *name, *mon, *key;      const char **prefix, *entry;      GDir *dir;      GRegex *regex; @@ -297,10 +298,10 @@ static void read_sensors_hwmon(void) {          while (path_hwmon && g_file_test(path_hwmon, G_FILE_TEST_EXISTS)) {              const struct HwmonSensor *sensor; -            driver = determine_driver_for_hwmon_path(path_hwmon); -            DEBUG("hwmon%d has driver=%s", hwmon, driver); +            devname = determine_devname_for_hwmon_path(path_hwmon); +            DEBUG("hwmon%d has device=%s", hwmon, devname);              if (hwmon_first_run) { -                read_sensor_labels(driver); +                read_sensor_labels(devname);              }              dir = g_dir_open(path_hwmon, 0, NULL); @@ -344,7 +345,7 @@ static void read_sensors_hwmon(void) {                      }                      mon = g_strdup_printf(sensor->key_format, count); -                    key = g_strdup_printf("%s/%s", driver, mon); +                    key = g_strdup_printf("%s/%s", devname, mon);                      name = get_sensor_label_from_conf(key);                      if (name == NULL){                          if (read_raw_hwmon_value(path_hwmon, sensor->label_path_format, count, &name)){ @@ -361,7 +362,7 @@ static void read_sensors_hwmon(void) {                          add_sensor(sensor->friendly_name,                                     name, -                                   driver, +                                   devname,                                     adjusted,                                     sensor->unit);                      } @@ -375,7 +376,7 @@ static void read_sensors_hwmon(void) {              g_dir_close(dir);              g_free(path_hwmon); -            g_free(driver); +            g_free(devname);              path_hwmon = get_sensor_path(++hwmon, *prefix);          } | 
