monitor: Create PowerOffAction class hierarchy
The PowerOffAction base class and its derived classes will be used to
power off a system due to fan failures.
There are 3 types of power offs:
1. HardPowerOff - Do a hard power off after a delay
2. SoftPowerOff - Do a soft power off after a delay
3. EpowPowerOff - This isn't fully defined yet, but it will involve
powering off after setting an early power off warning
somehow and then waiting through 2 delays.
The code that makes the D-Bus calls to do the power offs is in a
standalone class so that it can be be mocked in testcases.
This code also makes use of the Logger class for logging, so this commit
brings that in as a singleton.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I83118963df4ec0b4f89619572f6935329eec3adb
diff --git a/monitor/power_interface.hpp b/monitor/power_interface.hpp
new file mode 100644
index 0000000..1a339c5
--- /dev/null
+++ b/monitor/power_interface.hpp
@@ -0,0 +1,59 @@
+#pragma once
+
+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;
+};
+
+/**
+ * @class PowerInterface
+ *
+ * Concrete class to perform power offs
+ */
+class PowerInterface : public PowerInterfaceBase
+{
+ public:
+ PowerInterface() = default;
+ ~PowerInterface() = default;
+ PowerInterface(const PowerInterface&) = delete;
+ PowerInterface& operator=(const PowerInterface&) = delete;
+ PowerInterface(PowerInterface&&) = delete;
+ PowerInterface& operator=(PowerInterface&&) = delete;
+
+ /**
+ * @brief Perform a soft power off
+ */
+ void softPowerOff() override;
+
+ /**
+ * @brief Perform a hard power off
+ */
+ void hardPowerOff() override;
+};
+
+} // namespace phosphor::fan::monitor