1*18aa044eSDeepak Kodihalli #pragma once 2*18aa044eSDeepak Kodihalli 3*18aa044eSDeepak Kodihalli #include <string> 4*18aa044eSDeepak Kodihalli #include <sdbusplus/bus.hpp> 5*18aa044eSDeepak Kodihalli 6*18aa044eSDeepak Kodihalli namespace settings 7*18aa044eSDeepak Kodihalli { 8*18aa044eSDeepak Kodihalli 9*18aa044eSDeepak Kodihalli using Path = std::string; 10*18aa044eSDeepak Kodihalli using Service = std::string; 11*18aa044eSDeepak Kodihalli using Interface = std::string; 12*18aa044eSDeepak Kodihalli 13*18aa044eSDeepak Kodihalli constexpr auto root = "/"; 14*18aa044eSDeepak Kodihalli 15*18aa044eSDeepak Kodihalli /** @class Objects 16*18aa044eSDeepak Kodihalli * @brief Fetch paths of settings d-bus objects of interest, upon construction 17*18aa044eSDeepak Kodihalli */ 18*18aa044eSDeepak Kodihalli struct Objects 19*18aa044eSDeepak Kodihalli { 20*18aa044eSDeepak Kodihalli public: 21*18aa044eSDeepak Kodihalli /** @brief Constructor - fetch settings objects 22*18aa044eSDeepak Kodihalli * 23*18aa044eSDeepak Kodihalli * @param[in] bus - The Dbus bus object 24*18aa044eSDeepak Kodihalli * @param[in] filter - A vector of settings interfaces the caller is 25*18aa044eSDeepak Kodihalli * interested in. 26*18aa044eSDeepak Kodihalli */ 27*18aa044eSDeepak Kodihalli Objects(sdbusplus::bus::bus& bus, const std::vector<Interface>& filter); 28*18aa044eSDeepak Kodihalli Objects(const Objects&) = default; 29*18aa044eSDeepak Kodihalli Objects& operator=(const Objects&) = default; 30*18aa044eSDeepak Kodihalli Objects(Objects&&) = delete; 31*18aa044eSDeepak Kodihalli Objects& operator=(Objects&&) = delete; 32*18aa044eSDeepak Kodihalli ~Objects() = default; 33*18aa044eSDeepak Kodihalli 34*18aa044eSDeepak Kodihalli /** @brief Fetch d-bus service, given a path and an interface. The 35*18aa044eSDeepak Kodihalli * service can't be cached because mapper returns unique 36*18aa044eSDeepak Kodihalli * service names. 37*18aa044eSDeepak Kodihalli * 38*18aa044eSDeepak Kodihalli * @param[in] path - The Dbus object 39*18aa044eSDeepak Kodihalli * @param[in] interface - The Dbus interface 40*18aa044eSDeepak Kodihalli * 41*18aa044eSDeepak Kodihalli * @return std::string - the dbus service 42*18aa044eSDeepak Kodihalli */ 43*18aa044eSDeepak Kodihalli Service service(const Path& path, const Interface& interface) const; 44*18aa044eSDeepak Kodihalli 45*18aa044eSDeepak Kodihalli // TODO openbmc/openbmc#2058 - This will break when multiple settings, 46*18aa044eSDeepak Kodihalli // or in general multiple objects implement a single setting interface. 47*18aa044eSDeepak Kodihalli // For instance this will break for a 2-blade server, because we'd have 48*18aa044eSDeepak Kodihalli // 2 sets of settings objects. Need to revisit and fix this. 49*18aa044eSDeepak Kodihalli /** @brief map of settings objects */ 50*18aa044eSDeepak Kodihalli std::map<Interface, Path> map; 51*18aa044eSDeepak Kodihalli 52*18aa044eSDeepak Kodihalli /** @brief The Dbus bus object */ 53*18aa044eSDeepak Kodihalli sdbusplus::bus::bus& bus; 54*18aa044eSDeepak Kodihalli }; 55*18aa044eSDeepak Kodihalli 56*18aa044eSDeepak Kodihalli } // namespace settings 57