I’ve just added experimental rumble support to libretro. It is a very simple interface which should hopefully be enough for at least PlayStation 1. You have control over a weak motor and a strong motor.
The Linux gamepad driver we used sadly cannot support rumble, so I’ve written a new gamepad driver for linux, “udev”. It uses the more modern /dev/input/event* interface, plus libudev to discover joypad devices and hotplugging. To avoid breaking stuff, udev is not the primary driver atm, although I expect it to become the default driver as it matures. Also, /dev/input/event*'s buttons don’t match up exactly with linuxraw joypad API in some cases, so configuring from Phoenix can break (just like xinput now). To use udev, you must set input_joypad_driver = udev in the config. You also need to compile with libudev available.
To set up autoconfigs with retroarch-joyconfig, add -d udev to force the udev driver.
I’ve added rumble support to the libretro-test/ core. Start button activates strong rumble, Select activates the weak rumble.
You should see something like this in verbose log:
RetroArch: [udev]: Plugged pad: ACRUX USB GAMEPAD 8116 on port #0.
RetroArch: Joypad port #0 (ACRUX USB GAMEPAD 8116) configured.
RetroArch: [udev]: Pad #0 (/dev/input/event20) supports force feedback.
RetroArch: [udev]: Pad #0 (/dev/input/event20) supports 16 force feedback effects.
TODO: Xinput should get rumble as well. Rumble should be implemented in Mednafen PSX.
EDIT: Xinput now has rumble support thanks to pinumbernumber. I’ve also pushed rumble support to Mednafen PSX. You have to use Joypad w/ Analog input type to get rumble for now. We’ve noticed some issues with swapping between regular gamepad and dualshock, so if you get issues with rumble make sure you start the game with dualshock on. We might have to find a way to have dualshock enabled at all times, but use the analog “button” on the dualshock instead.