118aa044eSDeepak Kodihalli #pragma once 218aa044eSDeepak Kodihalli 318aa044eSDeepak Kodihalli #include <string> 4*13791bd5SDeepak Kodihalli #include <tuple> 518aa044eSDeepak Kodihalli #include <sdbusplus/bus.hpp> 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 53*13791bd5SDeepak Kodihalli namespace boot 54*13791bd5SDeepak Kodihalli { 55*13791bd5SDeepak Kodihalli 56*13791bd5SDeepak Kodihalli using OneTimeEnabled = bool; 57*13791bd5SDeepak Kodihalli 58*13791bd5SDeepak Kodihalli /** @brief Return the one-time boot setting object path if enabled, otherwise 59*13791bd5SDeepak Kodihalli * the regular boot setting object path. 60*13791bd5SDeepak Kodihalli * 61*13791bd5SDeepak Kodihalli * @param[in] objects - const reference to an object of type Objects 62*13791bd5SDeepak Kodihalli * @param[in] iface - boot setting interface 63*13791bd5SDeepak Kodihalli * 64*13791bd5SDeepak Kodihalli * @return A tuple - boot setting object path, a bool indicating whether the 65*13791bd5SDeepak Kodihalli * returned path corresponds to the one time boot setting. 66*13791bd5SDeepak Kodihalli */ 67*13791bd5SDeepak Kodihalli std::tuple<Path, OneTimeEnabled> setting(const Objects& objects, 68*13791bd5SDeepak Kodihalli const Interface& iface); 69*13791bd5SDeepak Kodihalli 70*13791bd5SDeepak Kodihalli } // namespace boot 71*13791bd5SDeepak Kodihalli 7218aa044eSDeepak Kodihalli } // namespace settings 73