summaryrefslogtreecommitdiffstats
path: root/monitor/tach_sensor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'monitor/tach_sensor.cpp')
-rw-r--r--monitor/tach_sensor.cpp75
1 files changed, 39 insertions, 36 deletions
diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp
index 2aa1609..22875a2 100644
--- a/monitor/tach_sensor.cpp
+++ b/monitor/tach_sensor.cpp
@@ -64,7 +64,8 @@ static void readProperty(const std::string& interface,
}
-TachSensor::TachSensor(sdbusplus::bus::bus& bus,
+TachSensor::TachSensor(Mode mode,
+ sdbusplus::bus::bus& bus,
Fan& fan,
const std::string& id,
bool hasTarget,
@@ -81,48 +82,50 @@ TachSensor::TachSensor(sdbusplus::bus::bus& bus,
// Start from a known state of functional
setFunctional(true);
- // Load in starting Target and Input values
- try
- {
- // Use getProperty directly to allow a missing sensor object
- // to abort construction.
- _tachInput = util::SDBusPlus::getProperty<decltype(_tachInput)>(
- _bus,
- _name,
- FAN_SENSOR_VALUE_INTF,
- FAN_VALUE_PROPERTY);
- }
- catch (std::exception& e)
+ // Load in current Target and Input values when entering monitor mode
+ if (mode != Mode::init)
{
- throw InvalidSensorError();
- }
+ try
+ {
+ // Use getProperty directly to allow a missing sensor object
+ // to abort construction.
+ _tachInput = util::SDBusPlus::getProperty<decltype(_tachInput)>(
+ _bus,
+ _name,
+ FAN_SENSOR_VALUE_INTF,
+ FAN_VALUE_PROPERTY);
+ }
+ catch (std::exception& e)
+ {
+ throw InvalidSensorError();
+ }
- if (_hasTarget)
- {
- readProperty(FAN_SENSOR_CONTROL_INTF,
- FAN_TARGET_PROPERTY,
- _name,
- _bus,
- _tachTarget);
- }
+ if (_hasTarget)
+ {
+ readProperty(FAN_SENSOR_CONTROL_INTF,
+ FAN_TARGET_PROPERTY,
+ _name,
+ _bus,
+ _tachTarget);
+ }
- auto match = getMatchString(FAN_SENSOR_VALUE_INTF);
+ auto match = getMatchString(FAN_SENSOR_VALUE_INTF);
- tachSignal = std::make_unique<sdbusplus::server::match::match>(
- _bus,
- match.c_str(),
- [this](auto& msg){ this->handleTachChange(msg); });
+ tachSignal = std::make_unique<sdbusplus::server::match::match>(
+ _bus,
+ match.c_str(),
+ [this](auto& msg){ this->handleTachChange(msg); });
- if (_hasTarget)
- {
- match = getMatchString(FAN_SENSOR_CONTROL_INTF);
+ if (_hasTarget)
+ {
+ match = getMatchString(FAN_SENSOR_CONTROL_INTF);
- targetSignal = std::make_unique<sdbusplus::server::match::match>(
- _bus,
- match.c_str(),
- [this](auto& msg){ this->handleTargetChange(msg); });
+ targetSignal = std::make_unique<sdbusplus::server::match::match>(
+ _bus,
+ match.c_str(),
+ [this](auto& msg){ this->handleTargetChange(msg); });
+ }
}
-
}
std::string TachSensor::getMatchString(const std::string& interface)
OpenPOWER on IntegriCloud