|  | #pragma once | 
|  | #include <sdbusplus/server.hpp> | 
|  |  | 
|  | #include <unordered_map> | 
|  | #include <vector> | 
|  | namespace phosphor | 
|  | { | 
|  | namespace led | 
|  | { | 
|  | namespace utils | 
|  | { | 
|  | static constexpr auto mapperBusName = "xyz.openbmc_project.ObjectMapper"; | 
|  | static constexpr auto mapperObjPath = "/xyz/openbmc_project/object_mapper"; | 
|  | static constexpr auto mapperIntf = "xyz.openbmc_project.ObjectMapper"; | 
|  | static constexpr auto proIntf = "org.freedesktop.DBus.Properties"; | 
|  |  | 
|  | // The value of the property(type: variant, contains some basic types) | 
|  | // Eg: uint8_t : dutyOn, uint16_t : Period, std::string : Name, | 
|  | // std::vector<std::string> : endpoints, bool : Functional | 
|  | using PropertyValue = std::variant<uint8_t, uint16_t, std::string, | 
|  | std::vector<std::string>, bool>; | 
|  |  | 
|  | // The name of the property | 
|  | using DbusProperty = std::string; | 
|  |  | 
|  | // The Map to constructs all properties values of the interface | 
|  | using PropertyMap = std::unordered_map<DbusProperty, PropertyValue>; | 
|  |  | 
|  | /** | 
|  | *  @class DBusHandler | 
|  | * | 
|  | *  Wrapper class to handle the D-Bus calls | 
|  | * | 
|  | *  This class contains the APIs to handle the D-Bus calls. | 
|  | */ | 
|  | class DBusHandler | 
|  | { | 
|  | public: | 
|  | /** @brief Get the bus connection. */ | 
|  | static auto& getBus() | 
|  | { | 
|  | static auto bus = sdbusplus::bus::new_default(); | 
|  | return bus; | 
|  | } | 
|  |  | 
|  | /** | 
|  | *  @brief Get service name by the path and interface of the DBus. | 
|  | * | 
|  | *  @param[in] path      -  D-Bus object path | 
|  | *  @param[in] interface -  D-Bus Interface | 
|  | * | 
|  | *  @return std::string  -  the D-Bus service name | 
|  | * | 
|  | */ | 
|  | static std::string getService(const std::string& path, | 
|  | const std::string& interface); | 
|  |  | 
|  | /** @brief Get All properties | 
|  | * | 
|  | *  @param[in] objectPath       -   D-Bus object path | 
|  | *  @param[in] interface        -   D-Bus interface | 
|  | * | 
|  | *  @return The Map to constructs all properties values | 
|  | * | 
|  | *  @throw sdbusplus::exception_t when it fails | 
|  | */ | 
|  | static PropertyMap getAllProperties(const std::string& objectPath, | 
|  | const std::string& interface); | 
|  |  | 
|  | /** @brief Get property(type: variant) | 
|  | * | 
|  | *  @param[in] objectPath       -   D-Bus object path | 
|  | *  @param[in] interface        -   D-Bus interface | 
|  | *  @param[in] propertyName     -   D-Bus property name | 
|  | * | 
|  | *  @return The value of the property(type: variant) | 
|  | * | 
|  | *  @throw sdbusplus::exception_t when it fails | 
|  | */ | 
|  | static PropertyValue getProperty(const std::string& objectPath, | 
|  | const std::string& interface, | 
|  | const std::string& propertyName); | 
|  |  | 
|  | /** @brief Set D-Bus property | 
|  | * | 
|  | *  @param[in] objectPath       -   D-Bus object path | 
|  | *  @param[in] interface        -   D-Bus interface | 
|  | *  @param[in] propertyName     -   D-Bus property name | 
|  | *  @param[in] value            -   The value to be set | 
|  | * | 
|  | *  @throw sdbusplus::exception_t when it fails | 
|  | */ | 
|  | static void setProperty(const std::string& objectPath, | 
|  | const std::string& interface, | 
|  | const std::string& propertyName, | 
|  | const PropertyValue& value); | 
|  |  | 
|  | /** @brief Get sub tree paths by the path and interface of the DBus. | 
|  | * | 
|  | *  @param[in]  objectPath   -  D-Bus object path | 
|  | *  @param[in]  interface    -  D-Bus object interface | 
|  | * | 
|  | *  @return std::vector<std::string> vector of subtree paths | 
|  | */ | 
|  | static std::vector<std::string> getSubTreePaths( | 
|  | const std::string& objectPath, const std::string& interface); | 
|  | }; | 
|  |  | 
|  | } // namespace utils | 
|  | } // namespace led | 
|  | } // namespace phosphor |