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