blob: 75afc1eb5cd2508abb3b67fe6f446c0c49d90ec5 [file] [log] [blame]
William A. Kennington III52575252018-02-09 15:54:56 -08001#pragma once
Patrick Venture0b02be92018-08-31 11:55:55 -07002#include "utils.hpp"
3
William A. Kennington III52575252018-02-09 15:54:56 -08004#include <sdbusplus/bus.hpp>
William A. Kennington IIIb638de22018-02-09 16:12:53 -08005#include <xyz/openbmc_project/State/Watchdog/server.hpp>
William A. Kennington III52575252018-02-09 15:54:56 -08006
7/** @class WatchdogService
8 * @brief Access to the running OpenBMC watchdog implementation.
9 * @details Easy accessor for servers that implement the
10 * xyz.openbmc_project.State.Watchdog DBus API.
11 */
Patrick Venture0b02be92018-08-31 11:55:55 -070012class WatchdogService
13{
14 public:
15 WatchdogService();
William A. Kennington III52575252018-02-09 15:54:56 -080016
Patrick Venture0b02be92018-08-31 11:55:55 -070017 using Action =
18 sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
Yong Li118907e2019-01-11 17:36:17 +080019 using TimerUse =
20 sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
William A. Kennington IIIb638de22018-02-09 16:12:53 -080021
Patrick Venture0b02be92018-08-31 11:55:55 -070022 /** @brief Resets the time remaining on the watchdog.
23 * Equivalent to setTimeRemaining(getInterval()).
24 * Optionally enables the watchdog.
25 *
26 * @param[in] enableWatchdog - Should the call also enable the watchdog
27 */
28 void resetTimeRemaining(bool enableWatchdog);
William A. Kennington III4b017a92018-04-27 14:31:08 -070029
Patrick Venture0b02be92018-08-31 11:55:55 -070030 /** @brief Contains a copy of the properties enumerated by the
31 * watchdog service.
32 */
33 struct Properties
34 {
35 bool initialized;
36 bool enabled;
37 Action expireAction;
Yong Li118907e2019-01-11 17:36:17 +080038 TimerUse timerUse;
Patrick Venture0b02be92018-08-31 11:55:55 -070039 uint64_t interval;
40 uint64_t timeRemaining;
41 };
William A. Kennington III52575252018-02-09 15:54:56 -080042
Patrick Venture0b02be92018-08-31 11:55:55 -070043 /** @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();
William A. Kennington III52575252018-02-09 15:54:56 -080049
Patrick Venture0b02be92018-08-31 11:55:55 -070050 /** @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();
William A. Kennington III2ecf5122018-04-27 14:31:51 -070056
Patrick Venture0b02be92018-08-31 11:55:55 -070057 /** @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);
William A. Kennington IIIde14a022018-02-09 16:11:18 -080063
Patrick Venture0b02be92018-08-31 11:55:55 -070064 /** @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);
William A. Kennington III52575252018-02-09 15:54:56 -080069
Patrick Venture0b02be92018-08-31 11:55:55 -070070 /** @brief Sets the value of the expireAction property on the host watchdog
71 *
72 * @param[in] expireAction - The new expireAction value
73 */
74 void setExpireAction(Action expireAction);
William A. Kennington IIIb638de22018-02-09 16:12:53 -080075
Yong Li118907e2019-01-11 17:36:17 +080076 /** @brief Sets the value of the timerUse property on the host watchdog
77 *
78 * @param[in] timerUse - The new timerUse value
79 */
80 void setTimerUse(TimerUse timerUse);
81
Patrick Venture0b02be92018-08-31 11:55:55 -070082 /** @brief Sets the value of the interval property on the host watchdog
83 *
84 * @param[in] interval - The new interval value
85 */
86 void setInterval(uint64_t interval);
William A. Kennington III52575252018-02-09 15:54:56 -080087
Patrick Venture0b02be92018-08-31 11:55:55 -070088 /** @brief Sets the value of the timeRemaining property on the host
89 * watchdog
90 *
91 * @param[in] timeRemaining - The new timeRemaining value
92 */
93 void setTimeRemaining(uint64_t timeRemaining);
William A. Kennington III52575252018-02-09 15:54:56 -080094
Patrick Venture0b02be92018-08-31 11:55:55 -070095 private:
96 /** @brief sdbusplus handle */
97 sdbusplus::bus::bus bus;
98 /** @brief The name of the mapped host watchdog service */
99 static ipmi::ServiceCache wd_service;
William A. Kennington III52575252018-02-09 15:54:56 -0800100
Patrick Venture0b02be92018-08-31 11:55:55 -0700101 /** @brief Gets the value of the property on the host watchdog
102 *
103 * @param[in] key - The name of the property
104 * @return The value of the property
105 */
106 template <typename T>
107 T getProperty(const std::string& key);
William A. Kennington III2ecf5122018-04-27 14:31:51 -0700108
Patrick Venture0b02be92018-08-31 11:55:55 -0700109 /** @brief Sets the value of the property on the host watchdog
110 *
111 * @param[in] key - The name of the property
112 * @param[in] val - The new value
113 */
114 template <typename T>
115 void setProperty(const std::string& key, const T& val);
William A. Kennington III52575252018-02-09 15:54:56 -0800116};