15257525dSWilliam A. Kennington III #pragma once 2*0b02be92SPatrick Venture #include "utils.hpp" 3*0b02be92SPatrick Venture 45257525dSWilliam A. Kennington III #include <sdbusplus/bus.hpp> 5b638de22SWilliam A. Kennington III #include <xyz/openbmc_project/State/Watchdog/server.hpp> 65257525dSWilliam A. Kennington III 75257525dSWilliam A. Kennington III /** @class WatchdogService 85257525dSWilliam A. Kennington III * @brief Access to the running OpenBMC watchdog implementation. 95257525dSWilliam A. Kennington III * @details Easy accessor for servers that implement the 105257525dSWilliam A. Kennington III * xyz.openbmc_project.State.Watchdog DBus API. 115257525dSWilliam A. Kennington III */ 12*0b02be92SPatrick Venture class WatchdogService 13*0b02be92SPatrick Venture { 145257525dSWilliam A. Kennington III public: 155257525dSWilliam A. Kennington III WatchdogService(); 165257525dSWilliam A. Kennington III 17*0b02be92SPatrick Venture using Action = 18*0b02be92SPatrick Venture sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action; 19b638de22SWilliam A. Kennington III 204b017a9bSWilliam A. Kennington III /** @brief Resets the time remaining on the watchdog. 214b017a9bSWilliam A. Kennington III * Equivalent to setTimeRemaining(getInterval()). 224b017a9bSWilliam A. Kennington III * Optionally enables the watchdog. 234b017a9bSWilliam A. Kennington III * 244b017a9bSWilliam A. Kennington III * @param[in] enableWatchdog - Should the call also enable the watchdog 254b017a9bSWilliam A. Kennington III */ 264b017a9bSWilliam A. Kennington III void resetTimeRemaining(bool enableWatchdog); 274b017a9bSWilliam A. Kennington III 285257525dSWilliam A. Kennington III /** @brief Contains a copy of the properties enumerated by the 295257525dSWilliam A. Kennington III * watchdog service. 305257525dSWilliam A. Kennington III */ 31*0b02be92SPatrick Venture struct Properties 32*0b02be92SPatrick Venture { 33de14a027SWilliam A. Kennington III bool initialized; 345257525dSWilliam A. Kennington III bool enabled; 35b638de22SWilliam A. Kennington III Action expireAction; 365257525dSWilliam A. Kennington III uint64_t interval; 375257525dSWilliam A. Kennington III uint64_t timeRemaining; 385257525dSWilliam A. Kennington III }; 395257525dSWilliam A. Kennington III 405257525dSWilliam A. Kennington III /** @brief Retrieves a copy of the currently set properties on the 415257525dSWilliam A. Kennington III * host watchdog 425257525dSWilliam A. Kennington III * 435257525dSWilliam A. Kennington III * @return A populated WatchdogProperties struct 445257525dSWilliam A. Kennington III */ 455257525dSWilliam A. Kennington III Properties getProperties(); 465257525dSWilliam A. Kennington III 472ecf5120SWilliam A. Kennington III /** @brief Get the value of the initialized property on the host 482ecf5120SWilliam A. Kennington III * watchdog 492ecf5120SWilliam A. Kennington III * 502ecf5120SWilliam A. Kennington III * @return The value of the property 512ecf5120SWilliam A. Kennington III */ 522ecf5120SWilliam A. Kennington III bool getInitialized(); 532ecf5120SWilliam A. Kennington III 54de14a027SWilliam A. Kennington III /** @brief Sets the value of the initialized property on the host 55de14a027SWilliam A. Kennington III * watchdog 56de14a027SWilliam A. Kennington III * 57de14a027SWilliam A. Kennington III * @param[in] initialized - The new initializedvalue 58de14a027SWilliam A. Kennington III */ 59de14a027SWilliam A. Kennington III void setInitialized(bool initialized); 60de14a027SWilliam A. Kennington III 615257525dSWilliam A. Kennington III /** @brief Sets the value of the enabled property on the host watchdog 625257525dSWilliam A. Kennington III * 635257525dSWilliam A. Kennington III * @param[in] enabled - The new enabled value 645257525dSWilliam A. Kennington III */ 655257525dSWilliam A. Kennington III void setEnabled(bool enabled); 665257525dSWilliam A. Kennington III 67b638de22SWilliam A. Kennington III /** @brief Sets the value of the expireAction property on the host watchdog 68b638de22SWilliam A. Kennington III * 69b638de22SWilliam A. Kennington III * @param[in] expireAction - The new expireAction value 70b638de22SWilliam A. Kennington III */ 71b638de22SWilliam A. Kennington III void setExpireAction(Action expireAction); 72b638de22SWilliam A. Kennington III 735257525dSWilliam A. Kennington III /** @brief Sets the value of the interval property on the host watchdog 745257525dSWilliam A. Kennington III * 755257525dSWilliam A. Kennington III * @param[in] interval - The new interval value 765257525dSWilliam A. Kennington III */ 775257525dSWilliam A. Kennington III void setInterval(uint64_t interval); 785257525dSWilliam A. Kennington III 795257525dSWilliam A. Kennington III /** @brief Sets the value of the timeRemaining property on the host 805257525dSWilliam A. Kennington III * watchdog 815257525dSWilliam A. Kennington III * 825257525dSWilliam A. Kennington III * @param[in] timeRemaining - The new timeRemaining value 835257525dSWilliam A. Kennington III */ 845257525dSWilliam A. Kennington III void setTimeRemaining(uint64_t timeRemaining); 855257525dSWilliam A. Kennington III 865257525dSWilliam A. Kennington III private: 875257525dSWilliam A. Kennington III /** @brief sdbusplus handle */ 885257525dSWilliam A. Kennington III sdbusplus::bus::bus bus; 895257525dSWilliam A. Kennington III /** @brief The name of the mapped host watchdog service */ 9025bc7ac6SWilliam A. Kennington III static ipmi::ServiceCache wd_service; 915257525dSWilliam A. Kennington III 922ecf5120SWilliam A. Kennington III /** @brief Gets the value of the property on the host watchdog 932ecf5120SWilliam A. Kennington III * 942ecf5120SWilliam A. Kennington III * @param[in] key - The name of the property 952ecf5120SWilliam A. Kennington III * @return The value of the property 962ecf5120SWilliam A. Kennington III */ 972ecf5120SWilliam A. Kennington III template <typename T> 982ecf5120SWilliam A. Kennington III T getProperty(const std::string& key); 992ecf5120SWilliam A. Kennington III 1005257525dSWilliam A. Kennington III /** @brief Sets the value of the property on the host watchdog 1015257525dSWilliam A. Kennington III * 1025257525dSWilliam A. Kennington III * @param[in] key - The name of the property 1035257525dSWilliam A. Kennington III * @param[in] val - The new value 1045257525dSWilliam A. Kennington III */ 1055257525dSWilliam A. Kennington III template <typename T> 1065257525dSWilliam A. Kennington III void setProperty(const std::string& key, const T& val); 1075257525dSWilliam A. Kennington III }; 108