Program Listing for File evdevtest.cpp
↰ Return to documentation for file (include/tests/INPUT_TESTS/evdevtest.cpp
)
#include "LINUX_INPUT.hpp"
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
#include <sys/syscall.h>
#include <linux/futex.h>
#include <sys/mman.h>
#include <chrono>
int main(int argc, char* argv[])
{
std::string posRoot="/dev/input/event";
int evdevEventFD;
libevdev* dev = nullptr;
for(int i=14;i>0;--i){
std::string pos = posRoot + std::to_string(i);
(evdevEventFD) = open(pos.c_str(), O_RDONLY);// | O_NONBLOCK);
std::cout << pos << std::endl;
if(libevdev_new_from_fd((evdevEventFD), &dev) < 0){
std::cout<<"init failed" << std::endl;
close((evdevEventFD));
continue;
}
if(libevdev_has_event_code(dev, EV_REL, REL_X) > 0){
break;
}
else{
std::cout<<"not a mouse" << std::endl;
libevdev_free(dev);
dev = nullptr;
close(evdevEventFD);
}
}
input_event ev;
while(true){
int rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_BLOCKING, &ev);
if(rc == LIBEVDEV_READ_STATUS_SUCCESS){
auto code = ev.code;
auto time = ev.time;
auto type = ev.type;
auto value = ev.value;
std::cout << "evdev IO Result: " << std::endl;
std::cout << "code: " << code << std::endl;
std::cout << "time: " << time.tv_usec << std::endl;
std::cout << "type: " << type << std::endl;
std::cout << "value: " << value << std::endl;
std::cout<< "WAKEUP CALL" << std::endl;
}
else{
std::cout << "Failed" << rc << std::endl;
}
}
libevdev_free(dev);
close(evdevEventFD);
return 0;
}