watchdog: Implement initialized using the new dbus interface

This makes it possible for the phosphor-host-ipmi or any other watchdog
managing daemon to report to the caller that the watchdog was not configured
if the phosphor-watchdog daemon restarts for any reason.

Change-Id: Iae3a8554c2f5d1cb89368f3ce14b3d44922599c0
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/app/watchdog.cpp b/app/watchdog.cpp
index d537683..f28ff80 100644
--- a/app/watchdog.cpp
+++ b/app/watchdog.cpp
@@ -28,6 +28,13 @@
         WatchdogService wd_service;
         WatchdogService::Properties wd_prop = wd_service.getProperties();
 
+        // Notify the caller if we haven't initialized our timer yet
+        // so it can configure actions and timeouts
+        if (!wd_prop.initialized)
+        {
+            return IPMI_WDOG_CC_NOT_INIT;
+        }
+
         // Reset the countdown to make sure we don't expire our timer
         wd_service.setTimeRemaining(wd_prop.interval);
 
@@ -114,6 +121,9 @@
         wd_service.setInterval(interval);
         wd_service.setTimeRemaining(interval);
 
+        // Mark as initialized so that future resets behave correctly
+        wd_service.setInitialized(true);
+
         return IPMI_CC_OK;
     }
     catch (const std::domain_error &)
diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp
index 7f5d179..36a967c 100644
--- a/app/watchdog_service.cpp
+++ b/app/watchdog_service.cpp
@@ -34,6 +34,7 @@
     std::map<std::string, variant<bool, uint64_t, std::string>> properties;
     response.read(properties);
     Properties wd_prop;
+    wd_prop.initialized = get<bool>(properties.at("Initialized"));
     wd_prop.enabled = get<bool>(properties.at("Enabled"));
     wd_prop.interval = get<uint64_t>(properties.at("Interval"));
     wd_prop.timeRemaining = get<uint64_t>(properties.at("TimeRemaining"));
@@ -53,6 +54,11 @@
     }
 }
 
+void WatchdogService::setInitialized(bool initialized)
+{
+    setProperty("Initialized", initialized);
+}
+
 void WatchdogService::setEnabled(bool enabled)
 {
     setProperty("Enabled", enabled);
diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp
index 4590e31..1d5ffb8 100644
--- a/app/watchdog_service.hpp
+++ b/app/watchdog_service.hpp
@@ -14,6 +14,7 @@
          *         watchdog service.
          */
         struct Properties {
+            bool initialized;
             bool enabled;
             uint64_t interval;
             uint64_t timeRemaining;
@@ -26,6 +27,13 @@
          */
         Properties getProperties();
 
+        /** @brief Sets the value of the initialized property on the host
+		 *         watchdog
+         *
+         *  @param[in] initialized - The new initializedvalue
+         */
+        void setInitialized(bool initialized);
+
         /** @brief Sets the value of the enabled property on the host watchdog
          *
          *  @param[in] enabled - The new enabled value