#include <sensors/sensors.h>
#include <sensors/error.h>
-#include <psensor.h>
+#include <lmsensor.h>
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)
{
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)
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);
int type;
char *id, *label, *cname;
struct psensor *psensor;
- sensors_subfeature_type fault_subfeature;
+ sensors_subfeature_type fault_subfeature, min_subfeature,
+ max_subfeature;
if (sensors_snprintf_chip_name(name, 200, chip) < 0)
return NULL;
if (feature->type == SENSORS_FEATURE_TEMP) {
fault_subfeature = SENSORS_SUBFEATURE_TEMP_FAULT;
+ max_subfeature = SENSORS_SUBFEATURE_TEMP_MAX;
+ min_subfeature = SENSORS_SUBFEATURE_TEMP_MIN;
} else if (feature->type == SENSORS_FEATURE_FAN) {
fault_subfeature = SENSORS_SUBFEATURE_FAN_FAULT;
+ max_subfeature = SENSORS_SUBFEATURE_FAN_MAX;
+ min_subfeature = SENSORS_SUBFEATURE_FAN_MIN;
} else {
log_err(_("%s: Wrong feature type."), PROVIDER_NAME);
return NULL;
psensor = psensor_create(id, label, cname, type, values_max_length);
- psensor->iname = chip;
- psensor->feature = feature;
+ sf = sensors_get_subfeature(chip, feature, max_subfeature);
+ if (sf)
+ psensor->max = get_value(chip, sf);
+
+ sf = sensors_get_subfeature(chip, feature, min_subfeature);
+ 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)) {
return psensor;
}
-void lmsensor_init(void)
+static void lmsensor_init(void)
{
int err;