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