1 #pragma once 2 3 #include "common/utils.hpp" 4 5 #include <sdbusplus/server.hpp> 6 #include <xyz/openbmc_project/Inventory/Decorator/LocationCode/server.hpp> 7 8 #include <memory> 9 #include <optional> 10 #include <string> 11 #include <unordered_map> 12 13 namespace pldm 14 { 15 namespace dbus 16 { 17 using ObjectPath = std::string; 18 19 using LocationIntf = 20 sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory:: 21 Decorator::server::LocationCode>; 22 23 /** @class CustomDBus 24 * @brief This is a custom D-Bus object, used to add D-Bus interface and update 25 * the corresponding properties value. 26 */ 27 class CustomDBus 28 { 29 private: 30 CustomDBus() {} 31 32 public: 33 CustomDBus(const CustomDBus&) = delete; 34 CustomDBus(CustomDBus&&) = delete; 35 CustomDBus& operator=(const CustomDBus&) = delete; 36 CustomDBus& operator=(CustomDBus&&) = delete; 37 ~CustomDBus() = default; 38 39 static CustomDBus& getCustomDBus() 40 { 41 static CustomDBus customDBus; 42 return customDBus; 43 } 44 45 public: 46 /** @brief Set the LocationCode property 47 * 48 * @param[in] path - The object path 49 * 50 * @param[in] value - The value of the LocationCode property 51 */ 52 void setLocationCode(const std::string& path, std::string value); 53 54 /** @brief Get the LocationCode property 55 * 56 * @param[in] path - The object path 57 * 58 * @return std::optional<std::string> - The value of the LocationCode 59 * property 60 */ 61 std::optional<std::string> getLocationCode(const std::string& path) const; 62 63 private: 64 std::unordered_map<ObjectPath, std::unique_ptr<LocationIntf>> location; 65 }; 66 67 } // namespace dbus 68 } // namespace pldm 69