blob: 0cf1c748ae0413be9516eb57561cdf282c76c944 [file] [log] [blame]
William A. Kennington III52575252018-02-09 15:54:56 -08001#pragma once
Vernon Mauery6a98fe72019-03-11 15:57:48 -07002#include <ipmid/utils.hpp>
William A. Kennington III52575252018-02-09 15:54:56 -08003#include <sdbusplus/bus.hpp>
William A. Kennington IIIb638de22018-02-09 16:12:53 -08004#include <xyz/openbmc_project/State/Watchdog/server.hpp>
William A. Kennington III52575252018-02-09 15:54:56 -08005
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 */
Patrick Venture0b02be92018-08-31 11:55:55 -070011class WatchdogService
12{
13 public:
14 WatchdogService();
William A. Kennington III52575252018-02-09 15:54:56 -080015
Patrick Venture0b02be92018-08-31 11:55:55 -070016 using Action =
17 sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
Yong Li118907e2019-01-11 17:36:17 +080018 using TimerUse =
19 sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
William A. Kennington IIIb638de22018-02-09 16:12:53 -080020
Patrick Venture0b02be92018-08-31 11:55:55 -070021 /** @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);
William A. Kennington III4b017a92018-04-27 14:31:08 -070028
Patrick Venture0b02be92018-08-31 11:55:55 -070029 /** @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;
Yong Li118907e2019-01-11 17:36:17 +080037 TimerUse timerUse;
Patrick Venture0b02be92018-08-31 11:55:55 -070038 uint64_t interval;
39 uint64_t timeRemaining;
40 };
William A. Kennington III52575252018-02-09 15:54:56 -080041
Patrick Venture0b02be92018-08-31 11:55:55 -070042 /** @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();
William A. Kennington III52575252018-02-09 15:54:56 -080048
Patrick Venture0b02be92018-08-31 11:55:55 -070049 /** @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();
William A. Kennington III2ecf5122018-04-27 14:31:51 -070055
Patrick Venture0b02be92018-08-31 11:55:55 -070056 /** @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);
William A. Kennington IIIde14a022018-02-09 16:11:18 -080062
Patrick Venture0b02be92018-08-31 11:55:55 -070063 /** @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);
William A. Kennington III52575252018-02-09 15:54:56 -080068
Patrick Venture0b02be92018-08-31 11:55:55 -070069 /** @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);
William A. Kennington IIIb638de22018-02-09 16:12:53 -080074
Yong Li118907e2019-01-11 17:36:17 +080075 /** @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
Patrick Venture0b02be92018-08-31 11:55:55 -070081 /** @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);
William A. Kennington III52575252018-02-09 15:54:56 -080086
Patrick Venture0b02be92018-08-31 11:55:55 -070087 /** @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);
William A. Kennington III52575252018-02-09 15:54:56 -080093
Patrick Venture0b02be92018-08-31 11:55:55 -070094 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;
William A. Kennington III52575252018-02-09 15:54:56 -080099
Patrick Venture0b02be92018-08-31 11:55:55 -0700100 /** @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);
William A. Kennington III2ecf5122018-04-27 14:31:51 -0700107
Patrick Venture0b02be92018-08-31 11:55:55 -0700108 /** @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);
William A. Kennington III52575252018-02-09 15:54:56 -0800115};