#pragma once #include "utils.hpp" #include #include /** @class WatchdogService * @brief Access to the running OpenBMC watchdog implementation. * @details Easy accessor for servers that implement the * xyz.openbmc_project.State.Watchdog DBus API. */ class WatchdogService { public: WatchdogService(); using Action = sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action; using TimerUse = sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse; /** @brief Resets the time remaining on the watchdog. * Equivalent to setTimeRemaining(getInterval()). * Optionally enables the watchdog. * * @param[in] enableWatchdog - Should the call also enable the watchdog */ void resetTimeRemaining(bool enableWatchdog); /** @brief Contains a copy of the properties enumerated by the * watchdog service. */ struct Properties { bool initialized; bool enabled; Action expireAction; TimerUse timerUse; uint64_t interval; uint64_t timeRemaining; }; /** @brief Retrieves a copy of the currently set properties on the * host watchdog * * @return A populated WatchdogProperties struct */ Properties getProperties(); /** @brief Get the value of the initialized property on the host * watchdog * * @return The value of the property */ bool getInitialized(); /** @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 */ void setEnabled(bool enabled); /** @brief Sets the value of the expireAction property on the host watchdog * * @param[in] expireAction - The new expireAction value */ void setExpireAction(Action expireAction); /** @brief Sets the value of the timerUse property on the host watchdog * * @param[in] timerUse - The new timerUse value */ void setTimerUse(TimerUse timerUse); /** @brief Sets the value of the interval property on the host watchdog * * @param[in] interval - The new interval value */ void setInterval(uint64_t interval); /** @brief Sets the value of the timeRemaining property on the host * watchdog * * @param[in] timeRemaining - The new timeRemaining value */ void setTimeRemaining(uint64_t timeRemaining); private: /** @brief sdbusplus handle */ sdbusplus::bus::bus bus; /** @brief The name of the mapped host watchdog service */ static ipmi::ServiceCache wd_service; /** @brief Gets the value of the property on the host watchdog * * @param[in] key - The name of the property * @return The value of the property */ template T getProperty(const std::string& key); /** @brief Sets the value of the property on the host watchdog * * @param[in] key - The name of the property * @param[in] val - The new value */ template void setProperty(const std::string& key, const T& val); };