diff options
author | Leandro Pereira <leandro@hardinfo.org> | 2017-07-04 11:36:45 -0700 |
---|---|---|
committer | Leandro Pereira <leandro@hardinfo.org> | 2017-07-04 11:36:45 -0700 |
commit | 9feaca9d2e36ef39fadad49a640a024b1adafe15 (patch) | |
tree | 525cfbc50195547f663836ed787ff8970ab56364 /modules/devices | |
parent | 101d727964eb89553dffda452b903a460efc4e54 (diff) |
Ungroup sensor values
This is a step in adding sensor graphing support.
Diffstat (limited to 'modules/devices')
-rw-r--r-- | modules/devices/sensors.c | 162 |
1 files changed, 90 insertions, 72 deletions
diff --git a/modules/devices/sensors.c b/modules/devices/sensors.c index f6d843a6..8c33feb3 100644 --- a/modules/devices/sensors.c +++ b/modules/devices/sensors.c @@ -126,6 +126,17 @@ static void read_sensor_labels(gchar *driver) { fclose(conf); } +static void add_sensor(const char *type, + const char *sensor, + const char *driver, + double value, + const char *unit) { + static int count = 0; + + sensors = h_strdup_cprintf("%s#%d=%s|%s|%.2f%s\n", + sensors, type, count++, driver, sensor, value, unit); +} + static gchar *get_sensor_label(gchar *sensor) { gchar *ret; @@ -186,17 +197,37 @@ struct HwmonSensor { const char *friendly_name; const char *path_format; const char *key_format; - const char *value_format; + const char *unit; const float adjust_ratio; const int begin_at; }; static const struct HwmonSensor hwmon_sensors[] = { - {"Cooling Fans", "%s/fan%d_input", "fan%d", "%s (%s)=%.0fRPM\n", 1.0, 1}, - {"Temperature", "%s/temp%d_input", "temp%d", "%s (%s)=%.2f\302\260C\n", - 1000.0, 1}, - {"Voltage Values", "%s/in%d_input", "in%d", "%s (%s)=%.3fV\n", 1000.0, 0}, - {NULL, NULL, NULL, NULL, 0.0, 0}, + { + "Fan", + "%s/fan%d_input", + "fan%d", + "RPM", + 1.0, + 1 + }, + { + "Temperature", + "%s/temp%d_input", + "temp%d", + "\302\260C", + 1000.0, + 1 + }, + { + "Voltage", + "%s/in%d_input", + "in%d", + "V", + 1000.0, + 0 + }, + { } }; static const char *hwmon_prefix[] = {"device", "", NULL}; @@ -220,7 +251,6 @@ static void read_sensors_hwmon(void) { } for (sensor = hwmon_sensors; sensor->friendly_name; sensor++) { - char *output = NULL; DEBUG("current sensor type=%s", sensor->friendly_name); for (count = sensor->begin_at;; count++) { @@ -238,10 +268,14 @@ static void read_sensors_hwmon(void) { mon = g_strdup_printf(sensor->key_format, count); name = get_sensor_label(mon); if (!g_str_equal(name, "ignore")) { - output = h_strdup_cprintf( - sensor->value_format, output, name, driver, - adjust_sensor(mon, - atof(tmp) / sensor->adjust_ratio)); + float adjusted = adjust_sensor(mon, + atof(tmp) / sensor->adjust_ratio); + + add_sensor(sensor->friendly_name, + name, + driver, + adjusted, + sensor->unit); } g_free(tmp); @@ -249,12 +283,6 @@ static void read_sensors_hwmon(void) { g_free(name); g_free(path_sensor); } - - if (output) { - sensors = g_strconcat(sensors, "[", sensor->friendly_name, - "]\n", output, "\n", NULL); - g_free(output); - } } g_free(path_hwmon); @@ -275,7 +303,6 @@ static void read_sensors_acpi(void) { if ((tz = g_dir_open(path_tz, 0, NULL))) { const gchar *entry; - gchar *temp = g_strdup(""); while ((entry = g_dir_read_name(tz))) { gchar *path = @@ -287,17 +314,14 @@ static void read_sensors_acpi(void) { sscanf(contents, "temperature: %d C", &temperature); - temp = h_strdup_cprintf("\n%s=%d\302\260C\n", temp, entry, - temperature); - - g_free(contents); + add_sensor("Temperature", + entry, + "ACPI Thermal Zone", + temperature, + "\302\260C"); } } - if (*temp != '\0') - sensors = h_strdup_cprintf("\n[ACPI Thermal Zone]\n%s", sensors, - temp); - g_dir_close(tz); } } @@ -322,17 +346,16 @@ static void read_sensors_sys_thermal(void) { sscanf(contents, "%d", &temperature); - temp = h_strdup_cprintf("\n%s=%.2f\302\260C\n", temp, entry, - (1.0 * temperature / 1000)); + add_sensor("Temperature", + entry, + "thermal_zone", + temperature / 1000.0, + "\302\260C"); g_free(contents); } } - if (*temp != '\0') - sensors = h_strdup_cprintf("\n[ACPI Thermal Zone (sysfs)]\n%s", - sensors, temp); - g_dir_close(tz); } } @@ -347,9 +370,11 @@ static void read_sensors_omnibook(void) { sscanf(contents, "CPU temperature: %d C", &temperature); - sensors = h_strdup_cprintf("\n[Omnibook]\n" - "CPU temperature=%d\302\260C\n", - sensors, temperature); + add_sensor("Temperature", + "CPU", + "omnibook", + temperature, + "\302\260C\n"); g_free(contents); } @@ -357,49 +382,42 @@ static void read_sensors_omnibook(void) { static void read_sensors_hddtemp(void) { Socket *s; - static gchar *old = NULL; gchar buffer[1024]; gint len = 0; - if ((s = sock_connect("127.0.0.1", 7634))) { - while (!len) - len = sock_read(s, buffer, sizeof(buffer)); - sock_close(s); - - if (len > 2 && buffer[0] == '|' && buffer[1] == '/') { - gchar **disks; - int i; - - g_free(old); - - old = g_strdup("[Hard Disk Temperature]\n"); - - disks = g_strsplit(buffer, "\n", 0); - for (i = 0; disks[i]; i++) { - gchar **fields = g_strsplit(disks[i] + 1, "|", 5); - - /* - * 0 -> /dev/hda - * 1 -> FUJITSU MHV2080AH - * 2 -> 41 - * 3 -> C - */ - old = - h_strdup_cprintf("\n%s (%s)=%s\302\260%s\n", old, fields[1], - fields[0], fields[2], fields[3]); - - g_strfreev(fields); - } + if (!(s = sock_connect("127.0.0.1", 7634))) + return; - g_strfreev(disks); + while (!len) + len = sock_read(s, buffer, sizeof(buffer)); + sock_close(s); + + if (len > 2 && buffer[0] == '|' && buffer[1] == '/') { + gchar **disks; + int i; + + disks = g_strsplit(buffer, "\n", 0); + for (i = 0; disks[i]; i++) { + gchar **fields = g_strsplit(disks[i] + 1, "|", 5); + + /* + * 0 -> /dev/hda + * 1 -> FUJITSU MHV2080AH + * 2 -> 41 + * 3 -> C + */ + const gchar *unit = strcmp(fields[3], "C") + ? "\302\260C" : "\302\260F"; + add_sensor("Hard Drive", + fields[1], + "hddtemp", + atoi(fields[2]), + unit); + + g_strfreev(fields); } - } else { - g_free(old); - old = NULL; - } - if (old) { - sensors = g_strconcat(sensors, "\n", old, NULL); + g_strfreev(disks); } } |