118aa044eSDeepak Kodihalli #pragma once 218aa044eSDeepak Kodihalli 3*0b02be92SPatrick Venture #include <sdbusplus/bus.hpp> 418aa044eSDeepak Kodihalli #include <string> 513791bd5SDeepak Kodihalli #include <tuple> 618aa044eSDeepak Kodihalli 718aa044eSDeepak Kodihalli namespace settings 818aa044eSDeepak Kodihalli { 918aa044eSDeepak Kodihalli 1018aa044eSDeepak Kodihalli using Path = std::string; 1118aa044eSDeepak Kodihalli using Service = std::string; 1218aa044eSDeepak Kodihalli using Interface = std::string; 1318aa044eSDeepak Kodihalli 1418aa044eSDeepak Kodihalli constexpr auto root = "/"; 1518aa044eSDeepak Kodihalli 1618aa044eSDeepak Kodihalli /** @class Objects 1718aa044eSDeepak Kodihalli * @brief Fetch paths of settings d-bus objects of interest, upon construction 1818aa044eSDeepak Kodihalli */ 1918aa044eSDeepak Kodihalli struct Objects 2018aa044eSDeepak Kodihalli { 2118aa044eSDeepak Kodihalli public: 2218aa044eSDeepak Kodihalli /** @brief Constructor - fetch settings objects 2318aa044eSDeepak Kodihalli * 2418aa044eSDeepak Kodihalli * @param[in] bus - The Dbus bus object 2518aa044eSDeepak Kodihalli * @param[in] filter - A vector of settings interfaces the caller is 2618aa044eSDeepak Kodihalli * interested in. 2718aa044eSDeepak Kodihalli */ 2818aa044eSDeepak Kodihalli Objects(sdbusplus::bus::bus& bus, const std::vector<Interface>& filter); 2918aa044eSDeepak Kodihalli Objects(const Objects&) = default; 3018aa044eSDeepak Kodihalli Objects& operator=(const Objects&) = default; 3118aa044eSDeepak Kodihalli Objects(Objects&&) = delete; 3218aa044eSDeepak Kodihalli Objects& operator=(Objects&&) = delete; 3318aa044eSDeepak Kodihalli ~Objects() = default; 3418aa044eSDeepak Kodihalli 3518aa044eSDeepak Kodihalli /** @brief Fetch d-bus service, given a path and an interface. The 3618aa044eSDeepak Kodihalli * service can't be cached because mapper returns unique 3718aa044eSDeepak Kodihalli * service names. 3818aa044eSDeepak Kodihalli * 3918aa044eSDeepak Kodihalli * @param[in] path - The Dbus object 4018aa044eSDeepak Kodihalli * @param[in] interface - The Dbus interface 4118aa044eSDeepak Kodihalli * 4218aa044eSDeepak Kodihalli * @return std::string - the dbus service 4318aa044eSDeepak Kodihalli */ 4418aa044eSDeepak Kodihalli Service service(const Path& path, const Interface& interface) const; 4518aa044eSDeepak Kodihalli 4618aa044eSDeepak Kodihalli /** @brief map of settings objects */ 47e602709dSDeepak Kodihalli std::map<Interface, std::vector<Path>> map; 4818aa044eSDeepak Kodihalli 4918aa044eSDeepak Kodihalli /** @brief The Dbus bus object */ 5018aa044eSDeepak Kodihalli sdbusplus::bus::bus& bus; 5118aa044eSDeepak Kodihalli }; 5218aa044eSDeepak Kodihalli 5313791bd5SDeepak Kodihalli namespace boot 5413791bd5SDeepak Kodihalli { 5513791bd5SDeepak Kodihalli 5613791bd5SDeepak Kodihalli using OneTimeEnabled = bool; 5713791bd5SDeepak Kodihalli 5813791bd5SDeepak Kodihalli /** @brief Return the one-time boot setting object path if enabled, otherwise 5913791bd5SDeepak Kodihalli * the regular boot setting object path. 6013791bd5SDeepak Kodihalli * 6113791bd5SDeepak Kodihalli * @param[in] objects - const reference to an object of type Objects 6213791bd5SDeepak Kodihalli * @param[in] iface - boot setting interface 6313791bd5SDeepak Kodihalli * 6413791bd5SDeepak Kodihalli * @return A tuple - boot setting object path, a bool indicating whether the 6513791bd5SDeepak Kodihalli * returned path corresponds to the one time boot setting. 6613791bd5SDeepak Kodihalli */ 6713791bd5SDeepak Kodihalli std::tuple<Path, OneTimeEnabled> setting(const Objects& objects, 6813791bd5SDeepak Kodihalli const Interface& iface); 6913791bd5SDeepak Kodihalli 7013791bd5SDeepak Kodihalli } // namespace boot 7113791bd5SDeepak Kodihalli 7218aa044eSDeepak Kodihalli } // namespace settings 73