blob: edbf32569958941d2d773e82b5bef1bfa96c6b8c [file] [log] [blame] [edit]
#pragma once
#include "types.hpp"
namespace phosphor::fan::monitor
{
/**
* @class PowerInterfaceBase
*
* The base class that contains the APIs to do power offs.
* This is required so it can be mocked in testcases.
*/
class PowerInterfaceBase
{
public:
PowerInterfaceBase() = default;
virtual ~PowerInterfaceBase() = default;
PowerInterfaceBase(const PowerInterfaceBase&) = delete;
PowerInterfaceBase& operator=(const PowerInterfaceBase&) = delete;
PowerInterfaceBase(PowerInterfaceBase&&) = delete;
PowerInterfaceBase& operator=(PowerInterfaceBase&&) = delete;
/**
* @brief Perform a soft power off
*/
virtual void softPowerOff() = 0;
/**
* @brief Perform a hard power off
*/
virtual void hardPowerOff() = 0;
/**
* @brief Sets the thermal alert D-Bus property
*
* @param[in] alert - The alert value
*/
virtual void thermalAlert(bool alert) = 0;
};
/**
* @class PowerInterface
*
* Concrete class to perform power offs
*/
class PowerInterface : public PowerInterfaceBase
{
public:
PowerInterface() = delete;
~PowerInterface() = default;
PowerInterface(const PowerInterface&) = delete;
PowerInterface& operator=(const PowerInterface&) = delete;
PowerInterface(PowerInterface&&) = delete;
PowerInterface& operator=(PowerInterface&&) = delete;
/**
* @brief Constructor
*
* @param[in] ThermalAlertObject& - The thermal alert D-Bus object
*/
explicit PowerInterface(ThermalAlertObject& alertObject) :
_alert(alertObject)
{}
/**
* @brief Perform a soft power off
*/
void softPowerOff() override;
/**
* @brief Perform a hard power off
*/
void hardPowerOff() override;
/**
* @brief Sets the thermal alert D-Bus property
*
* @param[in] alert - The alert value
*/
void thermalAlert(bool alert) override
{
_alert.enabled(alert);
}
/**
* @brief Calls the D-Bus method to execute the hard power off.
*
* A static function so this can be used by code that doesn't
* want to create a PowerInterface object.
*/
static void executeHardPowerOff();
private:
/**
* @brief Reference to the thermal alert D-Bus object
*/
ThermalAlertObject& _alert;
};
} // namespace phosphor::fan::monitor