X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Flmsensor.c;h=df788f6964bdfca84422f7905c6c581310c7b99d;hb=845932214067b9137c7e2cf85be692673857ad4d;hp=5149e808e139c8eef74b98cd63c34d0340140ba5;hpb=609664bb77874990e10f8073e54bb7f1645c8d72;p=psensor.git diff --git a/src/lib/lmsensor.c b/src/lib/lmsensor.c index 5149e80..df788f6 100644 --- a/src/lib/lmsensor.c +++ b/src/lib/lmsensor.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2010-2011 wpitchoune@gmail.com + Copyright (C) 2010-2011 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 published by @@ -30,9 +30,10 @@ #include "psensor.h" -double -lmsensor_get_value(const sensors_chip_name *name, - const sensors_subfeature *sub) +static int init_done; + +static double get_value(const sensors_chip_name *name, + const sensors_subfeature *sub) { double val; int err; @@ -42,12 +43,12 @@ lmsensor_get_value(const sensors_chip_name *name, fprintf(stderr, _("ERROR: Can't get value of subfeature %s: %s\n"), sub->name, sensors_strerror(err)); - val = UNKNOWN_VALUE; + val = UNKNOWN_DBL_VALUE; } return val; } -double lmsensor_get_temp_input(struct psensor *sensor) +static double get_temp_input(struct psensor *sensor) { const sensors_chip_name *chip = sensor->iname; const sensors_feature *feature = sensor->feature; @@ -57,12 +58,12 @@ double lmsensor_get_temp_input(struct psensor *sensor) sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_TEMP_INPUT); if (sf) - return lmsensor_get_value(chip, sf); + return get_value(chip, sf); else - return UNKNOWN_VALUE; + return UNKNOWN_DBL_VALUE; } -double lmsensor_get_fan_input(struct psensor *sensor) +static double get_fan_input(struct psensor *sensor) { const sensors_chip_name *chip = sensor->iname; const sensors_feature *feature = sensor->feature; @@ -72,24 +73,27 @@ double lmsensor_get_fan_input(struct psensor *sensor) sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_FAN_INPUT); if (sf) - return lmsensor_get_value(chip, sf); + return get_value(chip, sf); else - return UNKNOWN_VALUE; + return UNKNOWN_DBL_VALUE; } void lmsensor_psensor_list_update(struct psensor **sensors) { struct psensor **s_ptr = sensors; + if (!init_done) + return ; + while (*s_ptr) { struct psensor *sensor = *s_ptr; if (sensor->type == SENSOR_TYPE_LMSENSOR_TEMP) psensor_set_current_value - (sensor, lmsensor_get_temp_input(sensor)); + (sensor, get_temp_input(sensor)); else if (sensor->type == SENSOR_TYPE_LMSENSOR_FAN) - psensor_set_current_value - (sensor, lmsensor_get_fan_input(sensor)); + psensor_set_current_value(sensor, + get_fan_input(sensor)); s_ptr++; } @@ -124,7 +128,7 @@ lmsensor_psensor_create(const sensors_chip_name *chip, } sf = sensors_get_subfeature(chip, feature, fault_subfeature); - if (sf && lmsensor_get_value(chip, sf)) + if (sf && get_value(chip, sf)) return NULL; label = sensors_get_label(chip, feature); @@ -149,7 +153,7 @@ lmsensor_psensor_create(const sensors_chip_name *chip, psensor->feature = feature; if (feature->type == SENSORS_FEATURE_TEMP - && (lmsensor_get_temp_input(psensor) == UNKNOWN_VALUE)) { + && (get_temp_input(psensor) == UNKNOWN_DBL_VALUE)) { free(psensor); return NULL; } @@ -157,7 +161,46 @@ lmsensor_psensor_create(const sensors_chip_name *chip, return psensor; } -int lmsensor_init() +struct psensor **lmsensor_psensor_list_add(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 ; + + result = sensors; + while ((chip = sensors_get_detected_chips(NULL, &chip_nr))) { + + i = 0; + while ((feature = sensors_get_features(chip, &i))) { + + if (feature->type == SENSORS_FEATURE_TEMP + || feature->type == SENSORS_FEATURE_FAN) { + + s = lmsensor_psensor_create(chip, feature, vn); + + if (s) { + tmp = psensor_list_add(result, s); + + if (tmp != sensors) + free(result); + + result = tmp; + } + } + } + } + + return result; +} + +void lmsensor_init() { int err = sensors_init(NULL); @@ -165,8 +208,14 @@ int lmsensor_init() fprintf(stderr, _("ERROR: lm-sensors initialization failure: %s\n"), sensors_strerror(err)); - return 0; + init_done = 0; } else { - return 1; + init_done = 1; } } + +void lmsensor_cleanup() +{ + if (init_done) + sensors_cleanup(); +}