X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fpsensor.c;h=bf7765bcfa31757b891cde5fa01d04326e476173;hb=dcf1b53921f5f9fdab59295be938c766bb572793;hp=7853ddf16a6e08883fa4d18620e69340f4b49a58;hpb=6a0b1ef287625b2c4b9418b5e30bed2a83fd71af;p=psensor.git diff --git a/src/lib/psensor.c b/src/lib/psensor.c index 7853ddf..bf7765b 100644 --- a/src/lib/psensor.c +++ b/src/lib/psensor.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2012 jeanfi@gmail.com + * Copyright (C) 2010-2013 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -31,15 +31,18 @@ #include "cpu.h" #endif - -struct psensor *psensor_create(char *id, char *name, - unsigned int type, int values_max_length) +struct psensor *psensor_create(char *id, + char *name, + char *chip, + unsigned int type, + int values_max_length) { struct psensor *psensor = (struct psensor *)malloc(sizeof(struct psensor)); psensor->id = id; psensor->name = name; + psensor->chip = chip; psensor->enabled = 1; psensor->min = UNKNOWN_DBL_VALUE; psensor->max = UNKNOWN_DBL_VALUE; @@ -61,6 +64,8 @@ struct psensor *psensor_create(char *id, char *name, psensor->color = NULL; + psensor->appindicator_enabled = 0; + return psensor; } @@ -94,6 +99,9 @@ void psensor_free(struct psensor *sensor) free(sensor->name); free(sensor->id); + if (sensor->chip) + free(sensor->chip); + if (sensor->color) free(sensor->color); @@ -151,7 +159,7 @@ int psensor_list_contains_type(struct psensor **sensors, unsigned int type) s = sensors; while (*s) { - if ((*s)->type == type) + if ((*s)->type & type) return 1; s++; } @@ -224,6 +232,9 @@ psensor_value_to_str(unsigned int type, double value, int use_celcius) unit = psensor_type_to_unit_str(type, use_celcius); + if (is_temp_type(type) && !use_celcius) + value = celcius_to_fahrenheit(value); + sprintf(str, "%.0f%s", value, unit); return str; @@ -276,7 +287,7 @@ psensor_set_current_measure(struct psensor *s, } } -double psensor_get_current_value(struct psensor *sensor) +double psensor_get_current_value(const struct psensor *sensor) { return sensor->measures[sensor->values_max_length - 1].value; } @@ -393,7 +404,7 @@ double get_max_temp(struct psensor **sensors) struct psensor **get_all_sensors(int use_libatasmart, int values_max_length) { - struct psensor **psensors = NULL; + struct psensor **psensors; struct psensor **tmp_psensors; psensors = lmsensor_psensor_list_add(NULL, values_max_length); @@ -427,19 +438,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_NVCTRL) + return "NVidia GPU"; - if ((type & SENSOR_TYPE_AMD_FAN) == SENSOR_TYPE_AMD_FAN) - return "AMD GPU Fan Speed"; + 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) @@ -448,10 +462,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"; } @@ -479,12 +496,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 } @@ -510,3 +526,25 @@ void psensor_cleanup() { lmsensor_cleanup(); } + +struct psensor **psensor_list_copy(struct psensor **sensors) +{ + struct psensor **result; + int n, i; + + n = psensor_list_size(sensors); + result = malloc((n+1) * sizeof(struct psensor *)); + for (i = 0; i < n; i++) + result[i] = sensors[i]; + result[n] = NULL; + + return result; +} + +char * +psensor_current_value_to_str(const struct psensor *s, unsigned int celcius) +{ + return psensor_value_to_str(s->type, + psensor_get_current_value(s), + celcius); +}