From 5cfdf94fdf0ac1167c9337cec95ba4d932ad40f7 Mon Sep 17 00:00:00 2001 From: Matt Spinler Date: Mon, 10 Apr 2017 14:25:47 -0500 Subject: Fan control: Add getService() utility function This function returns the service name from the mapper based on the dbus path and interface passed in. Eventually, getInvService can be removed and this call can be used instead. Change-Id: Ieb090a9b650803e8cfaf2f24143f25a4bbf1cd23 Signed-off-by: Matt Spinler --- utility.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'utility.cpp') diff --git a/utility.cpp b/utility.cpp index db88712..2cfeac8 100644 --- a/utility.cpp +++ b/utility.cpp @@ -20,42 +20,53 @@ namespace phosphor { namespace fan { -namespace presence +namespace util { +using namespace std::string_literals; + //TODO Should get these from phosphor-objmgr config.h 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"; //TODO Should get these from phosphor-inventory-manager config.h -constexpr auto INVENTORY_PATH = "/xyz/openbmc_project/inventory"; -constexpr auto INVENTORY_INTF = "xyz.openbmc_project.Inventory.Manager"; +const auto INVENTORY_PATH = "/xyz/openbmc_project/inventory"s; +const auto INVENTORY_INTF = "xyz.openbmc_project.Inventory.Manager"s; std::string getInvService(sdbusplus::bus::bus& bus) +{ + return getService(INVENTORY_PATH, INVENTORY_INTF, bus); +} + + +std::string getService(const std::string& path, + const std::string& interface, + sdbusplus::bus::bus& bus) { auto mapperCall = bus.new_method_call(MAPPER_BUSNAME, MAPPER_PATH, MAPPER_INTERFACE, "GetObject"); - mapperCall.append(INVENTORY_PATH); - mapperCall.append(std::vector({INVENTORY_INTF})); + mapperCall.append(path); + mapperCall.append(std::vector({interface})); auto mapperResponseMsg = bus.call(mapperCall); if (mapperResponseMsg.is_method_error()) { throw std::runtime_error( - "Error in mapper call to get inventory service name"); + "Error in mapper call to get service name"); } + std::map> mapperResponse; mapperResponseMsg.read(mapperResponse); if (mapperResponse.empty()) { throw std::runtime_error( - "Error in mapper response for inventory service name"); + "Error in mapper response for getting service name"); } return mapperResponse.begin()->first; -- cgit v1.2.1