Define a mode for tach sensor timer

Use a single timer on the tach sensors for delaying both nonfunctional
and functional state changes by declaring what mode the timer is in.
Since a fan is either transitioning from a functional state to a
nonfunctional state or vice-versa, enabling the timer in the mode
requested allows the user to define a delay for both of these transition
states.

Tested: Current nonfunctional timer delay operates the same

Change-Id: I0c165355d41d27e1906918953e5226968062ee16
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/monitor/tach_sensor.hpp b/monitor/tach_sensor.hpp
index ed8caf8..f59f6f5 100644
--- a/monitor/tach_sensor.hpp
+++ b/monitor/tach_sensor.hpp
@@ -29,6 +29,17 @@
 };
 
 /**
+ * The mode that the timer is running in:
+ *   - func - Transition to functional state timer
+ *   - nonfunc - Transition to nonfunctional state timer
+ */
+enum class TimerMode
+{
+    func,
+    nonfunc
+};
+
+/**
  * @class TachSensor
  *
  * This class represents the sensor that reads a tach value.
@@ -151,15 +162,12 @@
         }
 
         /**
-         * @brief Starts the timer for the amount of time
-         *        specified in the constructor
+         * @brief Stops the timer when the given mode differs and starts
+         * the associated timer for the mode given if not already running
+         *
+         * @param[in] mode - mode of timer to start
          */
-        inline void startTimer()
-        {
-            _timer.start(
-                    getTimeout(),
-                    phosphor::fan::util::Timer::TimerType::oneshot);
-        }
+        void startTimer(TimerMode mode);
 
         /**
          * @brief Stops the timer
@@ -170,9 +178,11 @@
         }
 
         /**
-         * @brief Returns the timeout value to use for the sensor
+         * @brief Return the given timer mode's delay time
+         *
+         * @param[in] mode - mode of timer to get delay time for
          */
-        std::chrono::microseconds getTimeout();
+        std::chrono::microseconds getDelay(TimerMode mode);
 
         /**
          * Returns the sensor name
@@ -285,6 +295,11 @@
         const size_t _timeout;
 
         /**
+         * @brief Mode that current timer is in
+         */
+        TimerMode _timerMode;
+
+        /**
          * The timer object
          */
         phosphor::fan::util::Timer _timer;