15257525dSWilliam A. Kennington III #pragma once 26a98fe7fSVernon Mauery #include <ipmid/utils.hpp> 35257525dSWilliam A. Kennington III #include <sdbusplus/bus.hpp> 4b638de22SWilliam A. Kennington III #include <xyz/openbmc_project/State/Watchdog/server.hpp> 55257525dSWilliam A. Kennington III 65257525dSWilliam A. Kennington III /** @class WatchdogService 75257525dSWilliam A. Kennington III * @brief Access to the running OpenBMC watchdog implementation. 85257525dSWilliam A. Kennington III * @details Easy accessor for servers that implement the 95257525dSWilliam A. Kennington III * xyz.openbmc_project.State.Watchdog DBus API. 105257525dSWilliam A. Kennington III */ 110b02be92SPatrick Venture class WatchdogService 120b02be92SPatrick Venture { 135257525dSWilliam A. Kennington III public: 145257525dSWilliam A. Kennington III WatchdogService(); 155257525dSWilliam A. Kennington III 160b02be92SPatrick Venture using Action = 17523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::state::Watchdog::Action; 18118907edSYong Li using TimerUse = 19523e2d1bSWilly Tu sdbusplus::server::xyz::openbmc_project::state::Watchdog::TimerUse; 20b638de22SWilliam A. Kennington III 214b017a9bSWilliam A. Kennington III /** @brief Resets the time remaining on the watchdog. 224b017a9bSWilliam A. Kennington III * Equivalent to setTimeRemaining(getInterval()). 234b017a9bSWilliam A. Kennington III * Optionally enables the watchdog. 244b017a9bSWilliam A. Kennington III * 254b017a9bSWilliam A. Kennington III * @param[in] enableWatchdog - Should the call also enable the watchdog 264b017a9bSWilliam A. Kennington III */ 274b017a9bSWilliam A. Kennington III void resetTimeRemaining(bool enableWatchdog); 284b017a9bSWilliam A. Kennington III 295257525dSWilliam A. Kennington III /** @brief Contains a copy of the properties enumerated by the 305257525dSWilliam A. Kennington III * watchdog service. 315257525dSWilliam A. Kennington III */ 320b02be92SPatrick Venture struct Properties 330b02be92SPatrick Venture { 34de14a027SWilliam A. Kennington III bool initialized; 355257525dSWilliam A. Kennington III bool enabled; 36b638de22SWilliam A. Kennington III Action expireAction; 37118907edSYong Li TimerUse timerUse; 38cfae948bSDeepak Kumar Sahu TimerUse expiredTimerUse; 395257525dSWilliam A. Kennington III uint64_t interval; 405257525dSWilliam A. Kennington III uint64_t timeRemaining; 415257525dSWilliam A. Kennington III }; 425257525dSWilliam A. Kennington III 435257525dSWilliam A. Kennington III /** @brief Retrieves a copy of the currently set properties on the 445257525dSWilliam A. Kennington III * host watchdog 455257525dSWilliam A. Kennington III * 465257525dSWilliam A. Kennington III * @return A populated WatchdogProperties struct 475257525dSWilliam A. Kennington III */ 485257525dSWilliam A. Kennington III Properties getProperties(); 495257525dSWilliam A. Kennington III 502ecf5120SWilliam A. Kennington III /** @brief Get the value of the initialized property on the host 512ecf5120SWilliam A. Kennington III * watchdog 522ecf5120SWilliam A. Kennington III * 532ecf5120SWilliam A. Kennington III * @return The value of the property 542ecf5120SWilliam A. Kennington III */ 552ecf5120SWilliam A. Kennington III bool getInitialized(); 562ecf5120SWilliam A. Kennington III 57de14a027SWilliam A. Kennington III /** @brief Sets the value of the initialized property on the host 58de14a027SWilliam A. Kennington III * watchdog 59de14a027SWilliam A. Kennington III * 60de14a027SWilliam A. Kennington III * @param[in] initialized - The new initializedvalue 61de14a027SWilliam A. Kennington III */ 62de14a027SWilliam A. Kennington III void setInitialized(bool initialized); 63de14a027SWilliam A. Kennington III 645257525dSWilliam A. Kennington III /** @brief Sets the value of the enabled property on the host watchdog 655257525dSWilliam A. Kennington III * 665257525dSWilliam A. Kennington III * @param[in] enabled - The new enabled value 675257525dSWilliam A. Kennington III */ 685257525dSWilliam A. Kennington III void setEnabled(bool enabled); 695257525dSWilliam A. Kennington III 70*65362f49STim Chao /** @brief Sets the value of the LogTimeout property on the host watchdog 71*65362f49STim Chao * 72*65362f49STim Chao * @param[in] LogTimeout - The new LogTimeout value 73*65362f49STim Chao */ 74*65362f49STim Chao void setLogTimeout(bool LogTimeout); 75*65362f49STim Chao 76b638de22SWilliam A. Kennington III /** @brief Sets the value of the expireAction property on the host watchdog 77b638de22SWilliam A. Kennington III * 78b638de22SWilliam A. Kennington III * @param[in] expireAction - The new expireAction value 79b638de22SWilliam A. Kennington III */ 80b638de22SWilliam A. Kennington III void setExpireAction(Action expireAction); 81b638de22SWilliam A. Kennington III 82118907edSYong Li /** @brief Sets the value of the timerUse property on the host watchdog 83118907edSYong Li * 84118907edSYong Li * @param[in] timerUse - The new timerUse value 85118907edSYong Li */ 86118907edSYong Li void setTimerUse(TimerUse timerUse); 87118907edSYong Li 88cfae948bSDeepak Kumar Sahu /** @brief Sets the value of the ExpiredTimerUse property on the host 89cfae948bSDeepak Kumar Sahu * watchdog 90cfae948bSDeepak Kumar Sahu * 91cfae948bSDeepak Kumar Sahu * @param[in] timerUse - The new timerUse value 92cfae948bSDeepak Kumar Sahu */ 93cfae948bSDeepak Kumar Sahu void setExpiredTimerUse(TimerUse timerUse); 94cfae948bSDeepak Kumar Sahu 955257525dSWilliam A. Kennington III /** @brief Sets the value of the interval property on the host watchdog 965257525dSWilliam A. Kennington III * 975257525dSWilliam A. Kennington III * @param[in] interval - The new interval value 985257525dSWilliam A. Kennington III */ 995257525dSWilliam A. Kennington III void setInterval(uint64_t interval); 1005257525dSWilliam A. Kennington III 1015257525dSWilliam A. Kennington III private: 1025257525dSWilliam A. Kennington III /** @brief sdbusplus handle */ 1035d82f474SPatrick Williams sdbusplus::bus_t bus; 1045257525dSWilliam A. Kennington III /** @brief The name of the mapped host watchdog service */ 10525bc7ac6SWilliam A. Kennington III static ipmi::ServiceCache wd_service; 1065257525dSWilliam A. Kennington III 1072ecf5120SWilliam A. Kennington III /** @brief Gets the value of the property on the host watchdog 1082ecf5120SWilliam A. Kennington III * 1092ecf5120SWilliam A. Kennington III * @param[in] key - The name of the property 1102ecf5120SWilliam A. Kennington III * @return The value of the property 1112ecf5120SWilliam A. Kennington III */ 1122ecf5120SWilliam A. Kennington III template <typename T> 1132ecf5120SWilliam A. Kennington III T getProperty(const std::string& key); 1142ecf5120SWilliam A. Kennington III 1155257525dSWilliam A. Kennington III /** @brief Sets the value of the property on the host watchdog 1165257525dSWilliam A. Kennington III * 1175257525dSWilliam A. Kennington III * @param[in] key - The name of the property 1185257525dSWilliam A. Kennington III * @param[in] val - The new value 1195257525dSWilliam A. Kennington III */ 1205257525dSWilliam A. Kennington III template <typename T> 1215257525dSWilliam A. Kennington III void setProperty(const std::string& key, const T& val); 1225257525dSWilliam A. Kennington III }; 123