blob: b860551bdca8f6575258587b18c04ccc853bce95 [file] [log] [blame]
#pragma once
#include <gpiod.hpp>
#include <sdbusplus/async.hpp>
#include <functional>
#include <memory>
#include <string>
namespace gpio
{
class GPIOInterface
{
public:
using Callback_t = std::function<sdbusplus::async::task<>(bool)>;
GPIOInterface() = delete;
GPIOInterface(sdbusplus::async::context& ctx,
const std::string& consumerName, const std::string& pinName,
bool activeLow, Callback_t updateStateCallback);
/** @brief Start the GPIO Interface */
auto start() -> sdbusplus::async::task<>;
private:
/** @brief Read the gpio state asynchronously */
auto readGPIOAsync() -> sdbusplus::async::task<>;
/** @brief Read the gpio state asynchronously based on gpio event */
auto readGPIOAsyncEvent() -> sdbusplus::async::task<>;
sdbusplus::async::context& ctx;
const std::string& pinName;
Callback_t updateStateCallback;
gpiod::line line;
/** File descriptor based async event handler */
std::unique_ptr<sdbusplus::async::fdio> fdioInstance;
};
} // namespace gpio