diff options
Diffstat (limited to 'control')
-rw-r--r-- | control/actions.hpp | 3 | ||||
-rw-r--r-- | control/zone.cpp | 33 | ||||
-rw-r--r-- | control/zone.hpp | 13 |
3 files changed, 43 insertions, 6 deletions
diff --git a/control/actions.hpp b/control/actions.hpp index 60b5484..d4dedba 100644 --- a/control/actions.hpp +++ b/control/actions.hpp @@ -250,7 +250,8 @@ auto set_net_increase_speed(T&& state, uint64_t speedDelta) } } ); - // TODO Do a request speed change for target speed update + // Request speed change for target speed update + zone.requestSpeedIncrease(netDelta); }; } diff --git a/control/zone.cpp b/control/zone.cpp index d569aa8..5ed0c3a 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -110,11 +110,6 @@ void Zone::setSpeed(uint64_t speed) { speed = _floorSpeed; } - //TODO openbmc/openbmc#1626 Move to control algorithm function - if (speed > _ceilingSpeed) - { - speed = _ceilingSpeed; - } fan->setSpeed(speed); } } @@ -136,6 +131,34 @@ void Zone::setActiveAllow(const Group* group, bool isActiveAllow) } } +void Zone::requestSpeedIncrease(uint64_t targetDelta) +{ + // Only increase speed when delta is higher than + // the current increase delta for the zone and currently under ceiling + if (targetDelta > _incSpeedDelta && + _targetSpeed < _ceilingSpeed) + { + _targetSpeed = (targetDelta - _incSpeedDelta) + _targetSpeed; + _incSpeedDelta = targetDelta; + //TODO openbmc/openbmc#1625 Cancel current timer countdown + //TODO Floor speed above target, update target to floor speed + if (_targetSpeed < _floorSpeed) + { + _targetSpeed = _floorSpeed; + } + // Target speed can not go above a defined ceiling speed + if (_targetSpeed > _ceilingSpeed) + { + _targetSpeed = _ceilingSpeed; + } + + setSpeed(_targetSpeed); + //TODO openbmc/openbmc#1625 Start timer countdown for fan speed increase + } + //TODO openbmc/openbmc#1625 Clear increase delta when timer expires + _incSpeedDelta = 0; +} + void Zone::getProperty(sdbusplus::bus::bus& bus, const std::string& path, const std::string& iface, diff --git a/control/zone.hpp b/control/zone.hpp index 20b9ac9..cc05959 100644 --- a/control/zone.hpp +++ b/control/zone.hpp @@ -178,6 +178,14 @@ class Zone return _incSpeedDelta; }; + /** + * @brief Calculate the requested target speed from the given delta + * and increase the fan speeds, not going above the ceiling. + * + * @param[in] targetDelta - The delta to increase the target speed by + */ + void requestSpeedIncrease(uint64_t targetDelta); + private: /** @@ -226,6 +234,11 @@ class Zone bool _isActive = true; /** + * Target speed for this zone + */ + uint64_t _targetSpeed = _fullSpeed; + + /** * Speed increase delta */ uint64_t _incSpeedDelta = 0; |