| #pragma once |
| #include <ipmid/utils.hpp> |
| #include <sdbusplus/bus.hpp> |
| #include <xyz/openbmc_project/State/Watchdog/server.hpp> |
| |
| /** @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 <typename T> |
| 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 <typename T> |
| void setProperty(const std::string& key, const T& val); |
| }; |