Imported Upstream version 1.1.2
[psensor-pkg-ubuntu.git] / src / lib / psensor.c
index 9f063d0..b9da81d 100644 (file)
 
 #include <hdd.h>
 #include <psensor.h>
-#include <lmsensor.h>
 #include <temperature.h>
 
-#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)
@@ -152,27 +155,12 @@ 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;
+
+       size = psensor_list_size(sensors);
 
        struct psensor **result
            = malloc((size + 1 + 1) * sizeof(struct psensor *));
@@ -186,6 +174,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 +209,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 +333,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;
 
@@ -392,47 +392,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) {
@@ -440,8 +414,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 +427,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 +436,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,32 +448,13 @@ 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)
@@ -511,16 +469,6 @@ 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)
 {
        struct psensor **result;