blob: 5382fddcc9f3dd3b9b64bccd77bbcae000eb19be [file] [log] [blame]
Deepak Kodihalli18aa0442017-07-21 07:07:09 -05001#pragma once
2
Patrick Venture0b02be92018-08-31 11:55:55 -07003#include <sdbusplus/bus.hpp>
Deepak Kodihalli18aa0442017-07-21 07:07:09 -05004#include <string>
Deepak Kodihalli13791bd2017-08-28 06:50:51 -05005#include <tuple>
Deepak Kodihalli18aa0442017-07-21 07:07:09 -05006
7namespace settings
8{
9
10using Path = std::string;
11using Service = std::string;
12using Interface = std::string;
13
14constexpr auto root = "/";
15
16/** @class Objects
17 * @brief Fetch paths of settings d-bus objects of interest, upon construction
18 */
19struct Objects
20{
Patrick Venture0b02be92018-08-31 11:55:55 -070021 public:
22 /** @brief Constructor - fetch settings objects
23 *
24 * @param[in] bus - The Dbus bus object
25 * @param[in] filter - A vector of settings interfaces the caller is
26 * interested in.
27 */
28 Objects(sdbusplus::bus::bus& bus, const std::vector<Interface>& filter);
29 Objects(const Objects&) = default;
30 Objects& operator=(const Objects&) = default;
31 Objects(Objects&&) = delete;
32 Objects& operator=(Objects&&) = delete;
33 ~Objects() = default;
Deepak Kodihalli18aa0442017-07-21 07:07:09 -050034
Patrick Venture0b02be92018-08-31 11:55:55 -070035 /** @brief Fetch d-bus service, given a path and an interface. The
36 * service can't be cached because mapper returns unique
37 * service names.
38 *
39 * @param[in] path - The Dbus object
40 * @param[in] interface - The Dbus interface
41 *
42 * @return std::string - the dbus service
43 */
44 Service service(const Path& path, const Interface& interface) const;
Deepak Kodihalli18aa0442017-07-21 07:07:09 -050045
Patrick Venture0b02be92018-08-31 11:55:55 -070046 /** @brief map of settings objects */
47 std::map<Interface, std::vector<Path>> map;
Deepak Kodihalli18aa0442017-07-21 07:07:09 -050048
Patrick Venture0b02be92018-08-31 11:55:55 -070049 /** @brief The Dbus bus object */
50 sdbusplus::bus::bus& bus;
Deepak Kodihalli18aa0442017-07-21 07:07:09 -050051};
52
Deepak Kodihalli13791bd2017-08-28 06:50:51 -050053namespace boot
54{
55
56using OneTimeEnabled = bool;
57
58/** @brief Return the one-time boot setting object path if enabled, otherwise
59 * the regular boot setting object path.
60 *
61 * @param[in] objects - const reference to an object of type Objects
62 * @param[in] iface - boot setting interface
63 *
64 * @return A tuple - boot setting object path, a bool indicating whether the
65 * returned path corresponds to the one time boot setting.
66 */
67std::tuple<Path, OneTimeEnabled> setting(const Objects& objects,
68 const Interface& iface);
69
70} // namespace boot
71
Deepak Kodihalli18aa0442017-07-21 07:07:09 -050072} // namespace settings