/* See LICENSE file for copyright and license details. */ #include "libgamepad.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__GNUC__) # define LIBGAMEPAD_CONST__ __attribute__((__const__)) #else # define LIBGAMEPAD_CONST__ #endif #define READ_(ARR, I) ((ARR)[(I) / BITSOF(*(ARR))]) #define SHIFT_(ARR, I) ((I) % BITSOF(*(ARR))) #define ELEMSOF(A) (sizeof(A) / sizeof(*(A))) #define BITSOF(T) (8 * sizeof(T)) #define SETBIT(ARR, I) (READ_(ARR, I) |= 1 << SHIFT_(ARR, I)) #define GETBIT(ARR, I) ((READ_(ARR, I) >> SHIFT_(ARR, I)) & 1) struct libgamepad_attachment_monitor { struct udev *udev; struct udev_monitor *monitor; }; struct libgamepad_device_internals { int close_fd; int require_sync; struct libevdev *dev; struct input_absinfo *absinfo; uint8_t *buttons; }; extern const char *libgamepad_button_names__[ #include "button.count" ]; extern const char *libgamepad_absolute_axis_names__[ #include "absolute-axis.count" ]; extern const char *libgamepad_relative_axis_names__[ #include "relative-axis.count" ];