xref: /openbmc/entity-manager/src/gpio-presence/config_provider.hpp (revision 8c4b1d999a13b27d6edc84cfaff1112a0cc07091)
1*8c4b1d99SAlexander Hansen /*
2*8c4b1d99SAlexander Hansen  * SPDX-FileCopyrightText: Copyright (c) 2022-2024. All rights
3*8c4b1d99SAlexander Hansen  * reserved. SPDX-License-Identifier: Apache-2.0
4*8c4b1d99SAlexander Hansen  */
5*8c4b1d99SAlexander Hansen #pragma once
6*8c4b1d99SAlexander Hansen 
7*8c4b1d99SAlexander Hansen #include <sdbusplus/async/context.hpp>
8*8c4b1d99SAlexander Hansen #include <sdbusplus/async/task.hpp>
9*8c4b1d99SAlexander Hansen 
10*8c4b1d99SAlexander Hansen namespace gpio_presence
11*8c4b1d99SAlexander Hansen {
12*8c4b1d99SAlexander Hansen 
13*8c4b1d99SAlexander Hansen using AddedCallback =
14*8c4b1d99SAlexander Hansen     std::function<void(const sdbusplus::message::object_path&)>;
15*8c4b1d99SAlexander Hansen 
16*8c4b1d99SAlexander Hansen using RemovedCallback =
17*8c4b1d99SAlexander Hansen     std::function<void(const sdbusplus::message::object_path&)>;
18*8c4b1d99SAlexander Hansen 
19*8c4b1d99SAlexander Hansen class ConfigProvider
20*8c4b1d99SAlexander Hansen {
21*8c4b1d99SAlexander Hansen   public:
22*8c4b1d99SAlexander Hansen     explicit ConfigProvider(sdbusplus::async::context& ctx,
23*8c4b1d99SAlexander Hansen                             const std::string& interface);
24*8c4b1d99SAlexander Hansen 
25*8c4b1d99SAlexander Hansen     auto initialize(AddedCallback addConfig, RemovedCallback removeConfig)
26*8c4b1d99SAlexander Hansen         -> sdbusplus::async::task<void>;
27*8c4b1d99SAlexander Hansen 
28*8c4b1d99SAlexander Hansen   private:
29*8c4b1d99SAlexander Hansen     auto getConfig(AddedCallback addConfig) -> sdbusplus::async::task<void>;
30*8c4b1d99SAlexander Hansen 
31*8c4b1d99SAlexander Hansen     auto handleInterfacesAdded(AddedCallback addConfig)
32*8c4b1d99SAlexander Hansen         -> sdbusplus::async::task<void>;
33*8c4b1d99SAlexander Hansen 
34*8c4b1d99SAlexander Hansen     auto handleInterfacesRemoved(RemovedCallback removeConfig)
35*8c4b1d99SAlexander Hansen         -> sdbusplus::async::task<void>;
36*8c4b1d99SAlexander Hansen 
37*8c4b1d99SAlexander Hansen     // name of the dbus configuration interface
38*8c4b1d99SAlexander Hansen     std::string interface;
39*8c4b1d99SAlexander Hansen 
40*8c4b1d99SAlexander Hansen     sdbusplus::async::context& ctx;
41*8c4b1d99SAlexander Hansen };
42*8c4b1d99SAlexander Hansen 
43*8c4b1d99SAlexander Hansen } // namespace gpio_presence
44