diff options
Diffstat (limited to 'control/zone.cpp')
-rw-r--r-- | control/zone.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 5ed0c3a..1ca0b81 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -97,6 +97,7 @@ Zone::Zone(Mode mode, std::get<actionPos>(event)(*this, std::get<groupPos>(event)); } + //TODO openbmc/openbmc#1625 Start timer for fan speed decreases } } @@ -105,11 +106,6 @@ void Zone::setSpeed(uint64_t speed) { for (auto& fan : _fans) { - //TODO openbmc/openbmc#1626 Move to control algorithm function - if (speed < _floorSpeed) - { - speed = _floorSpeed; - } fan->setSpeed(speed); } } @@ -159,6 +155,35 @@ void Zone::requestSpeedIncrease(uint64_t targetDelta) _incSpeedDelta = 0; } +void Zone::requestSpeedDecrease(uint64_t targetDelta) +{ + // Only decrease the lowest target delta requested + if (_decSpeedDelta == 0 || targetDelta < _decSpeedDelta) + { + _decSpeedDelta = targetDelta; + } + + //TODO openbmc/openbmc#1625 Set decrease target speed when timer expires + // Only decrease speeds when no requested increases exist + if (_incSpeedDelta == 0) + { + // Target speed can not go below the defined floor speed + if ((_targetSpeed < _decSpeedDelta) || + (_targetSpeed - _decSpeedDelta < _floorSpeed)) + { + _targetSpeed = _floorSpeed; + } + else + { + _targetSpeed = _targetSpeed - _decSpeedDelta; + } + setSpeed(_targetSpeed); + } + // Clear decrease delta when timer expires + _decSpeedDelta = 0; + //TODO openbmc/openbmc#1625 Restart decrease timer +} + void Zone::getProperty(sdbusplus::bus::bus& bus, const std::string& path, const std::string& iface, |