diff --git a/src/joystick/linux/.SDL_sysjoystick.c.swp b/src/joystick/linux/.SDL_sysjoystick.c.swp new file mode 100644 index 000000000..e2a15d5bd Binary files /dev/null and b/src/joystick/linux/.SDL_sysjoystick.c.swp differ diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index a06170726..cad73eca9 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/src/joystick/linux/SDL_sysjoystick.c @@ -904,6 +904,9 @@ AxisCorrect(SDL_Joystick * joystick, int which, int value) { struct axis_correct *correct; + SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick); + char pandoryGUID[1024]; + correct = &joystick->hwdata->abs_correct[which]; if (correct->used) { value *= 2; @@ -925,6 +928,17 @@ AxisCorrect(SDL_Joystick * joystick, int which, int value) if (value > 32767) return 32767; + + // Pandory500 retrogames-udev-bug - correct spurious axis movement + SDL_JoystickGetGUIDString(joystick->hwdata->guid, pandoryGUID, sizeof(pandoryGUID)); + if ( strcmp(pandoryGUID, "03000000591c00002600000010010000") == 0 // 'Retro Games LTD THEGamepad' + || strcmp(pandoryGUID, "03000000591c00002300000010010000") == 0 // ' THEC64 Joystick THEC64 Joystick ' + ) { + if (value == 127 || value == 255) { + return 0; + } + } + return value; }