diff options
Diffstat (limited to 'utility.hpp')
-rw-r--r-- | utility.hpp | 48 |
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; +} + } } } |