#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <libevdev/libevdev.h>
void print_event(struct input_event *ev) { if (ev->type == EV_ABS) { switch (ev->code) { case ABS_X: printf("Left stick X: %d\n", ev->value); break; case ABS_Y: printf("Left stick Y: %d\n", ev->value); break; case ABS_RX: printf("Right stick X: %d\n", ev->value); break; case ABS_RY: printf("Right stick Y: %d\n", ev->value); break; case ABS_Z: printf("Left trigger: %d\n", ev->value); break; case ABS_RZ: printf("Right trigger: %d\n", ev->value); break; } } else if (ev->type == EV_KEY) { switch (ev->code) { case BTN_A: printf("Cross button: %s\n", ev->value ? "pressed" : "released"); break; case BTN_B: printf("Circle button: %s\n", ev->value ? "pressed" : "released"); break; case BTN_X: printf("Square button: %s\n", ev->value ? "pressed" : "released"); break; case BTN_Y: printf("Triangle button: %s\n", ev->value ? "pressed" : "released"); break; } } }
int main() { struct libevdev *dev = NULL; int fd = open("/dev/input/eventX", O_RDONLY | O_NONBLOCK); if (fd < 0) { perror("Failed to open device"); return 1; }
int rc = libevdev_new_from_fd(fd, &dev); if (rc < 0) { fprintf(stderr, "Failed to init libevdev (%s)\n", strerror(-rc)); return 1; }
printf("Input device name: \"%s\"\n", libevdev_get_name(dev));
while (1) { struct input_event ev; rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev); if (rc == 0) { print_event(&ev); } else if (rc != -EAGAIN) { fprintf(stderr, "Failed to read next event (%s)\n", strerror(-rc)); break; }
usleep(10000); }
libevdev_free(dev); close(fd); return 0; }
|