diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-08-22 11:18:19 -0500 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-08-23 16:33:36 -0500 |
commit | 6ad28430764b7d16ee7abcb9965b76ea5583008f (patch) | |
tree | 8eb3bc7cf78b1d7807a240b5e20c739f97e1db4e /monitor/fan.cpp | |
parent | d953bb25955584410bb29ddac97587b3b633d4bd (diff) | |
download | phosphor-fan-presence-6ad28430764b7d16ee7abcb9965b76ea5583008f.tar.gz phosphor-fan-presence-6ad28430764b7d16ee7abcb9965b76ea5583008f.zip |
Create fan monitor init mode
Allowing fan monitor to run in an init mode will set the fans to a
functional state at each poweron for fans that were non-functional at
poweroff. Then fan monitor can be started in monitor mode after the fans
have ramped up to full speed and can begin being monitored for faults.
This also allows for the removal of fan monitor doing a sd_notify prior
to fan control starting.
Change-Id: I634c9b4ec8bb30860dea54c8abd1cd6c56831d25
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'monitor/fan.cpp')
-rw-r--r-- | monitor/fan.cpp | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/monitor/fan.cpp b/monitor/fan.cpp index 6d88d2a..054c67d 100644 --- a/monitor/fan.cpp +++ b/monitor/fan.cpp @@ -37,7 +37,8 @@ constexpr auto OPERATIONAL_STATUS_INTF = "xyz.openbmc_project.State.Decorator.OperationalStatus"; -Fan::Fan(sdbusplus::bus::bus& bus, +Fan::Fan(Mode mode, + sdbusplus::bus::bus& bus, phosphor::fan::event::EventPtr& events, const FanDefinition& def) : _bus(bus), @@ -45,33 +46,36 @@ Fan::Fan(sdbusplus::bus::bus& bus, _deviation(std::get<fanDeviationField>(def)), _numSensorFailsForNonFunc(std::get<numSensorFailsForNonfuncField>(def)) { - auto& sensors = std::get<sensorListField>(def); + //Start from a known state of functional + updateInventory(true); - for (auto& s : sensors) + // Setup tach sensors for monitoring when in monitor mode + if (mode != Mode::init) { - try + auto& sensors = std::get<sensorListField>(def); + for (auto& s : sensors) { - _sensors.emplace_back( - std::make_unique<TachSensor>( - bus, - *this, - std::get<sensorNameField>(s), - std::get<hasTargetField>(s), - std::get<timeoutField>(def), - events)); + try + { + _sensors.emplace_back( + std::make_unique<TachSensor>( + bus, + *this, + std::get<sensorNameField>(s), + std::get<hasTargetField>(s), + std::get<timeoutField>(def), + events)); + } + catch (InvalidSensorError& e) + { + + } } - catch (InvalidSensorError& e) - { - } + //The TachSensors will now have already read the input + //and target values, so check them. + tachChanged(); } - - //Start from a known state of functional - updateInventory(true); - - //The TachSensors will now have already read the input - //and target values, so check them. - tachChanged(); } |