Hello everyone,
First off, I would like to say that I have been using Boost for the past
few years, and have found it very useful. Thanks for all your hard work!
Second, I have a question about making a custom service. I would like to
make a service that triggers a callback when a GPIO pin changes state
and triggers an interrupt (I'm using a Raspberry Pi.) I have (or can
obtain) a file descriptor that can be poll()'d, select()'d, or epoll'd
and which omits high-priority events (POLLPRI, EPOLLPRI, etc.). This
entire use case is pretty Linux-specific, so it doesn't have to be very
portable. What I would like to be able to do is something like this:
// CODE STARTS HERE
#include <iostream>
#include
class gpio_interrupt {
public:
gpio_interrupt(boost::asio::io_service &io_service,
unsigned int number)
{
// Asio magic goes here
}
template <typename Callback>
void async_wait(Callback c)
{
// Asio magic goes here
}
};
static void my_callback(const boost::system::error_code &ec)
{
if (ec)
return;
std::cout << "Pin changed state" << std::endl;
}
int main(int argc, char **argv)
{
boost::asio::io_service io_service;
gpio_interrupt interrupt(io_service, 21);
interrupt.async_wait(my_callback);
io_service.run();
return 0;
}
// CODE ENDS HERE
I've looked a little bit at the Boost.Asio code (in particular the
socket code) to get an idea of how I would do this, but there are so
many different classes and inner classes that I'm not sure where to get
started. Can someone help me? Thanks in advance!
--
Kyle Edwards
Software Developer
20 Corporate Circle | Albany, NY 12203
office 888-4BULLEX | 518.689.2023 | fax 518.689.2034 | web:
www.bullex.com