Skip to content

Commit

Permalink
device: Linux fixes for Trust GXT 24 and a few other cheap gamepads
Browse files Browse the repository at this point in the history
Fixes #576
  • Loading branch information
rdb committed May 12, 2019
1 parent c1c74e2 commit 750afbb
Showing 1 changed file with 47 additions and 8 deletions.
55 changes: 47 additions & 8 deletions panda/src/device/evdevInputDevice.cxx
Expand Up @@ -65,6 +65,12 @@ enum QuirkBits {

// Axes on the right stick are swapped, using x for y and vice versa.
QB_right_axes_swapped = 64,

// Has no trigger axes.
QB_no_analog_triggers = 128,

// Alternate button mapping.
QB_alt_button_mapping = 256,
};

static const struct DeviceMapping {
Expand All @@ -85,10 +91,14 @@ static const struct DeviceMapping {
{0x28de, 0x1142, InputDevice::DeviceClass::unknown, QB_steam_controller},
// Jess Tech Colour Rumble Pad
{0x0f30, 0x0111, InputDevice::DeviceClass::gamepad, QB_rstick_from_z | QB_right_axes_swapped},
// SPEED Link SL-6535-SBK-01
{0x0079, 0x0006, InputDevice::DeviceClass::gamepad, 0},
// Trust GXT 24
{0x0079, 0x0006, InputDevice::DeviceClass::gamepad, QB_no_analog_triggers | QB_alt_button_mapping},
// 8bitdo N30 Pro Controller
{0x2dc8, 0x9001, InputDevice::DeviceClass::gamepad, QB_rstick_from_z},
// Generic gamepad
{0x0810, 0x0001, InputDevice::DeviceClass::gamepad, QB_no_analog_triggers | QB_alt_button_mapping | QB_rstick_from_z | QB_right_axes_swapped},
// Generic gamepad without sticks
{0x0810, 0xe501, InputDevice::DeviceClass::gamepad, QB_no_analog_triggers | QB_alt_button_mapping},
// 3Dconnexion Space Traveller 3D Mouse
{0x046d, 0xc623, InputDevice::DeviceClass::spatial_mouse, 0},
// 3Dconnexion Space Pilot 3D Mouse
Expand Down Expand Up @@ -497,8 +507,10 @@ init_device() {
axis = InputDevice::Axis::right_x;
}
} else if (_device_class == DeviceClass::gamepad) {
axis = InputDevice::Axis::left_trigger;
have_analog_triggers = true;
if ((quirks & QB_no_analog_triggers) == 0) {
axis = InputDevice::Axis::left_trigger;
have_analog_triggers = true;
}
} else if (_device_class == DeviceClass::spatial_mouse) {
axis = InputDevice::Axis::z;
} else {
Expand Down Expand Up @@ -527,8 +539,13 @@ init_device() {
axis = InputDevice::Axis::right_y;
}
} else if (_device_class == DeviceClass::gamepad) {
axis = InputDevice::Axis::right_trigger;
have_analog_triggers = true;
if ((quirks & QB_no_analog_triggers) == 0) {
axis = InputDevice::Axis::right_trigger;
have_analog_triggers = true;
} else {
// Special weird case for Trust GXT 24
axis = InputDevice::Axis::right_y;
}
} else {
axis = InputDevice::Axis::yaw;
}
Expand All @@ -548,8 +565,10 @@ init_device() {
break;
case ABS_GAS:
if (_device_class == DeviceClass::gamepad) {
axis = InputDevice::Axis::right_trigger;
have_analog_triggers = true;
if ((quirks & QB_no_analog_triggers) == 0) {
axis = InputDevice::Axis::right_trigger;
have_analog_triggers = true;
}
} else {
axis = InputDevice::Axis::accelerator;
}
Expand Down Expand Up @@ -974,6 +993,26 @@ map_button(int code, DeviceClass device_class, int quirks) {
// BTN_THUMB and BTN_THUMB2 detect touching the touchpads.
return ButtonHandle::none();

} else if (device_class == DeviceClass::gamepad &&
(quirks & QB_alt_button_mapping) != 0) {
static const ButtonHandle mapping[] = {
GamepadButton::face_y(),
GamepadButton::face_b(),
GamepadButton::face_a(),
GamepadButton::face_x(),
GamepadButton::lshoulder(),
GamepadButton::rshoulder(),
GamepadButton::ltrigger(),
GamepadButton::rtrigger(),
GamepadButton::back(),
GamepadButton::start(),
GamepadButton::lstick(),
GamepadButton::rstick(),
};
if ((code & 0xf) < 12) {
return mapping[code & 0xf];
}

} else if (device_class == DeviceClass::gamepad) {
// Based on "Jess Tech Colour Rumble Pad"
static const ButtonHandle mapping[] = {
Expand Down

0 comments on commit 750afbb

Please sign in to comment.