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