1 #pragma once 2 #include <ipmid/utils.hpp> 3 #include <sdbusplus/bus.hpp> 4 #include <xyz/openbmc_project/State/Watchdog/server.hpp> 5 6 /** @class WatchdogService 7 * @brief Access to the running OpenBMC watchdog implementation. 8 * @details Easy accessor for servers that implement the 9 * xyz.openbmc_project.State.Watchdog DBus API. 10 */ 11 class WatchdogService 12 { 13 public: 14 WatchdogService(); 15 16 using Action = 17 sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action; 18 using TimerUse = 19 sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse; 20 21 /** @brief Resets the time remaining on the watchdog. 22 * Equivalent to setTimeRemaining(getInterval()). 23 * Optionally enables the watchdog. 24 * 25 * @param[in] enableWatchdog - Should the call also enable the watchdog 26 */ 27 void resetTimeRemaining(bool enableWatchdog); 28 29 /** @brief Contains a copy of the properties enumerated by the 30 * watchdog service. 31 */ 32 struct Properties 33 { 34 bool initialized; 35 bool enabled; 36 Action expireAction; 37 TimerUse timerUse; 38 uint64_t interval; 39 uint64_t timeRemaining; 40 }; 41 42 /** @brief Retrieves a copy of the currently set properties on the 43 * host watchdog 44 * 45 * @return A populated WatchdogProperties struct 46 */ 47 Properties getProperties(); 48 49 /** @brief Get the value of the initialized property on the host 50 * watchdog 51 * 52 * @return The value of the property 53 */ 54 bool getInitialized(); 55 56 /** @brief Sets the value of the initialized property on the host 57 * watchdog 58 * 59 * @param[in] initialized - The new initializedvalue 60 */ 61 void setInitialized(bool initialized); 62 63 /** @brief Sets the value of the enabled property on the host watchdog 64 * 65 * @param[in] enabled - The new enabled value 66 */ 67 void setEnabled(bool enabled); 68 69 /** @brief Sets the value of the expireAction property on the host watchdog 70 * 71 * @param[in] expireAction - The new expireAction value 72 */ 73 void setExpireAction(Action expireAction); 74 75 /** @brief Sets the value of the timerUse property on the host watchdog 76 * 77 * @param[in] timerUse - The new timerUse value 78 */ 79 void setTimerUse(TimerUse timerUse); 80 81 /** @brief Sets the value of the interval property on the host watchdog 82 * 83 * @param[in] interval - The new interval value 84 */ 85 void setInterval(uint64_t interval); 86 87 /** @brief Sets the value of the timeRemaining property on the host 88 * watchdog 89 * 90 * @param[in] timeRemaining - The new timeRemaining value 91 */ 92 void setTimeRemaining(uint64_t timeRemaining); 93 94 private: 95 /** @brief sdbusplus handle */ 96 sdbusplus::bus::bus bus; 97 /** @brief The name of the mapped host watchdog service */ 98 static ipmi::ServiceCache wd_service; 99 100 /** @brief Gets the value of the property on the host watchdog 101 * 102 * @param[in] key - The name of the property 103 * @return The value of the property 104 */ 105 template <typename T> 106 T getProperty(const std::string& key); 107 108 /** @brief Sets the value of the property on the host watchdog 109 * 110 * @param[in] key - The name of the property 111 * @param[in] val - The new value 112 */ 113 template <typename T> 114 void setProperty(const std::string& key, const T& val); 115 }; 116