From b028afb4f41b141ee26e113b8b27f0d086dc8e1e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 14 Mar 2013 08:44:56 +0000 Subject: [PATCH] reorganization of the sensor type flags --- src/lib/hdd_atasmart.c | 8 +++++-- src/lib/hdd_hddtemp.c | 8 +++++-- src/lib/lmsensor.c | 25 ++++++++++---------- src/lib/nvidia.c | 7 ++++-- src/lib/psensor.c | 31 ++++++++++++++----------- src/lib/psensor.h | 43 ++++++++++++++++++++--------------- tests/test_psensor_type_to_unit_str.c | 4 ++-- 7 files changed, 74 insertions(+), 52 deletions(-) diff --git a/src/lib/hdd_atasmart.c b/src/lib/hdd_atasmart.c index ae94a17..d1a399e 100644 --- a/src/lib/hdd_atasmart.c +++ b/src/lib/hdd_atasmart.c @@ -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) { diff --git a/src/lib/hdd_hddtemp.c b/src/lib/hdd_hddtemp.c index 3358b9c..5c50a5c 100644 --- a/src/lib/hdd_hddtemp.c +++ b/src/lib/hdd_hddtemp.c @@ -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); diff --git a/src/lib/lmsensor.c b/src/lib/lmsensor.c index 8279679..481d471 100644 --- a/src/lib/lmsensor.c +++ b/src/lib/lmsensor.c @@ -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; diff --git a/src/lib/nvidia.c b/src/lib/nvidia.c index 5b2bdea..2a4076f 100644 --- a/src/lib/nvidia.c +++ b/src/lib/nvidia.c @@ -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++; diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 7b4921e..c028c5e 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -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 } diff --git a/src/lib/psensor.h b/src/lib/psensor.h index d0185a6..f706bde 100644 --- a/src/lib/psensor.h +++ b/src/lib/psensor.h @@ -32,24 +32,31 @@ #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 { diff --git a/tests/test_psensor_type_to_unit_str.c b/tests/test_psensor_type_to_unit_str.c index eb06bcc..ddd2abe 100644 --- a/tests/test_psensor_type_to_unit_str.c +++ b/tests/test_psensor_type_to_unit_str.c @@ -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"))) -- 2.7.4