Support for steering wheels is under heavy development. Consider this wiki page an early look. Join #steering-wheels on Discord to contribute or to follow latest updates.

Steering wheel controllers

If you've ever been to an arcade before, chances are you've seen or played on one of the sit-down driver cab games where the conventional steering wheel of a car is used to control a virtual car on-screen as opposed to a regular controller. From Batocera FIXME and up, steering wheel controllers are supported. Menu navigation is performed by FIXME and configuration on supported emulated systems is automatic.

Max range FFB Gear shifter Notes
HORI Racing Wheel APEX 270° Mapping is incomplete
HORI Racing Wheel Overdrive 270° (v40) Must be on mode 2 to work
Logitech Driving Force 200°
Logitech Driving Force GT 900°
Logitech Driving Force Pro 900° (v40)
Logitech G25 Racing Wheel 900°
Logitech G27 Racing Wheel 900°
Logitech G29 Driving Force 900° Must be on PS3/PC mode to work
Logitech G920 Driving Force 900°
Logitech G923 Driving Force 900°
Logitech Momo Racing 240°
Microsoft SideWinder Force Feedback Wheel 220°
Microsoft SideWinder Precision Racing Wheel 270° (v41)
MOZA Racing R9 None Mapping is incomplete
ThrustMaster Ferrari 458 Spider 240° FFB unsupported yet
Thrustmaster Ferrari Wireless F430 Cockpit 270°
Thrustmaster Ferrari F430 Force Feedback 270°
Thrustmaster Ferrari SF1000 (Advance Racer) ? ? ?
Thrustmaster Ferrari GT 2 in 1 Rumble Force Racing Wheel 240° (v40) Must be on 3-axis mode (default)
Thrustmaster T300 RS 1080°
Thrustmaster T150 RS 1080° (v40) Must be on PS3 mode to work
Thrustmaster T80 240° (v40) Must be on gamepad mode to work
PXN-V10 900° (v40) Must be on x-input mode, switch to 270° and FFB disabled in PXN phone app
Wheel Notes
Thrustmaster T128 No compatible linux drivers as of today
Thrustmaster TMX No compatible linux drivers as of today
Mad Catz Wireless Racing Wheel for XBox 360 Unfortunately, seen as a plain XBox360 controller only
System Emulator Out of the box? Native Wheel support Working FFB? Notes
3DO libretro:opera
Atari 2600 libretro:stella
Atari 5200 libretro:atari800
Atomiswave libretro:flycast
ColecoVision libretro:bluemsx No support in blueMSX yet
Dreamcast libretro:flycast
FBNeo libretro:fbneo Not optimized
GameCube Dolphin
MAME MAME :!: Not optimized
Model 2 model2emu Not optimized
Model 3 Supermodel Not optimized
Naomi libretro:flycast
Naomi 2 libretro:flycast
Namco 2×6 Play! :?: Not optimized
Nintendo 64 Mupen64
Playstation libretro:pcsx_rearmed :!: Not optimized
Playstation 2 PCSX2
Playstation 3 RPCS3 Not optimized
Sega Saturn libretro:beetle-saturn
Triforce Dolphin
Wii Dolphin :!: Not optimized
Wiiu cemu :?: Not optimized
Xbox xemu :!: :?: Not optimized
Xbox 360 xenia :?: Not optimized

Force feedback is supported with the PCSX2 and Dolphin (GameCube) emulators.

You can test the wheel force feedback from command line by (type evtest to find your XX value): ffcfstress -d /dev/input/eventXX

Before trying to add a steering wheel you believe is not yet supported, verify the list above. If it's there but undetected in Batocera, upgrade to latest version.

If coming from an upgrade and the steering wheel is detected, but no buttons are working, simply delete the file /userdata/system/configs/emulationstation/es_input.cfg and reboot. This will generate a new es_input.cfg with the latest additions. Do not remap the steering wheel, this will break the pre-configured generator.

