1 #pragma once 2 3 #include <sdbusplus/bus.hpp> 4 #include <sdbusplus/sdbus.hpp> 5 6 #include <chrono> 7 8 namespace phosphor::power::regulators::control 9 { 10 11 constexpr auto busName = "xyz.openbmc_project.Power.Regulators"; 12 constexpr auto objPath = "/xyz/openbmc_project/power/regulators/manager"; 13 constexpr auto interface = "xyz.openbmc_project.Power.Regulators.Manager"; 14 15 /** 16 * @brief Call a dbus method 17 * @param[in] method - Method name to call 18 * @param[in] args - Any needed arguments to the method 19 * 20 * @return Response message from the method call 21 */ 22 template <typename... Args> callMethod(const std::string & method,Args &&...args)23auto callMethod(const std::string& method, Args&&... args) 24 { 25 auto bus = sdbusplus::bus::new_default(); 26 auto reqMsg = 27 bus.new_method_call(busName, objPath, interface, method.c_str()); 28 reqMsg.append(std::forward<Args>(args)...); 29 30 // Set timeout to 6 minutes; some regulator methods take over 5 minutes 31 using namespace std::chrono_literals; 32 sdbusplus::SdBusDuration timeout{6min}; 33 return bus.call(reqMsg, timeout); 34 } 35 36 } // namespace phosphor::power::regulators::control 37