Initial chassis state management code
This is just the basics to get the generated code
compiling and to verify the basic dbus interfaces.
Change-Id: I335964da456d8173e2ce792c6614770da43303b4
Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
diff --git a/xyz.openbmc_project.State.Chassis.cpp b/xyz.openbmc_project.State.Chassis.cpp
new file mode 100644
index 0000000..21c4343
--- /dev/null
+++ b/xyz.openbmc_project.State.Chassis.cpp
@@ -0,0 +1,271 @@
+#include <algorithm>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
+#include <xyz/openbmc_project/State/Chassis/server.hpp>
+
+namespace sdbusplus
+{
+namespace xyz
+{
+namespace openbmc_project
+{
+namespace State
+{
+namespace server
+{
+
+Chassis::Chassis(bus::bus& bus, const char* path)
+ : _xyz_openbmc_project_State_Chassis_interface(
+ bus, path, _interface, _vtable, this)
+{
+}
+
+
+
+auto Chassis::requestedPowerTransition() const ->
+ Transition
+{
+ return _requestedPowerTransition;
+}
+
+int Chassis::_callback_get_RequestedPowerTransition(
+ 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<Chassis*>(context);
+ m.append(convertForMessage(o->requestedPowerTransition()));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+auto Chassis::requestedPowerTransition(Transition value) ->
+ Transition
+{
+ if (_requestedPowerTransition != value)
+ {
+ _requestedPowerTransition = value;
+ _xyz_openbmc_project_State_Chassis_interface.property_changed("RequestedPowerTransition");
+ }
+
+ return _requestedPowerTransition;
+}
+
+int Chassis::_callback_set_RequestedPowerTransition(
+ 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<Chassis*>(context);
+
+ std::string v{};
+ m.read(v);
+ o->requestedPowerTransition(convertTransitionFromString(v));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+namespace details
+{
+namespace Chassis
+{
+static const auto _property_RequestedPowerTransition =
+ utility::tuple_to_array(message::types::type_id<
+ std::string>());
+}
+}
+auto Chassis::currentPowerState() const ->
+ PowerState
+{
+ return _currentPowerState;
+}
+
+int Chassis::_callback_get_CurrentPowerState(
+ 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<Chassis*>(context);
+ m.append(convertForMessage(o->currentPowerState()));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+auto Chassis::currentPowerState(PowerState value) ->
+ PowerState
+{
+ if (_currentPowerState != value)
+ {
+ _currentPowerState = value;
+ _xyz_openbmc_project_State_Chassis_interface.property_changed("CurrentPowerState");
+ }
+
+ return _currentPowerState;
+}
+
+int Chassis::_callback_set_CurrentPowerState(
+ 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<Chassis*>(context);
+
+ std::string v{};
+ m.read(v);
+ o->currentPowerState(convertPowerStateFromString(v));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+namespace details
+{
+namespace Chassis
+{
+static const auto _property_CurrentPowerState =
+ utility::tuple_to_array(message::types::type_id<
+ std::string>());
+}
+}
+
+
+namespace
+{
+/** String to enum mapping for Chassis::Transition */
+static const std::tuple<const char*, Chassis::Transition> mappingChassisTransition[] =
+ {
+ std::make_tuple( "xyz.openbmc_project.State.Chassis.Transition.Off", Chassis::Transition::Off ),
+ std::make_tuple( "xyz.openbmc_project.State.Chassis.Transition.On", Chassis::Transition::On ),
+ };
+
+} // anonymous namespace
+
+auto Chassis::convertTransitionFromString(std::string& s) ->
+ Transition
+{
+ auto i = std::find_if(
+ std::begin(mappingChassisTransition),
+ std::end(mappingChassisTransition),
+ [&s](auto& e){ return 0 == strcmp(s.c_str(), std::get<0>(e)); } );
+ if (std::end(mappingChassisTransition) == i)
+ {
+ throw sdbusplus::exception::InvalidEnumString();
+ }
+ else
+ {
+ return std::get<1>(*i);
+ }
+}
+
+std::string convertForMessage(Chassis::Transition v)
+{
+ auto i = std::find_if(
+ std::begin(mappingChassisTransition),
+ std::end(mappingChassisTransition),
+ [v](auto& e){ return v == std::get<1>(e); });
+ return std::get<0>(*i);
+}
+
+namespace
+{
+/** String to enum mapping for Chassis::PowerState */
+static const std::tuple<const char*, Chassis::PowerState> mappingChassisPowerState[] =
+ {
+ std::make_tuple( "xyz.openbmc_project.State.Chassis.PowerState.Off", Chassis::PowerState::Off ),
+ std::make_tuple( "xyz.openbmc_project.State.Chassis.PowerState.On", Chassis::PowerState::On ),
+ };
+
+} // anonymous namespace
+
+auto Chassis::convertPowerStateFromString(std::string& s) ->
+ PowerState
+{
+ auto i = std::find_if(
+ std::begin(mappingChassisPowerState),
+ std::end(mappingChassisPowerState),
+ [&s](auto& e){ return 0 == strcmp(s.c_str(), std::get<0>(e)); } );
+ if (std::end(mappingChassisPowerState) == i)
+ {
+ throw sdbusplus::exception::InvalidEnumString();
+ }
+ else
+ {
+ return std::get<1>(*i);
+ }
+}
+
+std::string convertForMessage(Chassis::PowerState v)
+{
+ auto i = std::find_if(
+ std::begin(mappingChassisPowerState),
+ std::end(mappingChassisPowerState),
+ [v](auto& e){ return v == std::get<1>(e); });
+ return std::get<0>(*i);
+}
+
+const vtable::vtable_t Chassis::_vtable[] = {
+ vtable::start(),
+ vtable::property("RequestedPowerTransition",
+ details::Chassis::_property_RequestedPowerTransition
+ .data(),
+ _callback_get_RequestedPowerTransition,
+ _callback_set_RequestedPowerTransition,
+ vtable::property_::emits_change),
+ vtable::property("CurrentPowerState",
+ details::Chassis::_property_CurrentPowerState
+ .data(),
+ _callback_get_CurrentPowerState,
+ _callback_set_CurrentPowerState,
+ vtable::property_::emits_change),
+ vtable::end()
+};
+
+} // namespace server
+} // namespace State
+} // namespace openbmc_project
+} // namespace xyz
+} // namespace sdbusplus
+