xref: /openbmc/dbus-sensors/src/NotifyWatch.hpp (revision ca8c7e98687da407fbab5dcd20cfe892928928ae)
1*ca8c7e98SJagpal Singh Gill #pragma once
2*ca8c7e98SJagpal Singh Gill 
3*ca8c7e98SJagpal Singh Gill #include <sdbusplus/async.hpp>
4*ca8c7e98SJagpal Singh Gill 
5*ca8c7e98SJagpal Singh Gill #include <cerrno>
6*ca8c7e98SJagpal Singh Gill #include <cstring>
7*ca8c7e98SJagpal Singh Gill #include <functional>
8*ca8c7e98SJagpal Singh Gill #include <memory>
9*ca8c7e98SJagpal Singh Gill #include <string>
10*ca8c7e98SJagpal Singh Gill 
11*ca8c7e98SJagpal Singh Gill namespace notify_watch
12*ca8c7e98SJagpal Singh Gill {
13*ca8c7e98SJagpal Singh Gill 
14*ca8c7e98SJagpal Singh Gill class NotifyWatch
15*ca8c7e98SJagpal Singh Gill {
16*ca8c7e98SJagpal Singh Gill   public:
17*ca8c7e98SJagpal Singh Gill     using Callback_t = std::function<sdbusplus::async::task<>(std::string)>;
18*ca8c7e98SJagpal Singh Gill 
19*ca8c7e98SJagpal Singh Gill     NotifyWatch() = delete;
20*ca8c7e98SJagpal Singh Gill     explicit NotifyWatch(sdbusplus::async::context& ctx, const std::string& dir,
21*ca8c7e98SJagpal Singh Gill                          Callback_t callback);
22*ca8c7e98SJagpal Singh Gill     ~NotifyWatch();
23*ca8c7e98SJagpal Singh Gill 
24*ca8c7e98SJagpal Singh Gill     /** @brief Asynchronously watch and notify for any changes to dir */
25*ca8c7e98SJagpal Singh Gill     auto readNotifyAsync() -> sdbusplus::async::task<>;
26*ca8c7e98SJagpal Singh Gill 
27*ca8c7e98SJagpal Singh Gill   private:
28*ca8c7e98SJagpal Singh Gill     sdbusplus::async::context& ctx;
29*ca8c7e98SJagpal Singh Gill     Callback_t callback;
30*ca8c7e98SJagpal Singh Gill     int wd = -1;
31*ca8c7e98SJagpal Singh Gill     int fd = -1;
32*ca8c7e98SJagpal Singh Gill     std::unique_ptr<sdbusplus::async::fdio> fdioInstance;
33*ca8c7e98SJagpal Singh Gill };
34*ca8c7e98SJagpal Singh Gill 
35*ca8c7e98SJagpal Singh Gill } // namespace notify_watch
36