X-Git-Url: http://wpitchoune.net/gitweb/?p=psensor-pkg-debian.git;a=blobdiff_plain;f=src%2Flib%2Fpsensor.c;h=f8c0a83a79a367d2ce6ec8eade3df2d30b46273a;hp=348885af3c841b5722698a2fa067601a888382a5;hb=bd7036af56a4b61b2b473dccbeac5e26f78b57da;hpb=e248180cc4ebc258fdd5778a26c08287089165b1 diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 348885a..f8c0a83 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -23,13 +23,11 @@ #include #define _(str) gettext(str) -#include "hdd.h" -#include "psensor.h" -#include "lmsensor.h" +#include -#ifdef HAVE_GTOP -#include "cpu.h" -#endif +#include +#include +#include struct psensor *psensor_create(char *id, char *name, @@ -44,15 +42,22 @@ struct psensor *psensor_create(char *id, psensor->id = id; psensor->name = name; psensor->chip = chip; - psensor->min = UNKNOWN_DBL_VALUE; - psensor->max = UNKNOWN_DBL_VALUE; + psensor->sess_lowest = UNKNOWN_DBL_VALUE; + psensor->sess_highest = UNKNOWN_DBL_VALUE; + + if (type & SENSOR_TYPE_PERCENT) { + psensor->min = 0; + psensor->max = 100; + } else { + psensor->min = UNKNOWN_DBL_VALUE; + psensor->max = UNKNOWN_DBL_VALUE; + } psensor->type = type; psensor->values_max_length = values_max_length; psensor->measures = measures_dbl_create(values_max_length); - psensor->alarm_enabled = 0; psensor->alarm_high_threshold = 0; psensor->alarm_low_threshold = 0; @@ -60,12 +65,8 @@ struct psensor *psensor_create(char *id, psensor->cb_alarm_raised_data = NULL; psensor->alarm_raised = 0; - psensor->url = NULL; - - psensor->color = NULL; - - psensor->graph_enabled = 1; - psensor->appindicator_enabled = 0; + psensor->provider_data = NULL; + psensor->provider_data_free_fct = &free; return psensor; } @@ -81,6 +82,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]); @@ -92,26 +94,25 @@ 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); + measures_free(s->measures); - free(sensor->url); + if (s->provider_data && s->provider_data_free_fct) + s->provider_data_free_fct(s->provider_data); - free(sensor); - } + free(s); } void psensor_list_free(struct psensor **sensors) @@ -151,30 +152,15 @@ int psensor_list_size(struct psensor **sensors) return size; } -int psensor_list_contains_type(struct psensor **sensors, unsigned int type) -{ - struct psensor **s; - - if (!sensors) - return 0; - - s = sensors; - while (*s) { - if ((*s)->type & type) - return 1; - s++; - } - - return 0; -} - struct psensor **psensor_list_add(struct psensor **sensors, struct psensor *sensor) { - int size = psensor_list_size(sensors); + int size; + struct psensor **result; + + size = psensor_list_size(sensors); - struct psensor **result - = malloc((size + 1 + 1) * sizeof(struct psensor *)); + result = malloc((size + 1 + 1) * sizeof(struct psensor *)); if (sensors) memcpy(result, sensors, size * sizeof(struct psensor *)); @@ -185,6 +171,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; @@ -204,21 +206,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; -} - -double celsius_to_fahrenheit(double c) -{ - return c * (9.0/5.0) + 32; -} - -double fahrenheit_to_celsius(double f) -{ - return (f - 32) * (5.0/9.0); -} - char * psensor_value_to_str(unsigned int type, double value, int use_celsius) { @@ -268,21 +255,19 @@ void psensor_set_current_measure(struct psensor *s, double v, struct timeval tv) s->measures[s->values_max_length - 1].value = v; s->measures[s->values_max_length - 1].time = tv; - if (s->min == UNKNOWN_DBL_VALUE || v < s->min) - s->min = v; - - if (s->max == UNKNOWN_DBL_VALUE || v > s->max) - s->max = v; + if (s->sess_lowest == UNKNOWN_DBL_VALUE || v < s->sess_lowest) + s->sess_lowest = v; - if (s->alarm_enabled) { - if (v > s->alarm_high_threshold || v < s->alarm_low_threshold) { - if (!s->alarm_raised && s->cb_alarm_raised) - s->cb_alarm_raised(s, s->cb_alarm_raised_data); + if (s->sess_highest == UNKNOWN_DBL_VALUE || v > s->sess_highest) + s->sess_highest = v; - s->alarm_raised = 1; - } else { - s->alarm_raised = 0; + if (v > s->alarm_high_threshold || v < s->alarm_low_threshold) { + if (!s->alarm_raised && s->cb_alarm_raised) { + s->alarm_raised = true; + s->cb_alarm_raised(s, s->cb_alarm_raised_data); } + } else { + s->alarm_raised = false; } } @@ -297,8 +282,8 @@ struct measure *psensor_get_current_measure(struct psensor *sensor) } /* - Returns the minimal value of a given 'type' (SENSOR_TYPE_TEMP or - SENSOR_TYPE_FAN) + * Returns the minimal value of a given 'type' (SENSOR_TYPE_TEMP or + * SENSOR_TYPE_FAN) */ static double get_min_value(struct psensor **sensors, int type) { @@ -329,8 +314,8 @@ static double get_min_value(struct psensor **sensors, int type) } /* - Returns the maximal value of a given 'type' (SENSOR_TYPE_TEMP or - SENSOR_TYPE_FAN) + * Returns the maximal value of a given 'type' (SENSOR_TYPE_TEMP or + * SENSOR_TYPE_FAN) */ double get_max_value(struct psensor **sensors, int type) { @@ -343,6 +328,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; @@ -359,28 +345,6 @@ double get_max_value(struct psensor **sensors, int type) return m; } -double -psensor_get_max_current_value(struct psensor **sensors, unsigned int type) -{ - double m = UNKNOWN_DBL_VALUE; - struct psensor **s_cur = sensors; - - while (*s_cur) { - struct psensor *s = *s_cur; - - if (s->graph_enabled && (s->type & type)) { - double v = psensor_get_current_value(s); - - if (m == UNKNOWN_DBL_VALUE || v > m) - m = v; - } - - s_cur++; - } - - return m; -} - double get_min_temp(struct psensor **sensors) { return get_min_value(sensors, SENSOR_TYPE_TEMP); @@ -401,47 +365,21 @@ double get_max_temp(struct psensor **sensors) return get_max_value(sensors, SENSOR_TYPE_TEMP); } -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); - - 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; - } - } -#endif - - if (!psensors) { /* there is no detected sensors */ - psensors = malloc(sizeof(struct psensor *)); - *psensors = NULL; - } - - return psensors; -} - 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) { @@ -449,8 +387,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) @@ -462,7 +400,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) @@ -471,6 +409,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"; } @@ -480,37 +421,21 @@ 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"); } -} - -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); -#endif + return _("N/A"); } void psensor_log_measures(struct psensor **sensors) { - if (log_level == LOG_DEBUG) + if (log_level == LOG_DEBUG) { + if (!sensors) + return; + while (*sensors) { log_debug("Measure: %s %.2f", (*sensors)->name, @@ -518,16 +443,7 @@ void psensor_log_measures(struct psensor **sensors) sensors++; } -} - -void psensor_init() -{ - lmsensor_init(); -} - -void psensor_cleanup() -{ - lmsensor_cleanup(); + } } struct psensor **psensor_list_copy(struct psensor **sensors) @@ -551,26 +467,3 @@ psensor_current_value_to_str(const struct psensor *s, unsigned int use_celsius) psensor_get_current_value(s), use_celsius); } - -struct psensor **psensor_list_filter_graph_enabled(struct psensor **sensors) -{ - int n, i; - struct psensor **result, **cur, *s; - - if (!sensors) - return NULL; - - n = psensor_list_size(sensors); - result = malloc((n+1) * sizeof(struct psensor *)); - - for (cur = sensors, i = 0; *cur; cur++) { - s = *cur; - - if (s->graph_enabled) - result[i++] = s; - } - - result[i] = NULL; - - return result; -}