1 #pragma once 2 #include "common/utils.hpp" 3 #include "pldmd/handler.hpp" 4 5 namespace pldm 6 { 7 namespace responder 8 { 9 10 namespace platform_config 11 { 12 using namespace pldm::utils; 13 14 static constexpr auto compatibleInterface = 15 "xyz.openbmc_project.Inventory.Decorator.Compatible"; 16 static constexpr auto namesProperty = "Names"; 17 18 using SystemTypeCallback = std::function<void(const std::string&, bool)>; 19 20 class Handler : public CmdHandler 21 { 22 public: Handler(const fs::path sysDirPath={})23 Handler(const fs::path sysDirPath = {}) : sysDirPath(sysDirPath) 24 { 25 systemCompatibleMatchCallBack = 26 std::make_unique<sdbusplus::bus::match_t>( 27 pldm::utils::DBusHandler::getBus(), 28 sdbusplus::bus::match::rules::interfacesAdded() + 29 sdbusplus::bus::match::rules::sender( 30 "xyz.openbmc_project.EntityManager"), 31 std::bind(&Handler::systemCompatibleCallback, this, 32 std::placeholders::_1)); 33 sysTypeCallback = nullptr; 34 } 35 36 /** @brief Interface to get the system type information using Dbus query 37 * 38 * @return - the system type information 39 */ 40 virtual std::optional<std::filesystem::path> getPlatformName(); 41 42 /** @brief D-Bus Interface added signal match for Entity Manager */ 43 void systemCompatibleCallback(sdbusplus::message_t& msg); 44 45 /** @brief Registers the callback from other objects */ 46 void registerSystemTypeCallback(SystemTypeCallback callback); 47 48 private: 49 /** @brief Interface to get the first available directory 50 * from the received list 51 * 52 * @param[in] dirPath - Directory path to search system specific directory 53 * @param[in] dirNames - System names retrieved from remote application 54 * @return - The system type information 55 */ 56 std::optional<std::string> getSysSpecificJsonDir( 57 const fs::path& dirPath, const std::vector<std::string>& dirNames); 58 59 /** @brief system type/model */ 60 std::string systemType; 61 62 /** @brief D-Bus Interface added signal match for Entity Manager */ 63 std::unique_ptr<sdbusplus::bus::match_t> systemCompatibleMatchCallBack; 64 65 /** @brief Registered Callback */ 66 SystemTypeCallback sysTypeCallback; 67 68 /** @brief system specific json file directory path */ 69 fs::path sysDirPath; 70 }; 71 72 } // namespace platform_config 73 74 } // namespace responder 75 76 } // namespace pldm 77