A demonstration of how to use EvdevInput without Poller.
#include <iostream>
#include <thread>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/exception/errinfo_errno.hpp>
#include <boost/program_options.hpp>
#include <csignal>
std::sig_atomic_t quit = 0;
void signalHandler(int) {
quit = 1;
}
namespace duds {
namespace os {
namespace linux {
std::ostream &
operator << (std::ostream &os, EventTypeCode etc) {
static const std::string unknown("Unknown");
os << etc.typeName(unknown) << ':' << etc.codeName(unknown);
return os;
}
} } }
};
std::cout << "Event " << etc << ", value " << val << std::endl;
}
int main(int argc, char *argv[])
try {
std::string devpath;
int delay;
{
boost::program_options::options_description optdesc(
"Options for EvdevInput test"
);
optdesc.add_options()
(
"help,h",
"Show this help message"
)
(
"dev,i",
boost::program_options::value<std::string>(&devpath),
"Specify input device file"
)
;
boost::program_options::positional_options_description posoptdesc;
posoptdesc.add("dev", 1);
boost::program_options::variables_map vm;
boost::program_options::store(
boost::program_options::command_line_parser(argc, argv).
options(optdesc).positional(posoptdesc).run(),
vm
);
boost::program_options::notify(vm);
if (vm.count("help")) {
std::cout << "Test program for EvdevInput class\n" << argv[0] <<
" [options]\n" << optdesc << std::endl;
return 0;
}
}
try {
std::cerr << "Failed to open device file " << devpath << std::endl;
return 2;
std::cerr << "Failed to initalize libevdev, error code " <<
*boost::get_error_info<boost::errinfo_errno>(eie) << std::endl;
return 3;
}
int cnt = 0;
for (auto event : events) {
inhan->connect(event, &show);
std::cout << "Found event " << event << std::endl;
++cnt;
}
}
std::cout << "Found " << cnt << " events" << std::endl;
if (!cnt) {
return 0;
}
std::signal(SIGINT, &signalHandler);
std::signal(SIGTERM, &signalHandler);
while (!quit) {
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(16));
}
}
std::cout << "Bye!" << std::endl;
return 0;
} catch (...) {
std::cerr << "Program failed in main(): " <<
boost::current_exception_diagnostic_information() << std::endl;
return 1;
}