enable/disable of lmsensor provider
authorJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 18 Sep 2014 12:14:17 +0000 (14:14 +0200)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 18 Sep 2014 12:14:17 +0000 (14:14 +0200)
src/lib/lmsensor.c
src/lib/lmsensor.h
src/lib/nvidia.c
src/lib/nvidia.h
src/lib/psensor.c
src/main.c

index b0acfb4..cf9f0be 100644 (file)
@@ -174,20 +174,33 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
        return psensor;
 }
 
-struct psensor **lmsensor_psensor_list_add(struct psensor **sensors,
-                                          int vn)
+void lmsensor_init()
+{
+       int err = sensors_init(NULL);
+
+       if (err) {
+               log_err(_("lmsensor: initialization failure: %s."),
+                       sensors_strerror(err));
+               init_done = 0;
+       } else {
+               init_done = 1;
+       }
+}
+
+void lmsensor_psensor_list_append(struct psensor ***sensors, int vn)
 {
        const sensors_chip_name *chip;
        int chip_nr = 0;
-       struct psensor **tmp, **result;
        const sensors_feature *feature;
        struct psensor *s;
        int i;
 
        if (!init_done)
-               return NULL;
+               lmsensor_init();
+
+       if (!init_done)
+               return;
 
-       result = sensors;
        while ((chip = sensors_get_detected_chips(NULL, &chip_nr))) {
 
                i = 0;
@@ -197,32 +210,11 @@ struct psensor **lmsensor_psensor_list_add(struct psensor **sensors,
 
                                s = lmsensor_psensor_create(chip, feature, vn);
 
-                               if (s) {
-                                       tmp = psensor_list_add(result, s);
-
-                                       if (tmp != sensors)
-                                               free(result);
-
-                                       result = tmp;
-                               }
+                               if (s)
+                                       psensor_list_append(sensors, s);
                        }
                }
        }
-
-       return result;
-}
-
-void lmsensor_init()
-{
-       int err = sensors_init(NULL);
-
-       if (err) {
-               log_err(_("lmsensor: initialization failure: %s."),
-                       sensors_strerror(err));
-               init_done = 0;
-       } else {
-               init_done = 1;
-       }
 }
 
 void lmsensor_cleanup()
index 86e6eac..341863d 100644 (file)
 
 void lmsensor_psensor_list_update(struct psensor **sensors);
 
-/*
-  Adds sensors to a given list of sensors.
-
-  Returns the new allocated list of sensors if sensors have been added
-  otherwise returns 'sensors'. The list is 'NULL' terminated.
- */
-struct psensor **
-lmsensor_psensor_list_add(struct psensor **sensors, int values_max_length);
+void lmsensor_psensor_list_append(struct psensor ***sensors, int values_length);
 
-void lmsensor_init();
 void lmsensor_cleanup();
 
 #endif
index 8f84ea8..797bbf4 100644 (file)
@@ -35,6 +35,8 @@
 
 Display *display;
 
+static const char *PROVIDER_NAME = "nvctrl";
+
 static char *get_product_name(int id, int type)
 {
        char *name;
@@ -265,8 +267,8 @@ static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len)
        name = malloc(n);
        sprintf(name, "%s %s %s", pname, strnid, stype);
 
-       sid = malloc(strlen("nvidia") + 1 + strlen(name) + 1);
-       sprintf(sid, "nvidia %s", name);
+       sid = malloc(strlen(PROVIDER_NAME) + 1 + strlen(name) + 1);
+       sprintf(sid, "%s %s", PROVIDER_NAME, name);
 
        s = psensor_create(sid, name, pname, type, value_len);
        s->nvidia_id = id;
@@ -321,29 +323,28 @@ static void add(struct psensor ***sensors, int id, int type, int values_len)
                psensor_list_append(sensors, s);
 }
 
