Use speed request base in inc/dec speed changes

For increase and decrease speed changes, the new target speed is
calculated from either a set speed request base value or the current
target speed by default.

Change-Id: Iad1411437a9945af0b9ae85649d487e36586ef2a
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 3eab42f..88cdc86 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -132,7 +132,7 @@
     if (targetDelta > _incSpeedDelta &&
         _targetSpeed < _ceilingSpeed)
     {
-        auto requestTarget = _targetSpeed;
+        auto requestTarget = getRequestSpeedBase();
         requestTarget = (targetDelta - _incSpeedDelta) + requestTarget;
         _incSpeedDelta = targetDelta;
         // Target speed can not go above a defined ceiling speed
@@ -174,7 +174,7 @@
     // the increase timer is not running (i.e. not in the middle of increasing)
     if (_incSpeedDelta == 0 && !_incTimer.running())
     {
-        auto requestTarget = _targetSpeed;
+        auto requestTarget = getRequestSpeedBase();
         // Target speed can not go below the defined floor speed
         if ((requestTarget < _decSpeedDelta) ||
             (requestTarget - _decSpeedDelta < _floorSpeed))
diff --git a/control/zone.hpp b/control/zone.hpp
index 1696bda..c7995b6 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -382,6 +382,17 @@
         std::vector<std::unique_ptr<phosphor::fan::util::Timer>> _timerEvents;
 
         /**
+         * @brief Get the request speed base if defined, otherwise the
+         * the current target speed is returned
+         *
+         * @return - The request speed base or current target speed
+         */
+        inline auto getRequestSpeedBase() const
+        {
+            return (_requestSpeedBase != 0) ? _requestSpeedBase : _targetSpeed;
+        };
+
+        /**
          * @brief Refresh the given property's cached value
          *
          * @param[in] bus - the bus to use