X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fpsensor.c;h=ef974f0d99d09db1ccadcba171f55643a9d37a66;hb=7df6be97f428ae704d2572ad79e2c7d7d1afc90f;hp=9f063d0d5cac36e6ef79c9c1233a67de3c1637d7;hpb=0f8920132b54243de7e911c56c87ae88300d1592;p=psensor.git diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 9f063d0..ef974f0 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -25,13 +25,8 @@ #include #include -#include #include -#ifdef HAVE_GTOP -#include "cpu.h" -#endif - struct psensor *psensor_create(char *id, char *name, char *chip, @@ -68,6 +63,9 @@ struct psensor *psensor_create(char *id, psensor->graph_enabled = 1; psensor->appindicator_enabled = 0; + psensor->provider_data = NULL; + psensor->provider_data_free_fct = &free; + return psensor; } @@ -82,6 +80,7 @@ void psensor_values_resize(struct psensor *s, int new_size) if (cur_ms) { int i; + for (i = 0; i < new_size - 1 && i < cur_size - 1; i++) measure_copy(&cur_ms[cur_size - i - 1], &new_ms[new_size - i - 1]); @@ -93,26 +92,30 @@ void psensor_values_resize(struct psensor *s, int new_size) s->measures = new_ms; } -void psensor_free(struct psensor *sensor) +void psensor_free(struct psensor *s) { - if (sensor) { - log_debug("Cleanup %s", sensor->id); + if (!s) + return; - free(sensor->name); - free(sensor->id); + log_debug("Cleanup %s", s->id); - if (sensor->chip) - free(sensor->chip); + free(s->name); + free(s->id); - if (sensor->color) - free(sensor->color); + if (s->chip) + free(s->chip); - measures_free(sensor->measures); + if (s->color) + free(s->color); - free(sensor->url); + measures_free(s->measures); - free(sensor); - } + free(s->url); + + if (s->provider_data && s->provider_data_free_fct) + s->provider_data_free_fct(s->provider_data); + + free(s); } void psensor_list_free(struct psensor **sensors) @@ -172,7 +175,9 @@ int psensor_list_contains_type(struct psensor **sensors, unsigned int type) struct psensor **psensor_list_add(struct psensor **sensors, struct psensor *sensor) { - int size = psensor_list_size(sensors); + int size; + + size = psensor_list_size(sensors); struct psensor **result = malloc((size + 1 + 1) * sizeof(struct psensor *)); @@ -186,6 +191,22 @@ struct psensor **psensor_list_add(struct psensor **sensors, return result; } +void psensor_list_append(struct psensor ***sensors, struct psensor *sensor) +{ + struct psensor **tmp; + + if (!sensor) + return; + + tmp = psensor_list_add(*sensors, sensor); + + if (tmp != *sensors) { + free(*sensors); + *sensors = tmp; + } +} + + struct psensor *psensor_list_get_by_id(struct psensor **sensors, const char *id) { struct psensor **sensors_cur = sensors; @@ -205,11 +226,6 @@ int is_temp_type(unsigned int type) return type & SENSOR_TYPE_TEMP; } -int is_fan_type(unsigned int type) -{ - return type & SENSOR_TYPE_FAN; -} - char * psensor_value_to_str(unsigned int type, double value, int use_celsius) { @@ -334,6 +350,7 @@ double get_max_value(struct psensor **sensors, int type) if (sensor->type & type) { int i; double t; + for (i = 0; i < sensor->values_max_length; i++) { t = sensor->measures[i].value; @@ -395,27 +412,15 @@ double get_max_temp(struct psensor **sensors) struct psensor **get_all_sensors(int use_libatasmart, int values_max_length) { struct psensor **psensors; - struct psensor **tmp_psensors; - psensors = lmsensor_psensor_list_add(NULL, values_max_length); + psensors = NULL; + + if (!use_libatasmart) + hddtemp_psensor_list_append(&psensors, values_max_length); - if (!use_libatasmart) { - tmp_psensors = hddtemp_psensor_list_add(psensors, - values_max_length); - if (tmp_psensors != psensors) { - free(psensors); - psensors = tmp_psensors; - } - } #ifdef HAVE_ATASMART - else { - tmp_psensors = hdd_psensor_list_add(psensors, - values_max_length); - if (tmp_psensors != psensors) { - free(psensors); - psensors = tmp_psensors; - } - } + else + atasmart_psensor_list_append(&psensors, values_max_length); #endif if (!psensors) { /* there is no detected sensors */ @@ -430,9 +435,17 @@ const char *psensor_type_to_str(unsigned int type) { if (type & SENSOR_TYPE_NVCTRL) { if (type & SENSOR_TYPE_TEMP) - return "NVIDIA GPU Temperature"; - else - return "NVIDIA GPU"; + return "Temperature"; + else if (type & SENSOR_TYPE_GRAPHICS) + return "Graphics usage"; + else if (type & SENSOR_TYPE_VIDEO) + return "Video usage"; + else if (type & SENSOR_TYPE_MEMORY) + return "Memory usage"; + else if (type & SENSOR_TYPE_PCIE) + return "PCIe usage"; + + return "NVIDIA GPU"; } if (type & SENSOR_TYPE_ATIADL) { @@ -440,8 +453,8 @@ const char *psensor_type_to_str(unsigned int type) return "AMD GPU Temperature"; else if (type & SENSOR_TYPE_RPM) return "AMD GPU Fan Speed"; - else /* type & SENSOR_TYPE_USAGE */ - return "AMD GPU Usage"; + /*else type & SENSOR_TYPE_USAGE */ + return "AMD GPU Usage"; } if ((type & SENSOR_TYPE_HDD_TEMP) == SENSOR_TYPE_HDD_TEMP) @@ -453,7 +466,7 @@ const char *psensor_type_to_str(unsigned int type) if (type & SENSOR_TYPE_TEMP) return "Temperature"; - if (type & SENSOR_TYPE_FAN) + if (type & SENSOR_TYPE_RPM) return "Fan"; if (type & SENSOR_TYPE_CPU) @@ -462,6 +475,9 @@ const char *psensor_type_to_str(unsigned int type) if (type & SENSOR_TYPE_REMOTE) return "Remote"; + if (type & SENSOR_TYPE_MEMORY) + return "Memory"; + return "N/A"; } @@ -471,31 +487,23 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius) if (is_temp_type(type)) { if (use_celsius) return "\302\260C"; - else - return "\302\260F"; - } else if (is_fan_type(type)) { + return "\302\260F"; + } else if (type & SENSOR_TYPE_RPM) { return _("RPM"); - } else if (type & SENSOR_TYPE_CPU_USAGE) { + } else if (type & SENSOR_TYPE_PERCENT) { return _("%"); - } else { - return _("N/A"); } + return _("N/A"); } void psensor_list_update_measures(struct psensor **sensors) { - lmsensor_psensor_list_update(sensors); - -#ifdef HAVE_GTOP - cpu_psensor_list_update(sensors); -#endif - if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDDTEMP)) hddtemp_psensor_list_update(sensors); #ifdef HAVE_ATASMART if (psensor_list_contains_type(sensors, SENSOR_TYPE_ATASMART)) - hdd_psensor_list_update(sensors); + atasmart_psensor_list_update(sensors); #endif } @@ -513,12 +521,10 @@ void psensor_log_measures(struct psensor **sensors) void psensor_init() { - lmsensor_init(); } void psensor_cleanup() { - lmsensor_cleanup(); } struct psensor **psensor_list_copy(struct psensor **sensors)