Prevent repeatedly reading PLDM sensors when proc garded

If a processor was garded, the OCC sensor would never be enabled.
The prior could would continue to try reading a sensor until it became
enabled.
Code change will stop attempting to read a sensor once a signal or valid
response has been received.

Tested on HW

Change-Id: I9c43840fb25803af4f320ae9de00e896daf190f6
Signed-off-by: Chris Cain <cjcain@us.ibm.com>
diff --git a/occ_manager.cpp b/occ_manager.cpp
index 72d7ada..75d7b1f 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -165,8 +165,7 @@
     allActiveSensorAvailable = true;
     for (auto& obj : statusObjects)
     {
-        // If active sensor is already true, then no need to query sensor
-        if (!obj->occActive())
+        if (!obj->getPldmSensorReceived())
         {
             auto instance = obj->getOccInstanceID();
             // Check if sensor was queued while waiting for discovery
@@ -462,6 +461,7 @@
 
     if (obj != statusObjects.end())
     {
+        (*obj)->setPldmSensorReceived(true);
         return (*obj)->occActive(status);
     }
     else
diff --git a/occ_status.hpp b/occ_status.hpp
index 9ae8fe7..fa9d2d9 100644
--- a/occ_status.hpp
+++ b/occ_status.hpp
@@ -201,6 +201,25 @@
      */
     CmdStatus sendAmbient(const uint8_t ambient = 0xFF,
                           const uint16_t altitude = 0xFFFF);
+
+    /** @brief Set flag indicating if PLDM sensor has been received
+     *
+     *  @param[in] wasReceived - true if PLDM sensor was read
+     */
+    void setPldmSensorReceived(const bool wasReceived)
+    {
+        pldmSensorStateReceived = wasReceived;
+    }
+
+    /** @brief Read flag indicating if PLDM sensor has been read
+     *
+     *  @return true if sensor has been read
+     */
+    bool getPldmSensorReceived()
+    {
+        return pldmSensorStateReceived;
+    }
+
 #endif // POWER10
 
     /** @brief Return the HWMON path for this OCC
@@ -266,6 +285,9 @@
     /** @brief hwmon path for this OCC */
     fs::path hwmonPath;
 
+    /** @brief flag indicating if the OCC sensor has been received */
+    bool pldmSensorStateReceived = false;
+
     /** @brief Callback function on host control signals
      *
      *  @param[in]  msg - Data associated with subscribed signal
diff --git a/pldm.cpp b/pldm.cpp
index 6c2a291..41552ef 100644
--- a/pldm.cpp
+++ b/pldm.cpp
@@ -710,6 +710,16 @@
             fmt::format("pldmRspCallback: OCC{} is RUNNING", instance).c_str());
         pldmIface->callBack(instance, true);
     }
+    else if (occSensorState ==
+             PLDM_STATE_SET_OPERATIONAL_RUNNING_STATUS_DORMANT)
+    {
+        log<level::INFO>(
+            fmt::format(
+                "pldmRspCallback: OCC{} has now STOPPED and system is in SAFE MODE",
+                instance)
+                .c_str());
+        pldmIface->callBack(instance, false);
+    }
     else
     {
         log<level::INFO>(