reorganization of the sensor type flags
authorJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 14 Mar 2013 08:44:56 +0000 (08:44 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 14 Mar 2013 08:44:56 +0000 (08:44 +0000)
src/lib/hdd_atasmart.c
src/lib/hdd_hddtemp.c
src/lib/lmsensor.c
src/lib/nvidia.c
src/lib/psensor.c
src/lib/psensor.h
tests/test_psensor_type_to_unit_str.c

index ae94a17..d1a399e 100644 (file)
@@ -45,10 +45,14 @@ static struct psensor *
 create_sensor(char *id, char *name, SkDisk *disk, int values_max_length)
 {
        struct psensor *s;
+       int t;
+
+       t = SENSOR_TYPE_ATASMART | SENSOR_TYPE_HDD | SENSOR_TYPE_TEMP;
+
        s = psensor_create(id,
                           strdup(name),
                           strdup("HDD"),
-                          SENSOR_TYPE_HDD_TEMP_ATASMART,
+                          t,
                           values_max_length);
 
        s->disk = disk;
@@ -165,7 +169,7 @@ void hdd_psensor_list_update(struct psensor **sensors)
        cur = sensors;
        while (*cur) {
                s = *cur;
-               if (s->type == SENSOR_TYPE_HDD_TEMP_ATASMART) {
+               if (s->type & SENSOR_TYPE_ATASMART) {
                        ret = sk_disk_smart_read_data(s->disk);
 
                        if (!ret) {
index 3358b9c..5c50a5c 100644 (file)
@@ -115,8 +115,12 @@ static int str_index(char *str, char d)
 static struct psensor *
 create_sensor(char *id, char *name, int values_max_length)
 {
+       int t;
+
+       t = SENSOR_TYPE_HDD | SENSOR_TYPE_HDDTEMP | SENSOR_TYPE_TEMP;
+
        return psensor_create(id, name, strdup("HDD"),
-                             SENSOR_TYPE_HDD_TEMP_HDDTEMP,
+                             t,
                              values_max_length);
 }
 
@@ -218,7 +222,7 @@ static void update(struct psensor **sensors, struct hdd_info *info)
        struct psensor **sensor_cur = sensors;
 
        while (*sensor_cur) {
-               if ((*sensor_cur)->type == SENSOR_TYPE_HDD_TEMP_HDDTEMP
+               if ((*sensor_cur)->type == SENSOR_TYPE_HDDTEMP
                    && !strcmp((*sensor_cur)->id + 4, info->name))
                        psensor_set_current_value(*sensor_cur,
                                                  (float)info->temp);
index 8279679..481d471 100644 (file)
@@ -84,14 +84,15 @@ void lmsensor_psensor_list_update(struct psensor **sensors)
                return ;
 
        while (*s_ptr) {
-               struct psensor *sensor = *s_ptr;
-
-               if (sensor->type == SENSOR_TYPE_LMSENSOR_TEMP)
-                       psensor_set_current_value
-                           (sensor, get_temp_input(sensor));
-               else if (sensor->type == SENSOR_TYPE_LMSENSOR_FAN)
-                       psensor_set_current_value(sensor,
-                                                 get_fan_input(sensor));
+               struct psensor *s = *s_ptr;
+
+               if (s->type & SENSOR_TYPE_LMSENSOR) {
+                       if (s->type & SENSOR_TYPE_TEMP)
+                               psensor_set_current_value(s,
+                                                         get_temp_input(s));
+                       else if (s->type & SENSOR_TYPE_RPM)
+                               psensor_set_current_value(s, get_fan_input(s));
+               }
 
                s_ptr++;
        }
@@ -114,10 +115,8 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
 
        if (feature->type == SENSORS_FEATURE_TEMP) {
                fault_subfeature = SENSORS_SUBFEATURE_TEMP_FAULT;
-
        } else if (feature->type == SENSORS_FEATURE_FAN) {
                fault_subfeature = SENSORS_SUBFEATURE_FAN_FAULT;
-
        } else {
                log_err(_(
 "lmsensor: lmsensor_psensor_create failure: wrong feature type."));
@@ -132,11 +131,11 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
        if (!label)
                return NULL;
 
-       type = 0;
+       type = SENSOR_TYPE_LMSENSOR;
        if (feature->type == SENSORS_FEATURE_TEMP)
-               type = SENSOR_TYPE_LMSENSOR_TEMP;
+               type |= SENSOR_TYPE_TEMP;
        else if (feature->type == SENSORS_FEATURE_FAN)
-               type = SENSOR_TYPE_LMSENSOR_FAN;
+               type |= (SENSOR_TYPE_RPM|SENSOR_TYPE_FAN);
        else
                return NULL;
 
index 5b2bdea..2a4076f 100644 (file)
@@ -60,16 +60,19 @@ static struct psensor *create_sensor(int id, int values_len)
        char name[200];
        char *sid;
        struct psensor *s;
+       int t;
 
        sprintf(name, "GPU%d", id);
 
        sid = malloc(strlen("nvidia") + 1 + strlen(name) + 1);
        sprintf(sid, "nvidia %s", name);
 
+       t = SENSOR_TYPE_NVCTRL | SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP;
+
        s = psensor_create(sid,
                           strdup(name),
                           strdup("Nvidia GPU"),
-                          SENSOR_TYPE_NVIDIA_TEMP,
+                          t,
                           values_len);
 
        s->nvidia_id = id;
@@ -111,7 +114,7 @@ void nvidia_psensor_list_update(struct psensor **sensors)
        while (*ss) {
                s = *ss;
 
-               if (s->type == SENSOR_TYPE_NVIDIA_TEMP)
+               if (s->type & SENSOR_TYPE_NVCTRL)
                        psensor_set_current_value(s, get_temp(s));
 
                ss++;
index 7b4921e..c028c5e 100644 (file)
@@ -439,19 +439,22 @@ struct psensor **get_all_sensors(int use_libatasmart, int values_max_length)
 
 const char *psensor_type_to_str(unsigned int type)
 {
-       if ((type & SENSOR_TYPE_NVIDIA_TEMP) == SENSOR_TYPE_NVIDIA_TEMP)
-               return "NVidia GPU Temperature";
-
-       if ((type & SENSOR_TYPE_AMD_TEMP) == SENSOR_TYPE_AMD_TEMP)
-               return "AMD GPU Temperature";
-
-       if ((type & SENSOR_TYPE_AMD_FAN) == SENSOR_TYPE_AMD_FAN)
-               return "AMD GPU Fan Speed";
+       if (type & SENSOR_TYPE_NVCTRL)
+               return "NVidia GPU";
+
+       if (type & SENSOR_TYPE_ATIADL) {
+               if (type & SENSOR_TYPE_TEMP)
+                       return "AMD GPU Temperature";
+               else if (type & SENSOR_TYPE_RPM)
+                       return "AMD GPU Fan Speed";
+               else /* type & SENSOR_TYPE_USAGE */
+                       return "AMD GPU Usage";
+       }
 
        if ((type & SENSOR_TYPE_HDD_TEMP) == SENSOR_TYPE_HDD_TEMP)
                return "HDD Temperature";
 
-       if (type & SENSOR_TYPE_CPU_USAGE)
+       if ((type & SENSOR_TYPE_CPU_USAGE) == SENSOR_TYPE_CPU_USAGE)
                return "CPU Usage";
 
        if (type & SENSOR_TYPE_TEMP)
@@ -460,10 +463,13 @@ const char *psensor_type_to_str(unsigned int type)
        if (type & SENSOR_TYPE_FAN)
                return "Fan";
 
+       if (type & SENSOR_TYPE_CPU)
+               return "CPU";
+
        if (type & SENSOR_TYPE_REMOTE)
                return "Remote";
 
-       return "N/A";           /* should not be possible */
+       return "N/A";
 }
 
 
@@ -491,12 +497,11 @@ void psensor_list_update_measures(struct psensor **sensors)
        cpu_psensor_list_update(sensors);
 #endif
 
-       if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDD_TEMP_HDDTEMP))
+       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_HDD_TEMP_ATASMART))
+       if (psensor_list_contains_type(sensors, SENSOR_TYPE_ATASMART))
                hdd_psensor_list_update(sensors);
 #endif
 }
index d0185a6..f706bde 100644 (file)
 #include "measure.h"
 
 enum psensor_type {
-       SENSOR_TYPE_TEMP = 0x0001,
-       SENSOR_TYPE_FAN = 0x0002,
-       SENSOR_TYPE_REMOTE = 0x0004,
-
-       SENSOR_TYPE_LMSENSOR = 0x0100,
-       SENSOR_TYPE_NVIDIA_TEMP = (0x0200 | SENSOR_TYPE_TEMP),
-       SENSOR_TYPE_HDD_TEMP = (0x0400 | SENSOR_TYPE_TEMP),
-       SENSOR_TYPE_CPU_USAGE = 0x0800,
-       SENSOR_TYPE_AMD = 0x1000,
-
-       SENSOR_TYPE_HDD_TEMP_ATASMART = (0x2000 | SENSOR_TYPE_HDD_TEMP),
-       SENSOR_TYPE_HDD_TEMP_HDDTEMP = (0x4000 | SENSOR_TYPE_HDD_TEMP),
-
-       SENSOR_TYPE_AMD_TEMP = (SENSOR_TYPE_AMD | SENSOR_TYPE_TEMP),
-       SENSOR_TYPE_AMD_FAN = (SENSOR_TYPE_AMD | SENSOR_TYPE_FAN),
-
-       SENSOR_TYPE_LMSENSOR_TEMP = (SENSOR_TYPE_LMSENSOR | SENSOR_TYPE_TEMP),
-       SENSOR_TYPE_LMSENSOR_FAN = (SENSOR_TYPE_LMSENSOR | SENSOR_TYPE_FAN)
+       /* type of sensor values */
+       SENSOR_TYPE_TEMP = 0x00001,
+       SENSOR_TYPE_RPM = 0x00002,
+       SENSOR_TYPE_USAGE = 0x00004,
+
+       /* Whether the sensor is remote */
+       SENSOR_TYPE_REMOTE = 0x00008,
+
+       /* Libraries used for retrieving sensor information */
+       SENSOR_TYPE_LMSENSOR = 0x00100,
+       SENSOR_TYPE_NVCTRL = 0x00200,
+       SENSOR_TYPE_GTOP = 0x00400,
+       SENSOR_TYPE_ATIADL = 0x00800,
+       SENSOR_TYPE_ATASMART = 0x01000,
+       SENSOR_TYPE_HDDTEMP = 0x02000,
+
+       /* Type of HW component */
+       SENSOR_TYPE_HDD = 0x04000,
+       SENSOR_TYPE_CPU = 0x08000,
+       SENSOR_TYPE_GPU = 0x10000,
+       SENSOR_TYPE_FAN = 0x20000,
+
+       /* Combinations */
+       SENSOR_TYPE_HDD_TEMP = (SENSOR_TYPE_HDD | SENSOR_TYPE_TEMP),
+       SENSOR_TYPE_CPU_USAGE = (SENSOR_TYPE_CPU | SENSOR_TYPE_USAGE)
 };
 
 struct psensor {
index eb06bcc..ddd2abe 100644 (file)
@@ -53,10 +53,10 @@ static int test() {
        if (!test_fct(SENSOR_TYPE_TEMP, 0, "\302\260F"))
                failures++;
 
-       if (!test_fct(SENSOR_TYPE_LMSENSOR_TEMP, 1, "\302\260C"))
+       if (!test_fct(SENSOR_TYPE_LMSENSOR | SENSOR_TYPE_TEMP, 1, "\302\260C"))
                failures++;
 
-       if (!test_fct(SENSOR_TYPE_LMSENSOR_TEMP, 0, "\302\260F"))
+       if (!test_fct(SENSOR_TYPE_LMSENSOR | SENSOR_TYPE_TEMP, 0, "\302\260F"))
                failures++;
 
        if (!test_fct(SENSOR_TYPE_FAN, 0, _("RPM")))