#include "common_utility.hpp" #include "const.hpp" #include #include namespace openpower { namespace vpd { namespace common { namespace utility { using namespace constants; using namespace inventory; using namespace phosphor::logging; std::string getService(sdbusplus::bus_t& bus, const std::string& path, const std::string& interface) { auto mapper = bus.new_method_call(mapperDestination, mapperObjectPath, mapperInterface, "GetObject"); mapper.append(path, std::vector({interface})); std::map> response; try { auto reply = bus.call(mapper); reply.read(response); } catch (const sdbusplus::exception_t& e) { log("D-Bus call exception", entry("OBJPATH=%s", mapperObjectPath), entry("INTERFACE=%s", mapperInterface), entry("EXCEPTION=%s", e.what())); throw std::runtime_error("Service name is not found"); } if (response.empty()) { throw std::runtime_error("Service name response is empty"); } return response.begin()->first; } void callPIM(ObjectMap&& objects) { try { auto bus = sdbusplus::bus::new_default(); auto service = getService(bus, pimPath, pimIntf); auto pimMsg = bus.new_method_call(service.c_str(), pimPath, pimIntf, "Notify"); pimMsg.append(std::move(objects)); auto result = bus.call(pimMsg); if (result.is_method_error()) { std::cerr << "PIM Notify() failed\n"; } } catch (const std::runtime_error& e) { log(e.what()); } } } // namespace utility } // namespace common } // namespace vpd } // namespace openpower