blob: ed64a3c7c4da5cee99f3f5e548e2866c968826c0 [file] [log] [blame]
#pragma once
#include <ipmid/utils.hpp>
#include <sdbusplus/bus.hpp>
#include <xyz/openbmc_project/State/Watchdog/server.hpp>
/** @class WatchdogService
* @brief Access to the running OpenBMC watchdog implementation.
* @details Easy accessor for servers that implement the
* xyz.openbmc_project.State.Watchdog DBus API.
*/
class WatchdogService
{
public:
WatchdogService();
using Action =
sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
using TimerUse =
sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
/** @brief Resets the time remaining on the watchdog.
* Equivalent to setTimeRemaining(getInterval()).
* Optionally enables the watchdog.
*
* @param[in] enableWatchdog - Should the call also enable the watchdog
*/
void resetTimeRemaining(bool enableWatchdog);
/** @brief Contains a copy of the properties enumerated by the
* watchdog service.
*/
struct Properties
{
bool initialized;
bool enabled;
Action expireAction;
TimerUse timerUse;
TimerUse expiredTimerUse;
uint64_t interval;
uint64_t timeRemaining;
};
/** @brief Retrieves a copy of the currently set properties on the
* host watchdog
*
* @return A populated WatchdogProperties struct
*/
Properties getProperties();
/** @brief Get the value of the initialized property on the host
* watchdog
*
* @return The value of the property
*/
bool getInitialized();
/** @brief Sets the value of the initialized property on the host
* watchdog
*
* @param[in] initialized - The new initializedvalue
*/
void setInitialized(bool initialized);
/** @brief Sets the value of the enabled property on the host watchdog
*
* @param[in] enabled - The new enabled value
*/
void setEnabled(bool enabled);
/** @brief Sets the value of the expireAction property on the host watchdog
*
* @param[in] expireAction - The new expireAction value
*/
void setExpireAction(Action expireAction);
/** @brief Sets the value of the timerUse property on the host watchdog
*
* @param[in] timerUse - The new timerUse value
*/
void setTimerUse(TimerUse timerUse);
/** @brief Sets the value of the ExpiredTimerUse property on the host
* watchdog
*
* @param[in] timerUse - The new timerUse value
*/
void setExpiredTimerUse(TimerUse timerUse);
/** @brief Sets the value of the interval property on the host watchdog
*
* @param[in] interval - The new interval value
*/
void setInterval(uint64_t interval);
/** @brief Sets the value of the timeRemaining property on the host
* watchdog
*
* @param[in] timeRemaining - The new timeRemaining value
*/
void setTimeRemaining(uint64_t timeRemaining);
private:
/** @brief sdbusplus handle */
sdbusplus::bus::bus bus;
/** @brief The name of the mapped host watchdog service */
static ipmi::ServiceCache wd_service;
/** @brief Gets the value of the property on the host watchdog
*
* @param[in] key - The name of the property
* @return The value of the property
*/
template <typename T>
T getProperty(const std::string& key);
/** @brief Sets the value of the property on the host watchdog
*
* @param[in] key - The name of the property
* @param[in] val - The new value
*/
template <typename T>
void setProperty(const std::string& key, const T& val);
};