summaryrefslogtreecommitdiffstats
path: root/monitor.cpp
diff options
context:
space:
mode:
authorVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2017-04-04 14:07:25 +0530
committerVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2017-04-27 14:42:05 +0530
commit0b95603eb48a72234b8fc618dcc4db13b6f4d079 (patch)
tree627c1ce7766aa3ace52aa6782bbf96fb4cdc9028 /monitor.cpp
parent4902a10c9fabcdf5e1f2868f28cba2d571d55f03 (diff)
downloadphosphor-gpio-monitor-0b95603eb48a72234b8fc618dcc4db13b6f4d079.tar.gz
phosphor-gpio-monitor-0b95603eb48a72234b8fc618dcc4db13b6f4d079.zip
Add sd_event loop and callback handler
Change-Id: I032d1156be2b8082fdf347a60ec883a9bc0038ae Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
Diffstat (limited to 'monitor.cpp')
-rw-r--r--monitor.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/monitor.cpp b/monitor.cpp
index 29d9d6d..5428c09 100644
--- a/monitor.cpp
+++ b/monitor.cpp
@@ -22,6 +22,8 @@ namespace phosphor
namespace gpio
{
+using namespace phosphor::logging;
+
// Populate the file descriptor for passed in device
int Monitor::openDevice()
{
@@ -37,5 +39,30 @@ int Monitor::openDevice()
return fd;
}
+// Attaches the FD to event loop and registers the callback handler
+void Monitor::registerCallback()
+{
+ decltype(eventSource.get()) sourcePtr = nullptr;
+ auto r = sd_event_add_io(event.get(), &sourcePtr, (fd)(),
+ EPOLLIN, callbackHandler, this);
+ eventSource.reset(sourcePtr);
+
+ if (r < 0)
+ {
+ log<level::ERR>("Failed to register callback handler",
+ entry("ERROR=%s", strerror(-r)));
+ throw std::runtime_error("Failed to register callback handler");
+ }
+}
+
+// Callback handler when there is an activity on the FD
+int Monitor::processEvents(sd_event_source* es, int fd,
+ uint32_t revents, void* userData)
+{
+ // TODO. This calls into starting configured target
+ log<level::INFO>("Callback handler called");
+ return 0;
+}
+
} // namespace gpio
} // namespace phosphor
OpenPOWER on IntegriCloud