Handle other PLDM_STATE_SET_OPERATIONAL states

- Code will no longer assume the OCC is not running if an unexpected
state is received. It will continue to look for a good/known state.
- Added code that will throttle the occ-control pldm journal traces
if unable to read the OCC active sensor states. In some error
conditions, this tracing would flood the trace and the repeated traces
are not helpful for debug.
- Change some journal entries to ERR when the state indicated that the
system was in safe mode (OCCs disabled)
- If request for occ active sensor state was sent, and then a PLDM
sensor event comes in for that instance, the event status is used and
the response is ignored.
- Added README for occ-control

Signed-off-by: Chris Cain <cjcain@us.ibm.com>
Change-Id: Ic26f1d0c4dc59e7a61b965b052d649e4bc152fde
diff --git a/occ_manager.hpp b/occ_manager.hpp
index efd62c0..90f148d 100644
--- a/occ_manager.hpp
+++ b/occ_manager.hpp
@@ -109,7 +109,14 @@
             std::make_unique<
                 sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>(
                 sdpEvent, std::bind(&Manager::occsNotAllRunning, this)))
+#ifdef PLDM
+        ,
+        throttleTraceTimer(
+            std::make_unique<
+                sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>(
+                sdpEvent, std::bind(&Manager::throttleTraceExpired, this)))
 #endif
+#endif // POWER10
     {
 #ifdef I2C_OCC
         // I2C OCC status objects are initialized directly
@@ -335,6 +342,22 @@
         sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>
         waitForAllOccsTimer;
 
+#ifdef PLDM
+    /**
+     * @brief Timer used to throttle PLDM traces when there are problems
+              determining the OCC status via pldm. Used to prevent excessive
+              journal traces.
+     */
+    std::unique_ptr<
+        sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>
+        throttleTraceTimer;
+
+    /** @brief Check if all of the OCC Active sensors are available and if not
+     * restart the discoverTimer
+     */
+    void throttleTraceExpired();
+#endif
+
     /** @brief Called when code times out waiting for all OCCs to be running or
      *         after the app is restarted (Status does not callback into
      * Manager).
@@ -345,7 +368,7 @@
      * restart the discoverTimer
      */
     void checkAllActiveSensors();
-#endif
+#endif // POWER10
 
     /**
      * @brief Called when poll timer expires and forces a POLL command to the