From a0dde8ab4748d4278d4d2c98e93a96e0f6931b0f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Tue, 12 Jul 2011 20:22:32 +0000 Subject: [PATCH] measure with value of different types --- src/graph.c | 4 ++-- src/lib/lmsensor.c | 8 ++++---- src/lib/measure.c | 4 ++-- src/lib/measure.h | 11 ++++++++--- src/lib/psensor.c | 36 ++++++++++++++++++------------------ src/libpsensor_json/psensor_json.c | 2 +- src/ui_sensorlist.c | 2 +- 7 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/graph.c b/src/graph.c index 51dd1c8..db6f7a3 100644 --- a/src/graph.c +++ b/src/graph.c @@ -165,9 +165,9 @@ static void draw_sensor_curve(struct psensor *s, double v; t = s->measures[i].time.tv_sec; - v = s->measures[i].value; + v = s->measures[i].value.d_num; - if (v == UNKNOWN_VALUE || !t || (t - bt) < 0) + if (v == UNKNOWN_DBL_VALUE || !t || (t - bt) < 0) continue; x = (t - bt) * g_width / (et - bt) + g_xoff; diff --git a/src/lib/lmsensor.c b/src/lib/lmsensor.c index 8f7999b..b06129d 100644 --- a/src/lib/lmsensor.c +++ b/src/lib/lmsensor.c @@ -42,7 +42,7 @@ lmsensor_get_value(const sensors_chip_name *name, fprintf(stderr, _("ERROR: Can't get value of subfeature %s: %s\n"), sub->name, sensors_strerror(err)); - val = UNKNOWN_VALUE; + val = UNKNOWN_DBL_VALUE; } return val; } @@ -59,7 +59,7 @@ double lmsensor_get_temp_input(struct psensor *sensor) if (sf) return lmsensor_get_value(chip, sf); else - return UNKNOWN_VALUE; + return UNKNOWN_DBL_VALUE; } double lmsensor_get_fan_input(struct psensor *sensor) @@ -74,7 +74,7 @@ double lmsensor_get_fan_input(struct psensor *sensor) if (sf) return lmsensor_get_value(chip, sf); else - return UNKNOWN_VALUE; + return UNKNOWN_DBL_VALUE; } void lmsensor_psensor_list_update(struct psensor **sensors) @@ -149,7 +149,7 @@ lmsensor_psensor_create(const sensors_chip_name *chip, psensor->feature = feature; if (feature->type == SENSORS_FEATURE_TEMP - && (lmsensor_get_temp_input(psensor) == UNKNOWN_VALUE)) { + && (lmsensor_get_temp_input(psensor) == UNKNOWN_DBL_VALUE)) { free(psensor); return NULL; } diff --git a/src/lib/measure.c b/src/lib/measure.c index 28de019..41217a1 100644 --- a/src/lib/measure.c +++ b/src/lib/measure.c @@ -23,7 +23,7 @@ #include "measure.h" -struct measure *measures_create(int size) +struct measure *measures_dbl_create(int size) { int i; struct measure *result; @@ -31,7 +31,7 @@ struct measure *measures_create(int size) result = malloc(size * sizeof(struct measure)); for (i = 0; i < size; i++) { - result[i].value = UNKNOWN_VALUE; + result[i].value.d_num = UNKNOWN_DBL_VALUE; timerclear(&result[i].time); } diff --git a/src/lib/measure.h b/src/lib/measure.h index b197245..759b08f 100644 --- a/src/lib/measure.h +++ b/src/lib/measure.h @@ -22,17 +22,22 @@ #include #include +#include -#define UNKNOWN_VALUE DBL_MIN +#define UNKNOWN_DBL_VALUE DBL_MIN struct measure { - double value; + union value { + double d_num; + uint64_t ui64_num; + } value; + struct timeval time; }; void measure_copy(struct measure *src, struct measure *dst); -struct measure *measures_create(int size); +struct measure *measures_dbl_create(int size); void measures_free(struct measure *measures); diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 96560db..7e31a39 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -40,13 +40,13 @@ struct psensor *psensor_create(char *id, char *name, psensor->id = id; psensor->name = name; psensor->enabled = 1; - psensor->min = UNKNOWN_VALUE; - psensor->max = UNKNOWN_VALUE; + psensor->min = UNKNOWN_DBL_VALUE; + psensor->max = UNKNOWN_DBL_VALUE; psensor->type = type; psensor->values_max_length = values_max_length; - psensor->measures = measures_create(values_max_length); + psensor->measures = measures_dbl_create(values_max_length); psensor->alarm_limit = 0; @@ -70,7 +70,7 @@ void psensor_values_resize(struct psensor *s, int new_size) cur_size = s->values_max_length; cur_ms = s->measures; - new_ms = measures_create(new_size); + new_ms = measures_dbl_create(new_size); if (cur_ms) { int i; @@ -233,13 +233,13 @@ psensor_set_current_measure(struct psensor *s, &s->measures[1], (s->values_max_length - 1) * sizeof(struct measure)); - s->measures[s->values_max_length - 1].value = v; + s->measures[s->values_max_length - 1].value.d_num = v; s->measures[s->values_max_length - 1].time = tv; - if (s->min == UNKNOWN_VALUE || v < s->min) + if (s->min == UNKNOWN_DBL_VALUE || v < s->min) s->min = v; - if (s->max == UNKNOWN_VALUE || v > s->max) + if (s->max == UNKNOWN_DBL_VALUE || v > s->max) s->max = v; if (s->alarm_limit && s->alarm_enabled) { @@ -257,7 +257,7 @@ psensor_set_current_measure(struct psensor *s, double psensor_get_current_value(struct psensor *sensor) { - return sensor->measures[sensor->values_max_length - 1].value; + return sensor->measures[sensor->values_max_length - 1].value.d_num; } struct measure *psensor_get_current_measure(struct psensor *sensor) @@ -271,7 +271,7 @@ struct measure *psensor_get_current_measure(struct psensor *sensor) */ double get_min_value(struct psensor **sensors, int type) { - double m = UNKNOWN_VALUE; + double m = UNKNOWN_DBL_VALUE; struct psensor **s = sensors; while (*s) { @@ -282,12 +282,12 @@ double get_min_value(struct psensor **sensors, int type) double t; for (i = 0; i < sensor->values_max_length; i++) { - t = sensor->measures[i].value; + t = sensor->measures[i].value.d_num; - if (t == UNKNOWN_VALUE) + if (t == UNKNOWN_DBL_VALUE) continue; - if (m == UNKNOWN_VALUE || t < m) + if (m == UNKNOWN_DBL_VALUE || t < m) m = t; } } @@ -303,7 +303,7 @@ double get_min_value(struct psensor **sensors, int type) */ static double get_max_value(struct psensor **sensors, int type) { - double m = UNKNOWN_VALUE; + double m = UNKNOWN_DBL_VALUE; struct psensor **s = sensors; while (*s) { @@ -313,12 +313,12 @@ static double get_max_value(struct psensor **sensors, int type) int i; double t; for (i = 0; i < sensor->values_max_length; i++) { - t = sensor->measures[i].value; + t = sensor->measures[i].value.d_num; - if (t == UNKNOWN_VALUE) + if (t == UNKNOWN_DBL_VALUE) continue; - if (m == UNKNOWN_VALUE || t > m) + if (m == UNKNOWN_DBL_VALUE || t > m) m = t; } } @@ -331,7 +331,7 @@ static double get_max_value(struct psensor **sensors, int type) double psensor_get_max_current_value(struct psensor **sensors, unsigned int type) { - double m = UNKNOWN_VALUE; + double m = UNKNOWN_DBL_VALUE; struct psensor **s_cur = sensors; while (*s_cur) { @@ -340,7 +340,7 @@ psensor_get_max_current_value(struct psensor **sensors, unsigned int type) if (s->enabled && (s->type & type)) { double v = psensor_get_current_value(s); - if (m == UNKNOWN_VALUE || v > m) + if (m == UNKNOWN_DBL_VALUE || v > m) m = v; } diff --git a/src/libpsensor_json/psensor_json.c b/src/libpsensor_json/psensor_json.c index 12bd3ba..b31dc35 100644 --- a/src/libpsensor_json/psensor_json.c +++ b/src/libpsensor_json/psensor_json.c @@ -53,7 +53,7 @@ json_object *sensor_to_json_object(struct psensor *s) mo = json_object_new_object(); json_object_object_add(mo, ATT_MEASURE_VALUE, - json_object_new_double(m->value)); + json_object_new_double(m->value.d_num)); json_object_object_add(mo, ATT_MEASURE_TIME, json_object_new_int((m->time).tv_sec)); json_object_object_add(obj, ATT_SENSOR_LAST_MEASURE, mo); diff --git a/src/ui_sensorlist.c b/src/ui_sensorlist.c index 53235fb..ad49b22 100644 --- a/src/ui_sensorlist.c +++ b/src/ui_sensorlist.c @@ -72,7 +72,7 @@ void ui_sensorlist_update(struct ui_psensor *ui) str = psensor_value_to_string(s->type, s->measures[s->values_max_length - - 1].value); + 1].value.d_num); gtk_list_store_set(GTK_LIST_STORE(model), &iter, COL_TEMP, str, -1); free(str); -- 2.7.4