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::server::xyz::openbmc_project::state::Watchdog::Action; 18 using TimerUse = 19 sdbusplus::server::xyz::openbmc_project::state::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 TimerUse expiredTimerUse; 39 uint64_t interval; 40 uint64_t timeRemaining; 41 }; 42 43 /** @brief Retrieves a copy of the currently set properties on the 44 * host watchdog 45 * 46 * @return A populated WatchdogProperties struct 47 */ 48 Properties getProperties(); 49 50 /** @brief Get the value of the initialized property on the host 51 * watchdog 52 * 53 * @return The value of the property 54 */ 55 bool getInitialized(); 56 57 /** @brief Sets the value of the initialized property on the host 58 * watchdog 59 * 60 * @param[in] initialized - The new initializedvalue 61 */ 62 void setInitialized(bool initialized); 63 64 /** @brief Sets the value of the enabled property on the host watchdog 65 * 66 * @param[in] enabled - The new enabled value 67 */ 68 void setEnabled(bool enabled); 69 70 /** @brief Sets the value of the LogTimeout property on the host watchdog 71 * 72 * @param[in] LogTimeout - The new LogTimeout value 73 */ 74 void setLogTimeout(bool LogTimeout); 75 76 /** @brief Sets the value of the expireAction property on the host watchdog 77 * 78 * @param[in] expireAction - The new expireAction value 79 */ 80 void setExpireAction(Action expireAction); 81 82 /** @brief Sets the value of the timerUse property on the host watchdog 83 * 84 * @param[in] timerUse - The new timerUse value 85 */ 86 void setTimerUse(TimerUse timerUse); 87 88 /** @brief Sets the value of the ExpiredTimerUse property on the host 89 * watchdog 90 * 91 * @param[in] timerUse - The new timerUse value 92 */ 93 void setExpiredTimerUse(TimerUse timerUse); 94 95 /** @brief Sets the value of the interval property on the host watchdog 96 * 97 * @param[in] interval - The new interval value 98 */ 99 void setInterval(uint64_t interval); 100 101 private: 102 /** @brief sdbusplus handle */ 103 sdbusplus::bus_t bus; 104 /** @brief The name of the mapped host watchdog service */ 105 static ipmi::ServiceCache wd_service; 106 107 /** @brief Gets the value of the property on the host watchdog 108 * 109 * @param[in] key - The name of the property 110 * @return The value of the property 111 */ 112 template <typename T> 113 T getProperty(const std::string& key); 114 115 /** @brief Sets the value of the property on the host watchdog 116 * 117 * @param[in] key - The name of the property 118 * @param[in] val - The new value 119 */ 120 template <typename T> 121 void setProperty(const std::string& key, const T& val); 122 }; 123