Add option to only log nmiButtonPress when host is running

While NMI button presses are of little interest when the host is off,
some systems (e.g. romed8hm3) generates spurious events on shutdown,
probably due to some lack of electronic stability.
This patch adds an option to disable handling these events when host is off.

Change-Id: Idc74b2dcb7131ddf6d99d1b8c49d947be98de78e
Signed-off-by: Olivier FAURAX <olivier.faurax@eu.equinix.com>
diff --git a/config/power-config-host0.json b/config/power-config-host0.json
index 83e1059..f575b15 100644
--- a/config/power-config-host0.json
+++ b/config/power-config-host0.json
@@ -83,5 +83,8 @@
         "GracefulPowerOffS": 300,
         "WarmResetCheckMs": 500,
         "PowerOffSaveMs": 7000
+    },
+    "event_configs": {
+        "NMIWhenPoweredOff": true
     }
 }
diff --git a/src/power_control.cpp b/src/power_control.cpp
index 0dafd60..07fc14f 100644
--- a/src/power_control.cpp
+++ b/src/power_control.cpp
@@ -145,6 +145,7 @@
     {"SlotPowerCycleMs", 200}};
 
 static bool nmiEnabled = true;
+static bool nmiWhenPoweredOff = true;
 static bool sioEnabled = true;
 
 // Timers
@@ -2191,6 +2192,13 @@
 
 static void nmiButtonHandler(bool state)
 {
+    // Don't handle event if host not running and config doesn't force it
+    if (!nmiWhenPoweredOff &&
+        getHostState(powerState) !=
+            "xyz.openbmc_project.State.Host.HostState.Running")
+    {
+        return;
+    }
     nmiButtonIface->set_property("ButtonPressed", !state);
     if (!state)
     {
@@ -2415,6 +2423,14 @@
         }
     }
 
+    // If "events_configs" key is not in json config, fallback to {}
+    auto events = jsonData.value(
+        "event_configs", nlohmann::json(nlohmann::json::value_t::object));
+    if (events)
+    {
+        nmiWhenPoweredOff = events.value("NMIWhenPoweredOff", true);
+    }
+
     return 0;
 }