Add Sensor.Threshold server bindings

Temporarily add the server bindings for xyz.openbmc_project.Sensor.Threshold
until they are available elsewhere.

Change-Id: I476d0ee3abbc5a93a6720eedc4ecfa8ae0cc3d0c
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/Makefile.am b/Makefile.am
index ab4d373..1f5b6ca 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -12,6 +12,8 @@
 	sensorset.cpp \
 	mainloop.cpp \
 	sysfs.cpp \
-	xyz.openbmc_project.Sensor.Value.cpp
+	xyz.openbmc_project.Sensor.Value.cpp \
+	xyz.openbmc_project.Sensor.Threshold.Warning.cpp \
+	xyz.openbmc_project.Sensor.Threshold.Critical.cpp
 
 SUBDIRS = . test
diff --git a/xyz.openbmc_project.Sensor.Threshold.Critical.cpp b/xyz.openbmc_project.Sensor.Threshold.Critical.cpp
new file mode 100644
index 0000000..755174d
--- /dev/null
+++ b/xyz.openbmc_project.Sensor.Threshold.Critical.cpp
@@ -0,0 +1,360 @@
+#include <algorithm>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
+#include <xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp>
+
+namespace sdbusplus
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace Sensor
+{
+namespace Threshold
+{
+namespace server
+{
+
+Critical::Critical(bus::bus& bus, const char* path)
+        : _xyz_openbmc_project_Sensor_Threshold_Critical_interface(
+                bus, path, _interface, _vtable, this)
+{
+}
+
+
+
+auto Critical::criticalHigh() const ->
+        int64_t
+{
+    return _criticalHigh;
+}
+
+int Critical::_callback_get_CriticalHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Critical*>(context);
+        m.append(convertForMessage(o->criticalHigh()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Critical::criticalHigh(int64_t value) ->
+        int64_t
+{
+    if (_criticalHigh != value)
+    {
+        _criticalHigh = value;
+        _xyz_openbmc_project_Sensor_Threshold_Critical_interface.property_changed("CriticalHigh");
+    }
+
+    return _criticalHigh;
+}
+
+int Critical::_callback_set_CriticalHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Critical*>(context);
+
+        int64_t v{};
+        m.read(v);
+        o->criticalHigh(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Critical
+{
+static const auto _property_CriticalHigh =
+    utility::tuple_to_array(message::types::type_id<
+            int64_t>());
+}
+}
+auto Critical::criticalLow() const ->
+        int64_t
+{
+    return _criticalLow;
+}
+
+int Critical::_callback_get_CriticalLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Critical*>(context);
+        m.append(convertForMessage(o->criticalLow()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Critical::criticalLow(int64_t value) ->
+        int64_t
+{
+    if (_criticalLow != value)
+    {
+        _criticalLow = value;
+        _xyz_openbmc_project_Sensor_Threshold_Critical_interface.property_changed("CriticalLow");
+    }
+
+    return _criticalLow;
+}
+
+int Critical::_callback_set_CriticalLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Critical*>(context);
+
+        int64_t v{};
+        m.read(v);
+        o->criticalLow(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Critical
+{
+static const auto _property_CriticalLow =
+    utility::tuple_to_array(message::types::type_id<
+            int64_t>());
+}
+}
+auto Critical::criticalAlarmHigh() const ->
+        bool
+{
+    return _criticalAlarmHigh;
+}
+
+int Critical::_callback_get_CriticalAlarmHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Critical*>(context);
+        m.append(convertForMessage(o->criticalAlarmHigh()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Critical::criticalAlarmHigh(bool value) ->
+        bool
+{
+    if (_criticalAlarmHigh != value)
+    {
+        _criticalAlarmHigh = value;
+        _xyz_openbmc_project_Sensor_Threshold_Critical_interface.property_changed("CriticalAlarmHigh");
+    }
+
+    return _criticalAlarmHigh;
+}
+
+int Critical::_callback_set_CriticalAlarmHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Critical*>(context);
+
+        bool v{};
+        m.read(v);
+        o->criticalAlarmHigh(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Critical
+{
+static const auto _property_CriticalAlarmHigh =
+    utility::tuple_to_array(message::types::type_id<
+            bool>());
+}
+}
+auto Critical::criticalAlarmLow() const ->
+        bool
+{
+    return _criticalAlarmLow;
+}
+
+int Critical::_callback_get_CriticalAlarmLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Critical*>(context);
+        m.append(convertForMessage(o->criticalAlarmLow()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Critical::criticalAlarmLow(bool value) ->
+        bool
+{
+    if (_criticalAlarmLow != value)
+    {
+        _criticalAlarmLow = value;
+        _xyz_openbmc_project_Sensor_Threshold_Critical_interface.property_changed("CriticalAlarmLow");
+    }
+
+    return _criticalAlarmLow;
+}
+
+int Critical::_callback_set_CriticalAlarmLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Critical*>(context);
+
+        bool v{};
+        m.read(v);
+        o->criticalAlarmLow(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Critical
+{
+static const auto _property_CriticalAlarmLow =
+    utility::tuple_to_array(message::types::type_id<
+            bool>());
+}
+}
+
+
+const vtable::vtable_t Critical::_vtable[] = {
+    vtable::start(),
+    vtable::property("CriticalHigh",
+                     details::Critical::_property_CriticalHigh
+                        .data(),
+                     _callback_get_CriticalHigh,
+                     _callback_set_CriticalHigh,
+                     vtable::property_::emits_change),
+    vtable::property("CriticalLow",
+                     details::Critical::_property_CriticalLow
+                        .data(),
+                     _callback_get_CriticalLow,
+                     _callback_set_CriticalLow,
+                     vtable::property_::emits_change),
+    vtable::property("CriticalAlarmHigh",
+                     details::Critical::_property_CriticalAlarmHigh
+                        .data(),
+                     _callback_get_CriticalAlarmHigh,
+                     _callback_set_CriticalAlarmHigh,
+                     vtable::property_::emits_change),
+    vtable::property("CriticalAlarmLow",
+                     details::Critical::_property_CriticalAlarmLow
+                        .data(),
+                     _callback_get_CriticalAlarmLow,
+                     _callback_set_CriticalAlarmLow,
+                     vtable::property_::emits_change),
+    vtable::end()
+};
+
+} // namespace server
+} // namespace Threshold
+} // namespace Sensor
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace sdbusplus
+
diff --git a/xyz.openbmc_project.Sensor.Threshold.Warning.cpp b/xyz.openbmc_project.Sensor.Threshold.Warning.cpp
new file mode 100644
index 0000000..4e06927
--- /dev/null
+++ b/xyz.openbmc_project.Sensor.Threshold.Warning.cpp
@@ -0,0 +1,360 @@
+#include <algorithm>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
+#include <xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp>
+
+namespace sdbusplus
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace Sensor
+{
+namespace Threshold
+{
+namespace server
+{
+
+Warning::Warning(bus::bus& bus, const char* path)
+        : _xyz_openbmc_project_Sensor_Threshold_Warning_interface(
+                bus, path, _interface, _vtable, this)
+{
+}
+
+
+
+auto Warning::warningHigh() const ->
+        int64_t
+{
+    return _warningHigh;
+}
+
+int Warning::_callback_get_WarningHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Warning*>(context);
+        m.append(convertForMessage(o->warningHigh()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Warning::warningHigh(int64_t value) ->
+        int64_t
+{
+    if (_warningHigh != value)
+    {
+        _warningHigh = value;
+        _xyz_openbmc_project_Sensor_Threshold_Warning_interface.property_changed("WarningHigh");
+    }
+
+    return _warningHigh;
+}
+
+int Warning::_callback_set_WarningHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Warning*>(context);
+
+        int64_t v{};
+        m.read(v);
+        o->warningHigh(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Warning
+{
+static const auto _property_WarningHigh =
+    utility::tuple_to_array(message::types::type_id<
+            int64_t>());
+}
+}
+auto Warning::warningLow() const ->
+        int64_t
+{
+    return _warningLow;
+}
+
+int Warning::_callback_get_WarningLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Warning*>(context);
+        m.append(convertForMessage(o->warningLow()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Warning::warningLow(int64_t value) ->
+        int64_t
+{
+    if (_warningLow != value)
+    {
+        _warningLow = value;
+        _xyz_openbmc_project_Sensor_Threshold_Warning_interface.property_changed("WarningLow");
+    }
+
+    return _warningLow;
+}
+
+int Warning::_callback_set_WarningLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Warning*>(context);
+
+        int64_t v{};
+        m.read(v);
+        o->warningLow(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Warning
+{
+static const auto _property_WarningLow =
+    utility::tuple_to_array(message::types::type_id<
+            int64_t>());
+}
+}
+auto Warning::warningAlarmHigh() const ->
+        bool
+{
+    return _warningAlarmHigh;
+}
+
+int Warning::_callback_get_WarningAlarmHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Warning*>(context);
+        m.append(convertForMessage(o->warningAlarmHigh()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Warning::warningAlarmHigh(bool value) ->
+        bool
+{
+    if (_warningAlarmHigh != value)
+    {
+        _warningAlarmHigh = value;
+        _xyz_openbmc_project_Sensor_Threshold_Warning_interface.property_changed("WarningAlarmHigh");
+    }
+
+    return _warningAlarmHigh;
+}
+
+int Warning::_callback_set_WarningAlarmHigh(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Warning*>(context);
+
+        bool v{};
+        m.read(v);
+        o->warningAlarmHigh(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Warning
+{
+static const auto _property_WarningAlarmHigh =
+    utility::tuple_to_array(message::types::type_id<
+            bool>());
+}
+}
+auto Warning::warningAlarmLow() const ->
+        bool
+{
+    return _warningAlarmLow;
+}
+
+int Warning::_callback_get_WarningAlarmLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* reply, void* context,
+        sd_bus_error* error)
+{
+    using sdbusplus::server::binding::details::convertForMessage;
+
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(reply));
+
+        auto o = static_cast<Warning*>(context);
+        m.append(convertForMessage(o->warningAlarmLow()));
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+auto Warning::warningAlarmLow(bool value) ->
+        bool
+{
+    if (_warningAlarmLow != value)
+    {
+        _warningAlarmLow = value;
+        _xyz_openbmc_project_Sensor_Threshold_Warning_interface.property_changed("WarningAlarmLow");
+    }
+
+    return _warningAlarmLow;
+}
+
+int Warning::_callback_set_WarningAlarmLow(
+        sd_bus* bus, const char* path, const char* interface,
+        const char* property, sd_bus_message* value, void* context,
+        sd_bus_error* error)
+{
+    try
+    {
+        auto m = message::message(sd_bus_message_ref(value));
+
+        auto o = static_cast<Warning*>(context);
+
+        bool v{};
+        m.read(v);
+        o->warningAlarmLow(v);
+    }
+    catch(sdbusplus::internal_exception_t& e)
+    {
+        sd_bus_error_set_const(error, e.name(), e.description());
+        return -EINVAL;
+    }
+
+    return true;
+}
+
+namespace details
+{
+namespace Warning
+{
+static const auto _property_WarningAlarmLow =
+    utility::tuple_to_array(message::types::type_id<
+            bool>());
+}
+}
+
+
+const vtable::vtable_t Warning::_vtable[] = {
+    vtable::start(),
+    vtable::property("WarningHigh",
+                     details::Warning::_property_WarningHigh
+                        .data(),
+                     _callback_get_WarningHigh,
+                     _callback_set_WarningHigh,
+                     vtable::property_::emits_change),
+    vtable::property("WarningLow",
+                     details::Warning::_property_WarningLow
+                        .data(),
+                     _callback_get_WarningLow,
+                     _callback_set_WarningLow,
+                     vtable::property_::emits_change),
+    vtable::property("WarningAlarmHigh",
+                     details::Warning::_property_WarningAlarmHigh
+                        .data(),
+                     _callback_get_WarningAlarmHigh,
+                     _callback_set_WarningAlarmHigh,
+                     vtable::property_::emits_change),
+    vtable::property("WarningAlarmLow",
+                     details::Warning::_property_WarningAlarmLow
+                        .data(),
+                     _callback_get_WarningAlarmLow,
+                     _callback_set_WarningAlarmLow,
+                     vtable::property_::emits_change),
+    vtable::end()
+};
+
+} // namespace server
+} // namespace Threshold
+} // namespace Sensor
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace sdbusplus
+
diff --git a/xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp b/xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp
new file mode 100644
index 0000000..5135121
--- /dev/null
+++ b/xyz/openbmc_project/Sensor/Threshold/Critical/server.hpp
@@ -0,0 +1,122 @@
+#pragma once
+#include <tuple>
+#include <systemd/sd-bus.h>
+#include <sdbusplus/server.hpp>
+
+namespace sdbusplus
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace Sensor
+{
+namespace Threshold
+{
+namespace server
+{
+
+class Critical
+{
+    public:
+        /* Define all of the basic class operations:
+         *     Not allowed:
+         *         - Default constructor to avoid nullptrs.
+         *         - Copy operations due to internal unique_ptr.
+         *     Allowed:
+         *         - Move operations.
+         *         - Destructor.
+         */
+        Critical() = delete;
+        Critical(const Critical&) = delete;
+        Critical& operator=(const Critical&) = delete;
+        Critical(Critical&&) = default;
+        Critical& operator=(Critical&&) = default;
+        virtual ~Critical() = default;
+
+        /** @brief Constructor to put object onto bus at a dbus path.
+         *  @param[in] bus - Bus to attach to.
+         *  @param[in] path - Path to attach at.
+         */
+        Critical(bus::bus& bus, const char* path);
+
+
+
+
+        /** Get value of CriticalHigh */
+        virtual int64_t criticalHigh() const;
+        /** Set value of CriticalHigh */
+        virtual int64_t criticalHigh(int64_t value);
+        /** Get value of CriticalLow */
+        virtual int64_t criticalLow() const;
+        /** Set value of CriticalLow */
+        virtual int64_t criticalLow(int64_t value);
+        /** Get value of CriticalAlarmHigh */
+        virtual bool criticalAlarmHigh() const;
+        /** Set value of CriticalAlarmHigh */
+        virtual bool criticalAlarmHigh(bool value);
+        /** Get value of CriticalAlarmLow */
+        virtual bool criticalAlarmLow() const;
+        /** Set value of CriticalAlarmLow */
+        virtual bool criticalAlarmLow(bool value);
+
+
+    private:
+
+        /** @brief sd-bus callback for get-property 'CriticalHigh' */
+        static int _callback_get_CriticalHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'CriticalHigh' */
+        static int _callback_set_CriticalHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'CriticalLow' */
+        static int _callback_get_CriticalLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'CriticalLow' */
+        static int _callback_set_CriticalLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'CriticalAlarmHigh' */
+        static int _callback_get_CriticalAlarmHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'CriticalAlarmHigh' */
+        static int _callback_set_CriticalAlarmHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'CriticalAlarmLow' */
+        static int _callback_get_CriticalAlarmLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'CriticalAlarmLow' */
+        static int _callback_set_CriticalAlarmLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+
+        static constexpr auto _interface = "xyz.openbmc_project.Sensor.Threshold.Critical";
+        static const vtable::vtable_t _vtable[];
+        sdbusplus::server::interface::interface
+                _xyz_openbmc_project_Sensor_Threshold_Critical_interface;
+
+        int64_t _criticalHigh{};
+        int64_t _criticalLow{};
+        bool _criticalAlarmHigh{};
+        bool _criticalAlarmLow{};
+
+};
+
+
+} // namespace server
+} // namespace Threshold
+} // namespace Sensor
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace sdbusplus
+
diff --git a/xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp b/xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp
new file mode 100644
index 0000000..e560223
--- /dev/null
+++ b/xyz/openbmc_project/Sensor/Threshold/Warning/server.hpp
@@ -0,0 +1,122 @@
+#pragma once
+#include <tuple>
+#include <systemd/sd-bus.h>
+#include <sdbusplus/server.hpp>
+
+namespace sdbusplus
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace Sensor
+{
+namespace Threshold
+{
+namespace server
+{
+
+class Warning
+{
+    public:
+        /* Define all of the basic class operations:
+         *     Not allowed:
+         *         - Default constructor to avoid nullptrs.
+         *         - Copy operations due to internal unique_ptr.
+         *     Allowed:
+         *         - Move operations.
+         *         - Destructor.
+         */
+        Warning() = delete;
+        Warning(const Warning&) = delete;
+        Warning& operator=(const Warning&) = delete;
+        Warning(Warning&&) = default;
+        Warning& operator=(Warning&&) = default;
+        virtual ~Warning() = default;
+
+        /** @brief Constructor to put object onto bus at a dbus path.
+         *  @param[in] bus - Bus to attach to.
+         *  @param[in] path - Path to attach at.
+         */
+        Warning(bus::bus& bus, const char* path);
+
+
+
+
+        /** Get value of WarningHigh */
+        virtual int64_t warningHigh() const;
+        /** Set value of WarningHigh */
+        virtual int64_t warningHigh(int64_t value);
+        /** Get value of WarningLow */
+        virtual int64_t warningLow() const;
+        /** Set value of WarningLow */
+        virtual int64_t warningLow(int64_t value);
+        /** Get value of WarningAlarmHigh */
+        virtual bool warningAlarmHigh() const;
+        /** Set value of WarningAlarmHigh */
+        virtual bool warningAlarmHigh(bool value);
+        /** Get value of WarningAlarmLow */
+        virtual bool warningAlarmLow() const;
+        /** Set value of WarningAlarmLow */
+        virtual bool warningAlarmLow(bool value);
+
+
+    private:
+
+        /** @brief sd-bus callback for get-property 'WarningHigh' */
+        static int _callback_get_WarningHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'WarningHigh' */
+        static int _callback_set_WarningHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'WarningLow' */
+        static int _callback_get_WarningLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'WarningLow' */
+        static int _callback_set_WarningLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'WarningAlarmHigh' */
+        static int _callback_get_WarningAlarmHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'WarningAlarmHigh' */
+        static int _callback_set_WarningAlarmHigh(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+        /** @brief sd-bus callback for get-property 'WarningAlarmLow' */
+        static int _callback_get_WarningAlarmLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+        /** @brief sd-bus callback for set-property 'WarningAlarmLow' */
+        static int _callback_set_WarningAlarmLow(
+            sd_bus*, const char*, const char*, const char*,
+            sd_bus_message*, void*, sd_bus_error*);
+
+
+        static constexpr auto _interface = "xyz.openbmc_project.Sensor.Threshold.Warning";
+        static const vtable::vtable_t _vtable[];
+        sdbusplus::server::interface::interface
+                _xyz_openbmc_project_Sensor_Threshold_Warning_interface;
+
+        int64_t _warningHigh{};
+        int64_t _warningLow{};
+        bool _warningAlarmHigh{};
+        bool _warningAlarmLow{};
+
+};
+
+
+} // namespace server
+} // namespace Threshold
+} // namespace Sensor
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace sdbusplus
+