diff options
author | Raptor Engineering Development Team <support@raptorengineering.com> | 2018-01-21 19:50:17 -0600 |
---|---|---|
committer | Raptor Engineering Development Team <support@raptorengineering.com> | 2018-04-28 20:52:15 -0500 |
commit | 1f31c03d0a05dc18467f995e7220232a4a51e938 (patch) | |
tree | 04349ed5a84730a031d7691d94cb7043d61ece70 /monitor/fan.cpp | |
parent | 30abbef89b0c39d88c8f7704bcfffceac7963fd2 (diff) | |
download | phosphor-fan-presence-1f31c03d0a05dc18467f995e7220232a4a51e938.tar.gz phosphor-fan-presence-1f31c03d0a05dc18467f995e7220232a4a51e938.zip |
Allow override of deviation with absolute minimum RPM
If the devation is less than zero, treat as an absolute minimum RPM value
Diffstat (limited to 'monitor/fan.cpp')
-rw-r--r-- | monitor/fan.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/monitor/fan.cpp b/monitor/fan.cpp index 39b32bb..e608d76 100644 --- a/monitor/fan.cpp +++ b/monitor/fan.cpp @@ -36,7 +36,8 @@ Fan::Fan(Mode mode, const FanDefinition& def) : _bus(bus), _name(std::get<fanNameField>(def)), - _deviation(std::get<fanDeviationField>(def)), + _deviation((std::get<fanDeviationField>(def) < 0)?abs(std::get<fanDeviationField>(def)):std::get<fanDeviationField>(def)), + _deviationIsMinRPM((std::get<fanDeviationField>(def) < 0)?true:false), _numSensorFailsForNonFunc(std::get<numSensorFailsForNonfuncField>(def)), _trustManager(trust) { @@ -168,17 +169,26 @@ bool Fan::outOfRange(const TachSensor& sensor) auto factor = sensor.getFactor(); auto offset = sensor.getOffset(); - uint64_t min = target * (100 - _deviation) / 100; - uint64_t max = target * (100 + _deviation) / 100; - - // TODO: openbmc/openbmc#2937 enhance this function - // either by making it virtual, or by predefining different - // outOfRange ops and selecting by yaml config - min = min * factor + offset; - max = max * factor + offset; - if ((actual < min) || (actual > max)) + if (_deviationIsMinRPM) { - return true; + if (actual < _deviation) + { + return true; + } + } + else { + uint64_t min = target * (100 - _deviation) / 100; + uint64_t max = target * (100 + _deviation) / 100; + + // TODO: openbmc/openbmc#2937 enhance this function + // either by making it virtual, or by predefining different + // outOfRange ops and selecting by yaml config + min = min * factor + offset; + max = max * factor + offset; + if ((actual < min) || (actual > max)) + { + return true; + } } return false; |