blob: 2e42938496876b4c7cd66545d6e8abe4943f06fb [file] [log] [blame]
#pragma once
#include <xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp>
#include <xyz/openbmc_project/Sensor/Threshold/HardShutdown/server.hpp>
#include <xyz/openbmc_project/Sensor/Threshold/PerformanceLoss/server.hpp>
#include <xyz/openbmc_project/Sensor/Threshold/SoftShutdown/server.hpp>
#include <xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp>
namespace phosphor::virtualSensor
{
template <typename... T>
using ServerObject = typename sdbusplus::server::object_t<T...>;
namespace threshold_ns =
sdbusplus::xyz::openbmc_project::Sensor::Threshold::server;
using CriticalObject = ServerObject<threshold_ns::Critical>;
using WarningObject = ServerObject<threshold_ns::Warning>;
using SoftShutdownObject = ServerObject<threshold_ns::SoftShutdown>;
using HardShutdownObject = ServerObject<threshold_ns::HardShutdown>;
using PerformanceLossObject = ServerObject<threshold_ns::PerformanceLoss>;
template <typename T>
struct Threshold;
struct Hysteresis
{
double highHysteresis;
double lowHysteresis;
auto getHighHysteresis()
{
return this->highHysteresis;
}
auto getLowHysteresis()
{
return this->lowHysteresis;
}
auto setHighHysteresis(double value)
{
this->highHysteresis = value;
}
auto setLowHysteresis(double value)
{
this->lowHysteresis = value;
}
};
template <>
struct Threshold<WarningObject> : public WarningObject, public Hysteresis
{
static constexpr auto name = "Warning";
using WarningObject::WarningObject;
auto high()
{
return warningHigh();
}
auto low()
{
return warningLow();
}
template <typename... Args>
auto alarmHigh(Args... args)
{
return warningAlarmHigh(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLow(Args... args)
{
return warningAlarmLow(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalAsserted(Args... args)
{
return warningHighAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalDeasserted(Args... args)
{
return warningHighAlarmDeasserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalAsserted(Args... args)
{
return warningLowAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalDeasserted(Args... args)
{
return warningLowAlarmDeasserted(std::forward<Args>(args)...);
}
};
template <>
struct Threshold<CriticalObject> : public CriticalObject, public Hysteresis
{
static constexpr auto name = "Critical";
using CriticalObject::CriticalObject;
auto high()
{
return criticalHigh();
}
auto low()
{
return criticalLow();
}
template <typename... Args>
auto alarmHigh(Args... args)
{
return criticalAlarmHigh(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLow(Args... args)
{
return criticalAlarmLow(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalAsserted(Args... args)
{
return criticalHighAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalDeasserted(Args... args)
{
return criticalHighAlarmDeasserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalAsserted(Args... args)
{
return criticalLowAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalDeasserted(Args... args)
{
return criticalLowAlarmDeasserted(std::forward<Args>(args)...);
}
};
template <>
struct Threshold<SoftShutdownObject> :
public SoftShutdownObject,
public Hysteresis
{
static constexpr auto name = "SoftShutdown";
using SoftShutdownObject::SoftShutdownObject;
auto high()
{
return softShutdownHigh();
}
auto low()
{
return softShutdownLow();
}
template <typename... Args>
auto alarmHigh(Args... args)
{
return softShutdownAlarmHigh(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLow(Args... args)
{
return softShutdownAlarmLow(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalAsserted(Args... args)
{
return softShutdownHighAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalDeasserted(Args... args)
{
return softShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalAsserted(Args... args)
{
return softShutdownLowAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalDeasserted(Args... args)
{
return softShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
}
};
template <>
struct Threshold<HardShutdownObject> :
public HardShutdownObject,
public Hysteresis
{
static constexpr auto name = "HardShutdown";
using HardShutdownObject::HardShutdownObject;
auto high()
{
return hardShutdownHigh();
}
auto low()
{
return hardShutdownLow();
}
template <typename... Args>
auto alarmHigh(Args... args)
{
return hardShutdownAlarmHigh(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLow(Args... args)
{
return hardShutdownAlarmLow(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalAsserted(Args... args)
{
return hardShutdownHighAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalDeasserted(Args... args)
{
return hardShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalAsserted(Args... args)
{
return hardShutdownLowAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalDeasserted(Args... args)
{
return hardShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
}
};
template <>
struct Threshold<PerformanceLossObject> :
public PerformanceLossObject,
public Hysteresis
{
static constexpr auto name = "PerformanceLoss";
using PerformanceLossObject::PerformanceLossObject;
double performanceLossHighHysteresis;
double performanceLossLowHysteresis;
auto high()
{
return performanceLossHigh();
}
auto low()
{
return performanceLossLow();
}
template <typename... Args>
auto alarmHigh(Args... args)
{
return performanceLossAlarmHigh(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLow(Args... args)
{
return performanceLossAlarmLow(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalAsserted(Args... args)
{
return performanceLossHighAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmHighSignalDeasserted(Args... args)
{
return performanceLossHighAlarmDeasserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalAsserted(Args... args)
{
return performanceLossLowAlarmAsserted(std::forward<Args>(args)...);
}
template <typename... Args>
auto alarmLowSignalDeasserted(Args... args)
{
return performanceLossLowAlarmDeasserted(std::forward<Args>(args)...);
}
};
} // namespace phosphor::virtualSensor