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;
}