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