Zbigniew Jędrzejewski-Szmek dd42fc
From 33fc27712a13b7502804a2a3016ce490a89e000d Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek dd42fc
From: Martin Pitt <martin.pitt@ubuntu.com>
Zbigniew Jędrzejewski-Szmek dd42fc
Date: Mon, 10 Mar 2014 08:54:22 +0100
Zbigniew Jędrzejewski-Szmek dd42fc
Subject: [PATCH] input_id: Recognize buttonless joystick types
Zbigniew Jędrzejewski-Szmek dd42fc
Zbigniew Jędrzejewski-Szmek dd42fc
Input devices like rudders or pedals are joystick-like; they don't have
Zbigniew Jędrzejewski-Szmek dd42fc
buttons, but axes like RX, THROTTLE, or RUDDER. These don't interfere with
Zbigniew Jędrzejewski-Szmek dd42fc
other device types with absolute axes (touch screens, touchpads, and
Zbigniew Jędrzejewski-Szmek dd42fc
accelerometers), so it's fairly safe to mark them as ID_INPUT_JOYSTICK and thus
Zbigniew Jędrzejewski-Szmek dd42fc
hand out dynamic ACLs to the user.
Zbigniew Jędrzejewski-Szmek dd42fc
Zbigniew Jędrzejewski-Szmek dd42fc
https://bugs.freedesktop.org/show_bug.cgi?id=70734
Zbigniew Jędrzejewski-Szmek dd42fc
(cherry picked from commit 2658624399b22a9c4a345a22c69886dc9417f801)
Zbigniew Jędrzejewski-Szmek dd42fc
---
Zbigniew Jędrzejewski-Szmek dd42fc
 src/udev/udev-builtin-input_id.c | 19 +++++++++++++++----
Zbigniew Jędrzejewski-Szmek dd42fc
 1 file changed, 15 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek dd42fc
Zbigniew Jędrzejewski-Szmek dd42fc
diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
Zbigniew Jędrzejewski-Szmek dd42fc
index 828b349..3b2e897 100644
Zbigniew Jędrzejewski-Szmek dd42fc
--- a/src/udev/udev-builtin-input_id.c
Zbigniew Jędrzejewski-Szmek dd42fc
+++ b/src/udev/udev-builtin-input_id.c
Zbigniew Jędrzejewski-Szmek dd42fc
@@ -116,16 +116,27 @@ static void test_pointers (struct udev_device *dev,
Zbigniew Jędrzejewski-Szmek dd42fc
                         udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1");
Zbigniew Jędrzejewski-Szmek dd42fc
                 else if (test_bit (BTN_TOOL_FINGER, bitmask_key) && !test_bit (BTN_TOOL_PEN, bitmask_key))
Zbigniew Jędrzejewski-Szmek dd42fc
                         is_touchpad = 1;
Zbigniew Jędrzejewski-Szmek dd42fc
-                else if (test_bit (BTN_TRIGGER, bitmask_key) ||
Zbigniew Jędrzejewski-Szmek dd42fc
-                         test_bit (BTN_A, bitmask_key) ||
Zbigniew Jędrzejewski-Szmek dd42fc
-                         test_bit (BTN_1, bitmask_key))
Zbigniew Jędrzejewski-Szmek dd42fc
-                        udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1");
Zbigniew Jędrzejewski-Szmek dd42fc
                 else if (test_bit (BTN_MOUSE, bitmask_key))
Zbigniew Jędrzejewski-Szmek dd42fc
                         /* This path is taken by VMware's USB mouse, which has
Zbigniew Jędrzejewski-Szmek dd42fc
                          * absolute axes, but no touch/pressure button. */
Zbigniew Jędrzejewski-Szmek dd42fc
                         is_mouse = 1;
Zbigniew Jędrzejewski-Szmek dd42fc
                 else if (test_bit (BTN_TOUCH, bitmask_key))
Zbigniew Jędrzejewski-Szmek dd42fc
                         udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1");
Zbigniew Jędrzejewski-Szmek dd42fc
+                /* joysticks don't necessarily have to have buttons; e. g.
Zbigniew Jędrzejewski-Szmek dd42fc
+                 * rudders/pedals are joystick-like, but buttonless; they have
Zbigniew Jędrzejewski-Szmek dd42fc
+                 * other fancy axes */
Zbigniew Jędrzejewski-Szmek dd42fc
+                else if (test_bit (BTN_TRIGGER, bitmask_key) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (BTN_A, bitmask_key) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (BTN_1, bitmask_key) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_RX, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_RY, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_RZ, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_THROTTLE, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_RUDDER, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_WHEEL, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_GAS, bitmask_abs) ||
Zbigniew Jędrzejewski-Szmek dd42fc
+                         test_bit (ABS_BRAKE, bitmask_abs))
Zbigniew Jędrzejewski-Szmek dd42fc
+                        udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1");
Zbigniew Jędrzejewski-Szmek dd42fc
         }
Zbigniew Jędrzejewski-Szmek dd42fc
 
Zbigniew Jędrzejewski-Szmek dd42fc
         if (test_bit (EV_REL, bitmask_ev) &&