blob: aa77f7f71f823e91e81f16abf09149c6bbc0eddf [file] [log] [blame]
Matt Spinler8f5e6112021-01-15 10:44:32 -06001#pragma once
2
3#include <xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp>
4#include <xyz/openbmc_project/Sensor/Threshold/HardShutdown/server.hpp>
Matt Spinlerb306b032021-02-01 10:05:46 -06005#include <xyz/openbmc_project/Sensor/Threshold/PerformanceLoss/server.hpp>
Matt Spinler8f5e6112021-01-15 10:44:32 -06006#include <xyz/openbmc_project/Sensor/Threshold/SoftShutdown/server.hpp>
7#include <xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp>
8
9namespace phosphor::virtualSensor
10{
11
12template <typename... T>
13using ServerObject = typename sdbusplus::server::object::object<T...>;
14
Patrick Williamsfdb826d2021-01-20 14:37:53 -060015namespace threshold_ns =
16 sdbusplus::xyz::openbmc_project::Sensor::Threshold::server;
17using CriticalObject = ServerObject<threshold_ns::Critical>;
18using WarningObject = ServerObject<threshold_ns::Warning>;
19using SoftShutdownObject = ServerObject<threshold_ns::SoftShutdown>;
20using HardShutdownObject = ServerObject<threshold_ns::HardShutdown>;
Matt Spinlerb306b032021-02-01 10:05:46 -060021using PerformanceLossObject = ServerObject<threshold_ns::PerformanceLoss>;
Matt Spinler8f5e6112021-01-15 10:44:32 -060022
23template <typename T>
Patrick Williamsfdb826d2021-01-20 14:37:53 -060024struct Threshold;
Matt Spinler8f5e6112021-01-15 10:44:32 -060025
26template <>
Patrick Williamsfdb826d2021-01-20 14:37:53 -060027struct Threshold<WarningObject> : public WarningObject
Matt Spinler8f5e6112021-01-15 10:44:32 -060028{
Patrick Williamsfdb826d2021-01-20 14:37:53 -060029 static constexpr auto name = "Warning";
30 using WarningObject::WarningObject;
31
32 auto high()
Matt Spinler8f5e6112021-01-15 10:44:32 -060033 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060034 return warningHigh();
Matt Spinler8f5e6112021-01-15 10:44:32 -060035 }
Patrick Williamsfdb826d2021-01-20 14:37:53 -060036 auto low()
Matt Spinler8f5e6112021-01-15 10:44:32 -060037 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060038 return warningLow();
Matt Spinler8f5e6112021-01-15 10:44:32 -060039 }
40
Patrick Williamsfdb826d2021-01-20 14:37:53 -060041 template <typename... Args>
42 auto alarmHigh(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -060043 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060044 return warningAlarmHigh(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -060045 }
46
Patrick Williamsfdb826d2021-01-20 14:37:53 -060047 template <typename... Args>
48 auto alarmLow(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -060049 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060050 return warningAlarmLow(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -060051 }
George Hung4294e6d2021-04-14 20:58:21 +080052
53 template <typename... Args>
54 auto alarmHighSignalAsserted(Args... args)
55 {
56 return warningHighAlarmAsserted(std::forward<Args>(args)...);
57 }
58
59 template <typename... Args>
60 auto alarmHighSignalDeasserted(Args... args)
61 {
62 return warningHighAlarmDeasserted(std::forward<Args>(args)...);
63 }
64
65 template <typename... Args>
66 auto alarmLowSignalAsserted(Args... args)
67 {
68 return warningLowAlarmAsserted(std::forward<Args>(args)...);
69 }
70
71 template <typename... Args>
72 auto alarmLowSignalDeasserted(Args... args)
73 {
74 return warningLowAlarmDeasserted(std::forward<Args>(args)...);
75 }
Matt Spinler8f5e6112021-01-15 10:44:32 -060076};
77
78template <>
Patrick Williamsfdb826d2021-01-20 14:37:53 -060079struct Threshold<CriticalObject> : public CriticalObject
Matt Spinler8f5e6112021-01-15 10:44:32 -060080{
Patrick Williamsfdb826d2021-01-20 14:37:53 -060081 static constexpr auto name = "Critical";
82 using CriticalObject::CriticalObject;
83
84 auto high()
Matt Spinler8f5e6112021-01-15 10:44:32 -060085 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060086 return criticalHigh();
Matt Spinler8f5e6112021-01-15 10:44:32 -060087 }
Patrick Williamsfdb826d2021-01-20 14:37:53 -060088 auto low()
Matt Spinler8f5e6112021-01-15 10:44:32 -060089 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060090 return criticalLow();
Matt Spinler8f5e6112021-01-15 10:44:32 -060091 }
92
Patrick Williamsfdb826d2021-01-20 14:37:53 -060093 template <typename... Args>
94 auto alarmHigh(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -060095 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -060096 return criticalAlarmHigh(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -060097 }
98
Patrick Williamsfdb826d2021-01-20 14:37:53 -060099 template <typename... Args>
100 auto alarmLow(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -0600101 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600102 return criticalAlarmLow(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -0600103 }
George Hung4294e6d2021-04-14 20:58:21 +0800104
105 template <typename... Args>
106 auto alarmHighSignalAsserted(Args... args)
107 {
108 return criticalHighAlarmAsserted(std::forward<Args>(args)...);
109 }
110
111 template <typename... Args>
112 auto alarmHighSignalDeasserted(Args... args)
113 {
114 return criticalHighAlarmDeasserted(std::forward<Args>(args)...);
115 }
116
117 template <typename... Args>
118 auto alarmLowSignalAsserted(Args... args)
119 {
120 return criticalLowAlarmAsserted(std::forward<Args>(args)...);
121 }
122
123 template <typename... Args>
124 auto alarmLowSignalDeasserted(Args... args)
125 {
126 return criticalLowAlarmDeasserted(std::forward<Args>(args)...);
127 }
Matt Spinler8f5e6112021-01-15 10:44:32 -0600128};
129
130template <>
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600131struct Threshold<SoftShutdownObject> : public SoftShutdownObject
Matt Spinler8f5e6112021-01-15 10:44:32 -0600132{
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600133 static constexpr auto name = "SoftShutdown";
134 using SoftShutdownObject::SoftShutdownObject;
135
136 auto high()
Matt Spinler8f5e6112021-01-15 10:44:32 -0600137 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600138 return softShutdownHigh();
Matt Spinler8f5e6112021-01-15 10:44:32 -0600139 }
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600140 auto low()
Matt Spinler8f5e6112021-01-15 10:44:32 -0600141 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600142 return softShutdownLow();
Matt Spinler8f5e6112021-01-15 10:44:32 -0600143 }
144
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600145 template <typename... Args>
146 auto alarmHigh(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -0600147 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600148 return softShutdownAlarmHigh(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -0600149 }
150
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600151 template <typename... Args>
152 auto alarmLow(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -0600153 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600154 return softShutdownAlarmLow(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -0600155 }
George Hung4294e6d2021-04-14 20:58:21 +0800156
157 template <typename... Args>
158 auto alarmHighSignalAsserted(Args... args)
159 {
160 return softShutdownHighAlarmAsserted(std::forward<Args>(args)...);
161 }
162
163 template <typename... Args>
164 auto alarmHighSignalDeasserted(Args... args)
165 {
166 return softShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
167 }
168
169 template <typename... Args>
170 auto alarmLowSignalAsserted(Args... args)
171 {
172 return softShutdownLowAlarmAsserted(std::forward<Args>(args)...);
173 }
174
175 template <typename... Args>
176 auto alarmLowSignalDeasserted(Args... args)
177 {
178 return softShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
179 }
Matt Spinler8f5e6112021-01-15 10:44:32 -0600180};
181
182template <>
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600183struct Threshold<HardShutdownObject> : public HardShutdownObject
Matt Spinler8f5e6112021-01-15 10:44:32 -0600184{
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600185 static constexpr auto name = "HardShutdown";
186 using HardShutdownObject::HardShutdownObject;
187
188 auto high()
Matt Spinler8f5e6112021-01-15 10:44:32 -0600189 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600190 return hardShutdownHigh();
Matt Spinler8f5e6112021-01-15 10:44:32 -0600191 }
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600192 auto low()
Matt Spinler8f5e6112021-01-15 10:44:32 -0600193 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600194 return hardShutdownLow();
Matt Spinler8f5e6112021-01-15 10:44:32 -0600195 }
196
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600197 template <typename... Args>
198 auto alarmHigh(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -0600199 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600200 return hardShutdownAlarmHigh(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -0600201 }
202
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600203 template <typename... Args>
204 auto alarmLow(Args... args)
Matt Spinler8f5e6112021-01-15 10:44:32 -0600205 {
Patrick Williamsfdb826d2021-01-20 14:37:53 -0600206 return hardShutdownAlarmLow(std::forward<Args>(args)...);
Matt Spinler8f5e6112021-01-15 10:44:32 -0600207 }
George Hung4294e6d2021-04-14 20:58:21 +0800208
209 template <typename... Args>
210 auto alarmHighSignalAsserted(Args... args)
211 {
212 return hardShutdownHighAlarmAsserted(std::forward<Args>(args)...);
213 }
214
215 template <typename... Args>
216 auto alarmHighSignalDeasserted(Args... args)
217 {
218 return hardShutdownHighAlarmDeasserted(std::forward<Args>(args)...);
219 }
220
221 template <typename... Args>
222 auto alarmLowSignalAsserted(Args... args)
223 {
224 return hardShutdownLowAlarmAsserted(std::forward<Args>(args)...);
225 }
226
227 template <typename... Args>
228 auto alarmLowSignalDeasserted(Args... args)
229 {
230 return hardShutdownLowAlarmDeasserted(std::forward<Args>(args)...);
231 }
Matt Spinler8f5e6112021-01-15 10:44:32 -0600232};
233
Matt Spinlerb306b032021-02-01 10:05:46 -0600234template <>
235struct Threshold<PerformanceLossObject> : public PerformanceLossObject
236{
237 static constexpr auto name = "PerformanceLoss";
238 using PerformanceLossObject::PerformanceLossObject;
239
240 auto high()
241 {
242 return performanceLossHigh();
243 }
244 auto low()
245 {
246 return performanceLossLow();
247 }
248
249 template <typename... Args>
250 auto alarmHigh(Args... args)
251 {
252 return performanceLossAlarmHigh(std::forward<Args>(args)...);
253 }
254
255 template <typename... Args>
256 auto alarmLow(Args... args)
257 {
258 return performanceLossAlarmLow(std::forward<Args>(args)...);
259 }
George Hung4294e6d2021-04-14 20:58:21 +0800260
261 template <typename... Args>
262 auto alarmHighSignalAsserted(Args... args)
263 {
264 return performanceLossHighAlarmAsserted(std::forward<Args>(args)...);
265 }
266
267 template <typename... Args>
268 auto alarmHighSignalDeasserted(Args... args)
269 {
270 return performanceLossHighAlarmDeasserted(std::forward<Args>(args)...);
271 }
272
273 template <typename... Args>
274 auto alarmLowSignalAsserted(Args... args)
275 {
276 return performanceLossLowAlarmAsserted(std::forward<Args>(args)...);
277 }
278
279 template <typename... Args>
280 auto alarmLowSignalDeasserted(Args... args)
281 {
282 return performanceLossLowAlarmDeasserted(std::forward<Args>(args)...);
283 }
Matt Spinlerb306b032021-02-01 10:05:46 -0600284};
285
Matt Spinler8f5e6112021-01-15 10:44:32 -0600286} // namespace phosphor::virtualSensor