summaryrefslogtreecommitdiffstats
path: root/utility.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'utility.hpp')
-rw-r--r--utility.hpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/utility.hpp b/utility.hpp
index 32d055e..bb23dea 100644
--- a/utility.hpp
+++ b/utility.hpp
@@ -20,6 +20,17 @@ namespace fan
namespace util
{
+constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
+constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
+constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
+
+constexpr auto INVENTORY_PATH = "/xyz/openbmc_project/inventory";
+constexpr auto INVENTORY_INTF = "xyz.openbmc_project.Inventory.Manager";
+
+constexpr auto OPERATIONAL_STATUS_INTF =
+ "xyz.openbmc_project.State.Decorator.OperationalStatus";
+constexpr auto FUNCTIONAL_PROPERTY = "Functional";
+
class FileDescriptor
{
public:
@@ -90,6 +101,43 @@ std::string getService(const std::string& path,
const std::string& interface,
sdbusplus::bus::bus& bus);
+/**
+ * @brief Get the object map for creating or updating an object property
+ *
+ * @param[in] path - The dbus object path name
+ * @param[in] intf - The dbus interface
+ * @param[in] prop - The dbus property
+ * @param[in] value - The property value
+ *
+ * @return - The full object path containing the property value
+ */
+template <typename T>
+auto getObjMap(const std::string& path,
+ const std::string& intf,
+ const std::string& prop,
+ const T& value)
+{
+ using Property = std::string;
+ using Value = sdbusplus::message::variant<T>;
+ using PropertyMap = std::map<Property, Value>;
+
+ using Interface = std::string;
+ using InterfaceMap = std::map<Interface, PropertyMap>;
+
+ using Object = sdbusplus::message::object_path;
+ using ObjectMap = std::map<Object, InterfaceMap>;
+
+ ObjectMap objectMap;
+ InterfaceMap interfaceMap;
+ PropertyMap propertyMap;
+
+ propertyMap.emplace(prop, value);
+ interfaceMap.emplace(intf, std::move(propertyMap));
+ objectMap.emplace(path, std::move(interfaceMap));
+
+ return objectMap;
+}
+
}
}
}
OpenPOWER on IntegriCloud