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-01-21 19:50:17 -0600 |
commit | c437adbfea21c06f1012cef30910edfda59f3d05 (patch) | |
tree | e4203dfcf2c5e8e86e162d4fe9666b1989a5740d | |
parent | e4338cdb856db2b71f8adf42c50603d816980f8a (diff) | |
download | phosphor-fan-presence-c437adbfea21c06f1012cef30910edfda59f3d05.tar.gz phosphor-fan-presence-c437adbfea21c06f1012cef30910edfda59f3d05.zip |
Allow override of deviation with absolute minimum RPM
If the devation is less than zero, treat as an absolute minimum RPM value
-rw-r--r-- | monitor/fan.cpp | 22 | ||||
-rw-r--r-- | monitor/fan.hpp | 5 | ||||
-rwxr-xr-x | monitor/gen-fan-monitor-defs.py | 2 | ||||
-rw-r--r-- | monitor/types.hpp | 2 |
4 files changed, 23 insertions, 8 deletions
diff --git a/monitor/fan.cpp b/monitor/fan.cpp index a6af74a..f55ddb3 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) { @@ -179,12 +180,21 @@ bool Fan::outOfRange(const TachSensor& sensor) auto actual = static_cast<uint64_t>(sensor.getInput()); auto target = getTargetSpeed(sensor); - uint64_t min = target * (100 - _deviation) / 100; - uint64_t max = target * (100 + _deviation) / 100; - - 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; + + if ((actual < min) || (actual > max)) + { + return true; + } } return false; diff --git a/monitor/fan.hpp b/monitor/fan.hpp index f22bd9f..cb50c5d 100644 --- a/monitor/fan.hpp +++ b/monitor/fan.hpp @@ -187,6 +187,11 @@ class Fan const size_t _deviation; /** + * @brief True if deviation indicates minimum absolute RPM + */ + bool _deviationIsMinRPM; + + /** * The number of sensors that must be nonfunctional at the * same time in order for the fan to be set to nonfunctional * in the inventory. diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py index 1590484..66dbb52 100755 --- a/monitor/gen-fan-monitor-defs.py +++ b/monitor/gen-fan-monitor-defs.py @@ -90,7 +90,7 @@ if __name__ == '__main__': #Do some minor input validation for fan in monitor_data.get('fans', {}): - if ((fan['deviation'] < 0) or (fan['deviation'] > 100)): + if (fan['deviation'] > 100): sys.exit("Invalid deviation value " + str(fan['deviation'])) output_file = os.path.join(args.output_dir, "fan_monitor_defs.cpp") diff --git a/monitor/types.hpp b/monitor/types.hpp index 795db00..ba6bf13 100644 --- a/monitor/types.hpp +++ b/monitor/types.hpp @@ -29,7 +29,7 @@ constexpr auto sensorListField = 4; using FanDefinition = std::tuple<std::string, size_t, - size_t, + ssize_t, size_t, std::vector<SensorDefinition>>; |