-struct psensor **
-nvidia_psensor_list_add(struct psensor **ss, int values_len)
+void nvidia_psensor_list_append(struct psensor ***ss, int values_len)
 {
        int i, n, utype;
        Bool ret;
 
        if (!init())
-               return ss;
+               return;
 
        ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n);
        if (ret == True) {
                for (i = 0; i < n; i++) {
-                       add(&ss,
+                       add(ss,
                            i,
                            SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP,
                            values_len);
 
                        utype = SENSOR_TYPE_GPU | SENSOR_TYPE_PERCENT;
-                       add(&ss, i, utype | SENSOR_TYPE_AMBIENT, values_len);
-                       add(&ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len);
-                       add(&ss, i, utype | SENSOR_TYPE_VIDEO, values_len);
-                       add(&ss, i, utype | SENSOR_TYPE_MEMORY, values_len);
-                       add(&ss, i, utype | SENSOR_TYPE_PCIE, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_AMBIENT, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_VIDEO, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_MEMORY, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_PCIE, values_len);
                }
        }
 
@@ -353,17 +354,15 @@ nvidia_psensor_list_add(struct psensor **ss, int values_len)
                for (i = 0; i < n; i++) {
                        utype = SENSOR_TYPE_FAN | SENSOR_TYPE_RPM;
                        if (check_sensor(i, utype))
-                               add(&ss, i, utype, values_len);
+                               add(ss, i, utype, values_len);
 
                        utype = SENSOR_TYPE_FAN | SENSOR_TYPE_PERCENT;
                        if (check_sensor(i, utype))
-                               add(&ss, i, utype, values_len);
+                               add(ss, i, utype, values_len);
                }
        } else {
                log_err(_("NVIDIA: failed to retrieve number of fans."));
        }
-
-       return ss;
 }
 
 void nvidia_cleanup()
index 9c1089c..a94d72e 100644 (file)
 #ifndef _PSENSOR_NVIDIA_H_
 #define _PSENSOR_NVIDIA_H_
 
-#include "psensor.h"
+#include <psensor.h>
 
-/*
-  Updates temperatures of NVidia sensors.
-*/
 void nvidia_psensor_list_update(struct psensor **sensors);
 
-/*
-  Adds NVIDIA sensors to a given list of sensors.
-
-  Returns the new allocated list of sensors if sensors have been added
-  otherwise returns 'sensors'. The list is 'NULL' terminated.
- */
-struct psensor **nvidia_psensor_list_add(struct psensor **sensors,
-                                        int values_max_length);
+void nvidia_psensor_list_append(struct psensor ***sensors, int values_length);
 
 void nvidia_cleanup();
 
index 1efff09..cd7fcf6 100644 (file)
@@ -25,7 +25,6 @@
 
 #include <hdd.h>
 #include <psensor.h>
-#include <lmsensor.h>
 #include <temperature.h>
 
 struct psensor *psensor_create(char *id,
@@ -415,7 +414,7 @@ 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) {
                tmp_psensors = hddtemp_psensor_list_add(psensors,
@@ -511,8 +510,6 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius)
 
 void psensor_list_update_measures(struct psensor **sensors)
 {
-       lmsensor_psensor_list_update(sensors);
-
        if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDDTEMP))
                hddtemp_psensor_list_update(sensors);
 
@@ -536,12 +533,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)
index 267aa43..22072f6 100644 (file)
@@ -157,6 +157,8 @@ static void *update_measures(void *data)
                update_psensor_values_size(sensors, cfg);
 
                psensor_list_update_measures(sensors);
+
+               lmsensor_psensor_list_update(sensors);
 #ifdef HAVE_REMOTE_SUPPORT
                remote_psensor_list_update(sensors);
 #endif
@@ -461,9 +463,12 @@ static struct psensor **create_sensors_list(const char *url,
        } else {
                sensors = get_all_sensors(use_libatasmart, 600);
 
+               if (config_is_lmsensor_enabled())
+                       lmsensor_psensor_list_append(&sensors, 600);
+
 #ifdef HAVE_NVIDIA
                if (config_is_nvctrl_enabled())
-                       sensors = nvidia_psensor_list_add(sensors, 600);
+                       nvidia_psensor_list_append(&sensors, 600);
 #endif
 #ifdef HAVE_LIBATIADL
                if (config_is_atiadlsdk_enabled())