diff options
Diffstat (limited to 'control/zone.cpp')
-rw-r--r-- | control/zone.cpp | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 9670127..56c6cb6 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -73,18 +73,33 @@ Zone::Zone(Mode mode, } } - void Zone::setSpeed(uint64_t speed) { - for (auto& fan : _fans) + if (_isActive) + { + _targetSpeed = speed; + for (auto& fan : _fans) + { + fan->setSpeed(_targetSpeed); + } + } +} + +void Zone::setFullSpeed() +{ + if (_fullSpeed != 0) { - fan->setSpeed(speed); + _targetSpeed = _fullSpeed; + for (auto& fan : _fans) + { + fan->setSpeed(_targetSpeed); + } } } void Zone::setActiveAllow(const Group* group, bool isActiveAllow) { - _active[group] = isActiveAllow; + _active[*(group)] = isActiveAllow; if (!isActiveAllow) { _isActive = false; @@ -116,19 +131,20 @@ void Zone::requestSpeedIncrease(uint64_t targetDelta) if (targetDelta > _incSpeedDelta && _targetSpeed < _ceilingSpeed) { - _targetSpeed = (targetDelta - _incSpeedDelta) + _targetSpeed; + auto requestTarget = _targetSpeed; + requestTarget = (targetDelta - _incSpeedDelta) + requestTarget; _incSpeedDelta = targetDelta; // Target speed can not go above a defined ceiling speed - if (_targetSpeed > _ceilingSpeed) + if (requestTarget > _ceilingSpeed) { - _targetSpeed = _ceilingSpeed; + requestTarget = _ceilingSpeed; } // Cancel current timer countdown if (_incTimer.running()) { _incTimer.stop(); } - setSpeed(_targetSpeed); + setSpeed(requestTarget); // Start timer countdown for fan speed increase _incTimer.start(_incDelay, phosphor::fan::util::Timer::TimerType::oneshot); @@ -157,17 +173,18 @@ void Zone::decTimerExpired() // the increase timer is not running (i.e. not in the middle of increasing) if (_incSpeedDelta == 0 && !_incTimer.running()) { + auto requestTarget = _targetSpeed; // Target speed can not go below the defined floor speed - if ((_targetSpeed < _decSpeedDelta) || - (_targetSpeed - _decSpeedDelta < _floorSpeed)) + if ((requestTarget < _decSpeedDelta) || + (requestTarget - _decSpeedDelta < _floorSpeed)) { - _targetSpeed = _floorSpeed; + requestTarget = _floorSpeed; } else { - _targetSpeed = _targetSpeed - _decSpeedDelta; + requestTarget = requestTarget - _decSpeedDelta; } - setSpeed(_targetSpeed); + setSpeed(requestTarget); } // Clear decrease delta when timer expires _decSpeedDelta = 0; |