measure with value of different types
authorJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 12 Jul 2011 20:22:32 +0000 (20:22 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 12 Jul 2011 20:22:32 +0000 (20:22 +0000)
src/graph.c
src/lib/lmsensor.c
src/lib/measure.c
src/lib/measure.h
src/lib/psensor.c
src/libpsensor_json/psensor_json.c
src/ui_sensorlist.c

index 51dd1c8..db6f7a3 100644 (file)
@@ -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;
index 8f7999b..b06129d 100644 (file)
@@ -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;
        }
index 28de019..41217a1 100644 (file)
@@ -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);
        }
 
index b197245..759b08f 100644 (file)
 
 #include <sys/time.h>
 #include <float.h>
+#include <stdint.h>
 
-#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);
 
index 96560db..7e31a39 100644 (file)
@@ -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;
                }
 
index 12bd3ba..b31dc35 100644 (file)
@@ -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);
index 53235fb..ad49b22 100644 (file)
@@ -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);