36 #include <sensors/sensors.h> 40 std::optional<double> read_subfeature(
const sensors_chip_name* chip_name,
41 const sensors_subfeature* subfeature)
45 sensors_get_value(chip_name, subfeature->number, &value_read);
59 std::optional<TemperatureFeature>
61 const sensors_feature* feature,
62 double default_critical_temp,
63 double defaut_max_temp)
65 if (feature->type == SENSORS_FEATURE_TEMP)
68 chip_name, feature, default_critical_temp, defaut_max_temp) };
77 const sensors_feature* feature,
78 double default_critical_temp,
79 double defaut_max_temp)
81 sensors_subfeature
const* subfeature;
83 label_ = std::string(sensors_get_label(chip_name, feature));
84 while ((subfeature = sensors_get_all_subfeatures(
85 chip_name, feature, &subf_num)) !=
nullptr)
88 if (subfeature->flags & SENSORS_MODE_R)
90 if (subfeature->type == SENSORS_SUBFEATURE_TEMP_INPUT)
94 else if (subfeature->type == SENSORS_SUBFEATURE_TEMP_CRIT)
96 auto crit_read = read_subfeature(chip_name, subfeature);
97 crit_temp_ = crit_read.value_or(default_critical_temp);
99 else if (subfeature->type == SENSORS_SUBFEATURE_TEMP_MAX)
101 auto max_read = read_subfeature(chip_name, subfeature);
102 max_temp_ = max_read.value_or(defaut_max_temp);
114 const sensors_chip_name* chip_name)
const
TemperatureFeature(const sensors_chip_name *chip_name, const sensors_feature *feature, double default_critical_temp, double defaut_max_temp)
std::string get_label() const
const sensors_subfeature * input_temp_subfeature_
temperature_info read_temperature_info(const sensors_chip_name *chip_name) const
static std::optional< TemperatureFeature > make_temp_feature(const sensors_chip_name *chip_name, const sensors_feature *feature, double default_critical_temp=100, double defaut_max_temp=85)