To test a new steering wheel controller in Batocera:

  1. Configure the wheel as a normal pad in EmulationStation with the following convention:
    • LEFT ANALOG LEFT to the rotation of the steering wheel (skip LEFT ANALOG UP by holding any button)
    • If possible, LEFT SHOULDER and RIGHT SHOULDER to gear down and up respectively
    • LEFT TRIGGER to the brake pedal, and RIGHT TRIGGER to the acceleration/gas pedal
    • START as a button (required)
    • Additional buttons if possible, the more that can be assigned the more compatibility. For example: D-PAD and , , , (FIXME could probably follow a guideline similar to configure_a_controller)
  2. Create a file in /userdata/system/udev/rules.d/ called 99-wheels.rules (or any other name if you already have one) with the content below, replacing my wheel name by the actual wheel name, reported by the evtest command.
    99-wheels.rules
    SUBSYSTEM=="input", ATTRS{name}=="my wheel name", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1", ENV{ID_INPUT_WHEEL}="1", ENV{WHEEL_ROTATION_ANGLE}="270"
  3. Reboot. Your wheel should work. Some wheels require tweaking. Please contact the Batocera team via discord in case of any issue.
  4. Don't forget to send the two files /userdata/system/configs/emulationstation/es_last_input.cfg and 99-wheels.rules to the Batocera team so that the wheel becomes pre-configured for everybody in the next Batocera release.

The wheel has three properties that can be adjusted (FIXME where?): rotation angle, midzone and deadzone.

Rotation angle

This will multiply the sent value by a factor to match the specified angle. This is the maximum rotation angle in degrees the wheel will respond to (in red on the picture). Most games would label this setting as “sensitivity”. If set to a value lower than the wheel's physical limits, it allows you to more easily reach the maximum input before turning the wheel all the way. It helps to convert a 900° rotation wheel to a 180° rotation wheel for example. Some games like Mario Kart 64 intended to play with a joystick need to switch very quickly from full left to full right which can be difficult to do on a 900° wheel without changing this setting.

If set to value higher than the wheel's physical limits, it will allow for more precise adjustment, however it will become physically impossible to reach the maximum input.

A common value is 180°. The value on the picture is around 225°.

Midzone

When the wheel is not being touched, it rests in the neutral position. While in this position, no input values should be being sent to the game. However, the wheel's sensor may become misaligned and start sending a turning signal even when in neutral position; the midzone is a small section near the middle where inputs will be ignored (hopefully meaning only actual turning actions are responded to).

A common value is 5°.

Reverse deadzone

On real hardware, games made for consumer hardware would sometimes have a built-in deadzone in the game itself, meaning if small turning values are sent they will be ignored. This is common on home consoles such as the Nintendo 64. Unfortunately, this means the wheel (which is usually more accurate than a standard joystick) will feel very unresponsive as even after leaving its midzone, it will still be in the deadzone of the game itself. We can defeat the game's built-in deadzone by instantly snapping to a higher value after leaving the midzone instead; this is the “reverse deadzone”.

A common value is 45°.

Demonstration

On the following animated image, you can see:

  • On the top, the real 270° wheel movement, from center, to maximum left, then to maximum right
  • On the bottom, the wheel in game behavior.
    • In the midzone, the input sent is dramatically reduced.
    • When entering or exiting the midzone there is a jump caused by the reverse deadzone so the game properly reacts to the input.
    • The real wheel movement doesn't have impact on extremities (from 180° to 270°).
    • Configuration is: 180° maximum movement, 5° midzone and 25° deadzone.

Try each of the following:

  • Go to the in-game settings and calibrate.
  • Turn off force feedback.
  • Start a race and hit anything.

Turn the steering wheel to the left as far as it will go, then do the same to the right. This will update the maximum range read by the emulator.

  • Always check in-game settings if the controls are set to the steering wheel device and not the controller. Some games require the user to change it. You can save to memory card after that to keep the settings.
  • Some emulators use shifters to navigate and pedals to start or select. Some other games require a controller for menu navigation. Therefore, the steering wheel is limited to gameplay only.

Some games had no native steering wheel support. Therefore, playing those will be in controller-mode. Given that steering wheel support is still under development, controller-mode is not yet fully implemented and some games are simply unplayable without manual setup.

  • emulators/wheel_games.txt
  • Last modified: 3 weeks ago
  • by tovarichtch