X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Flmsensor.c;h=ccd2fd5115ed4a91dbffbe9646fd0baf10f32ba0;hb=912b5d1986633786a656bb3361f7ae9c1263acef;hp=86cd2717a4d1d933827cb0eddddb79a17d80e27c;hpb=da185d9dc3803aa84929f082488d81941602c1e9;p=psensor.git diff --git a/src/lib/lmsensor.c b/src/lib/lmsensor.c index 86cd271..ccd2fd5 100644 --- a/src/lib/lmsensor.c +++ b/src/lib/lmsensor.c @@ -33,6 +33,35 @@ static int init_done; static const char *PROVIDER_NAME = "lmsensor"; +struct lmsensor_data { + const sensors_chip_name *chip; + + const sensors_feature *feature; +}; + +static const sensors_chip_name *get_chip_name(struct psensor *s) +{ + return ((struct lmsensor_data *)s->provider_data)->chip; +} + +static const sensors_feature *get_feature(struct psensor *s) +{ + return ((struct lmsensor_data *)s->provider_data)->feature; +} + +static void lmsensor_data_set(struct psensor *s, + const struct sensors_chip_name *chip, + const struct sensors_feature *feature) +{ + struct lmsensor_data *data; + + data = malloc(sizeof(struct lmsensor_data)); + data->chip = chip; + data->feature = feature; + + s->provider_data = data; +} + static double get_value(const sensors_chip_name *name, const sensors_subfeature *sub) { @@ -58,10 +87,10 @@ static double get_temp_input(struct psensor *sensor) const sensors_feature *feature; - chip = sensor->iname; - feature = sensor->feature; + chip = get_chip_name(sensor); + feature = get_feature(sensor); - sf = sensors_get_subfeature(sensor->iname, + sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_TEMP_INPUT); if (sf) @@ -72,11 +101,14 @@ static double get_temp_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; + const sensors_chip_name *chip; + const sensors_feature *feature; const sensors_subfeature *sf; + chip = get_chip_name(sensor); + feature = get_feature(sensor); + sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_FAN_INPUT); @@ -179,8 +211,15 @@ lmsensor_psensor_create(const sensors_chip_name *chip, psensor = psensor_create(id, label, cname, type, values_max_length); - psensor->iname = chip; - psensor->feature = feature; + sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_TEMP_MAX); + if (sf) + psensor->max = get_value(chip, sf); + + sf = sensors_get_subfeature(chip, feature, SENSORS_SUBFEATURE_TEMP_MIN); + if (sf) + psensor->min = get_value(chip, sf); + + lmsensor_data_set(psensor, chip, feature); if (feature->type == SENSORS_FEATURE_TEMP && (get_temp_input(psensor) == UNKNOWN_DBL_VALUE)) { @@ -191,7 +230,7 @@ lmsensor_psensor_create(const sensors_chip_name *chip, return psensor; } -void lmsensor_init(void) +static void lmsensor_init(void) { int err;