25 #if HAVE_LIBUDEV_H || defined(SDL_JOYSTICK_LINUX)
28 SDL_EVDEV_GuessDeviceClass(
unsigned long bitmask_ev[NBITS(EV_MAX)],
29 unsigned long bitmask_abs[NBITS(ABS_MAX)],
30 unsigned long bitmask_key[NBITS(KEY_MAX)],
31 unsigned long bitmask_rel[NBITS(REL_MAX)])
34 unsigned long keyboard_mask;
37 if (test_bit(EV_ABS, bitmask_ev) &&
38 test_bit(ABS_X, bitmask_abs) &&
39 test_bit(ABS_Y, bitmask_abs) &&
40 test_bit(ABS_Z, bitmask_abs) &&
41 !test_bit(EV_KEY, bitmask_ev)) {
42 return SDL_UDEV_DEVICE_ACCELEROMETER;
46 if (test_bit(EV_ABS, bitmask_ev) &&
47 test_bit(ABS_RX, bitmask_abs) &&
48 test_bit(ABS_RY, bitmask_abs) &&
49 test_bit(ABS_RZ, bitmask_abs) &&
50 !test_bit(EV_KEY, bitmask_ev)) {
51 return SDL_UDEV_DEVICE_ACCELEROMETER;
54 if (test_bit(EV_ABS, bitmask_ev) &&
55 test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs)) {
56 if (test_bit(BTN_STYLUS, bitmask_key) || test_bit(BTN_TOOL_PEN, bitmask_key)) {
58 }
else if (test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key)) {
60 }
else if (test_bit(BTN_MOUSE, bitmask_key)) {
61 devclass |= SDL_UDEV_DEVICE_MOUSE;
62 }
else if (test_bit(BTN_TOUCH, bitmask_key)) {
65 devclass |= SDL_UDEV_DEVICE_TOUCHSCREEN;
68 if (test_bit(BTN_TRIGGER, bitmask_key) ||
69 test_bit(BTN_A, bitmask_key) ||
70 test_bit(BTN_1, bitmask_key) ||
71 test_bit(ABS_RX, bitmask_abs) ||
72 test_bit(ABS_RY, bitmask_abs) ||
73 test_bit(ABS_RZ, bitmask_abs) ||
74 test_bit(ABS_THROTTLE, bitmask_abs) ||
75 test_bit(ABS_RUDDER, bitmask_abs) ||
76 test_bit(ABS_WHEEL, bitmask_abs) ||
77 test_bit(ABS_GAS, bitmask_abs) ||
78 test_bit(ABS_BRAKE, bitmask_abs)) {
79 devclass |= SDL_UDEV_DEVICE_JOYSTICK;
83 if (test_bit(EV_REL, bitmask_ev) &&
84 test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) &&
85 test_bit(BTN_MOUSE, bitmask_key)) {
86 devclass |= SDL_UDEV_DEVICE_MOUSE;
91 keyboard_mask = 0xFFFFFFFE;
92 if ((bitmask_key[0] & keyboard_mask) != 0)
93 devclass |= SDL_UDEV_DEVICE_KEYBOARD;