summaryrefslogtreecommitdiffstats
path: root/monitor/fan.cpp
diff options
context:
space:
mode:
authorRaptor Engineering Development Team <support@raptorengineering.com>2018-01-21 19:50:17 -0600
committerRaptor Engineering Development Team <support@raptorengineering.com>2018-04-28 20:52:15 -0500
commit1f31c03d0a05dc18467f995e7220232a4a51e938 (patch)
tree04349ed5a84730a031d7691d94cb7043d61ece70 /monitor/fan.cpp
parent30abbef89b0c39d88c8f7704bcfffceac7963fd2 (diff)
downloadphosphor-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.cpp32
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;
OpenPOWER on IntegriCloud