JacKeTUs / linux-steering-wheels

Project to track Linux steering wheels support

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linux steering wheels FFB support

Ranks

Ranks are totally subjective.

Native

Device works perfectly out-of-the-box, no need to build/install any custom drivers.

Device gets 'Native' rank if device manufacturer uses known protocol (like PIDFF1) and device could be initialized with native pidff driver2, or wrote driver for Linux (like hidpp3).

Platinum

FFB on a device works perfectly with custom driver, was tested by many users, every FFB effect implemented.

Gold

Works with custom driver, without major bugs. May be not tested with many users/in all scenarios.

Silver

Works with custom driver, may be not all FFB effects implemented. May be not tested with many users/in all scenarios. May be some caveats or bugs, refer to driver repo for information.

Bronze

Basic FFB effects (like ConstantForce and Damper) works. Experimental support. Needs further testing. May be bugs, clipping, or memory leaks. Refer to driver repo for information.

Broken

FFB doesn't work at all. Device uses proprietary protocol, not yet reverse-engineered

Not tested

Device not tested at all. FFB protocol unknown. May be working, may be not. Contributions welcome!

Table of compatibility

Manufacturer Device names VID PID Support Protocol Driver needed Proton compatibility
Asetek Invicta 2433 f300 Not tested ? ?
Asetek Forte 2433 f301 Not tested ? ?
Asetek La Prima 2433 f303 Not tested ? ?
Asetek Tony Kannan 2433 f306 Not tested ? ?
Cammus C5 3416 0301 Silver PIDFF1 without a7 descriptor cammus-ff4 Works 1, 2
Fanatec CSL Elite 0eb7 0e03 Gold Proprietary hid-fanatecff5
Fanatec CSL Elite (PS4) 0eb7 0005 Gold Proprietary hid-fanatecff5
Fanatec DD 0eb7 0020 Gold Proprietary hid-fanatecff5
Fanatec DD Pro 0eb7 0020 Gold Proprietary hid-fanatecff5
Fanatec Clubsport DD 0eb7 0020 Gold Proprietary hid-fanatecff5
Fanatec ClubSport Wheel Base V2 0eb7 0001 Silver Proprietary hid-fanatecff5
Fanatec ClubSport Wheel Base V2.5 0eb7 0004 Silver Proprietary hid-fanatecff5
Fanatec Podium DD1 0eb7 0006 Silver Proprietary hid-fanatecff5
Fanatec Podium DD2 0eb7 0007 Silver Proprietary hid-fanatecff5
Fanatec CSR Elite 0eb7 0011 Silver Proprietary hid-fanatecff5
Logitech MOMO Wheel 046d c295 Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech DFP 046d c298 Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech DFGT 046d c29a Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech G25 046d c29b Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech G27 046d c29b Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech G29 046d c24f Platinum Logitech FF6 hid-lg4ff (limited effects)
new-lg4ff7
Works
Logitech G920 046d c262 Native Logitech FF6 with HIDPP hid-logitech-hidpp3 Works
Logitech G923 (Xbox edition) 046d c26d Native Logitech FF6 with HIDPP hid-logitech-hidpp3 Works
Logitech G923 (PS edition) 046d c267 Platinum Logitech FF6 new-lg4ff Works
Logitech G Pro 046d c272 Bronze Logitech FF6 with HIDPP hid-logitech-hidpp with patches8 Works 2
Moza R3 346e 0005 Native PIDFF1 pidff2 Needs testing 1
Moza R5 346e 0004 Native PIDFF1 pidff2 Needs testing 1
Moza R9 346e 0002 Native PIDFF1 pidff2 Needs testing 1
Moza R9v2 346e 0002 Native PIDFF1 pidff2 Needs testing 1
Moza R12 346e 0006 Native PIDFF1 pidff2 Needs testing 1
Moza R16 346e 0000 Native PIDFF1 pidff2 Needs testing 1
Moza R21 346e 0000 Native PIDFF1 pidff2 Needs testing 1
OpenFFBoard9 1209 ffb0 Native PIDFF1 pidff2 Needs testing 1
PXN Not tested ? ?
Simagic M10 0483 0522 Silver PIDFF1 with caveats simagic-ff10 Works. 1
Simagic Alpha Mini 0483 0522 Silver (up to fw v159)
Broken
PIDFF1 with caveats (up to fw v159)
Proprietary
simagic-ff10 Works. 1
Simagic Alpha 0483 0522 Silver (up to fw v159)
Broken
PIDFF1 with caveats (up to fw v159)
Proprietary
simagic-ff10 Works. 1
Simagic Alpha Ultimate 0483 0522 Silver (up to fw v159)
Broken
PIDFF1 with caveats (up to fw v159)
Proprietary
simagic-ff10 Works. 1
Simucube Simucube 1 16d0 0d5a Native PIDFF1 pidff2 Works11. How to setup Simucube base
Simucube Simucube 2 Sport 16d0 0d61 Native PIDFF1 pidff2 Works11. How to setup Simucube base
Simucube Simucube 2 Pro 16d0 0d60 Native PIDFF1 pidff2 Works11. How to setup Simucube base
Simucube Simucube 2 Ultimate 16d0 0d5f Native PIDFF1 pidff2 Works11. How to setup Simucube base
SimXperience AccuForce Pro 1fc9 804c Native PIDFF1 pidff2
Thrustmaster T248 044f b696 Gold Proprietary hid-tmff212
Thrustmaster T300RS (PS3 mode) 044f b66e Gold Proprietary hid-tmff212
Thrustmaster T300RS (PS3 advanced mode) 044f b66f Gold Proprietary hid-tmff212
Thrustmaster T300RS (PS4 mode) 044f b66d Gold Proprietary hid-tmff212
Thrustmaster TX 044f b669 Gold Proprietary hid-tmff212
Thrustmaster TS-XV 044f Gold Proprietary hid-tmff212
Turtle Beach Not tested ? ?
VRS DirectForce Pro 0483 a355 Silver PIDFF1 vrs-ff13

PIDFF caveats

Duration issue

Due to value of "infinite duration" not explicitly defined in PIDFF protocol, we have a bug in pidff driver. Many apps (including Wine) uses 0 as 'infinite duration' effect. Link to mailing list

To mitigate that issue you could use ffbwrap14 tool. For example, launch games with command: ffbwrap --duration-fix /dev/input/by-id/usb-Your-Wheel-event-joystick %command%

a7 descriptor issue

Descriptor 0xa7 (effect delay) is not required for Windows PIDFF implementation. Some manufacturers (including Simucube at first, later Simagic and Cammus) didn't implement that parameter in their firmware. But in Linux PIDFF implementation 0xa7 descriptor is mandatory, and device without it can't be initialized with PIDFF driver. Simucube fixed it in latest firmware (1.0.49)15

Small fix, which removes 0xa7 descriptor from pidff, enables FFB in some devices (like Simagic and Cammus).

Wine/Proton caveats

Joystick detection

Even if device rank is "Native", there may be some small issues regarding SDL wheel detection in Steam. Now there is no possible way to euristically detect a wheel, so SDL have whitelist16 of VID/PIDs.

Also, for devices not present in list, Steam uses sandboxed SDL1.2 to detect devices. It has one small rule to detect all kinds of joystics, function EV_IsJoystick(). And basically, for the device to be classed as a joystick, it must have either X and Y axes or a X and Y hat, and must have a trigger, A button, or 1 button. On some devices Y axis not exists (Logitech G Pro), and therefore, for SDL, that device is not a joystick and no need to forward it to the game. Native apps will work perfectly, Wine apps too, but not Steam+Proton games. We could fix it by changing descriptor axis, something like rename Rz to Y, and wheel will work in Proton now

Link to the Proton issue

Also, recent updates to SDL created SDL Hint variable to dynamically extend wheel devices list17. You need to just export SDL_JOYSTICK_WHEEL_DEVICES=0x<VID>/0x<PID>,0x<VID2>/0x<PID2> before you launching something.

Steam settings for ~all devices and ~all games

  1. Turn Steam Input off in game settings

  2. Use recent Proton version for non-native games. 7 version known for having issues with HID devices detection.

  3. If game does not detect your device, try setting SDL Hint17 environment variable in game launch command like so:

    SDL_JOYSTICK_WHEEL_DEVICES=0x<VID>/0x<PID> %command%
    

    This is only relevant for devices which are, for various reasons, not in a SDL whitelist16 (yet), or for older Steam runtime versions which does not have updated SDL library.

  4. If none of that worked, create an issue, where members of the community will try to help you with your specific game

DISCLAIMER

THE SOFTWARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Footnotes

  1. https://www.usb.org/sites/default/files/documents/pid1_01.pdf 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

  2. https://elixir.bootlin.com/linux/latest/source/drivers/hid/usbhid/hid-pidff.c 2 3 4 5 6 7 8 9 10 11 12 13 14

  3. https://elixir.bootlin.com/linux/latest/source/drivers/hid/hid-logitech-hidpp.c 2 3

  4. https://github.com/spikerguy/cammus-ff

  5. https://github.com/gotzl/hid-fanatecff 2 3 4 5 6 7 8 9 10

  6. https://opensource.logitech.com/wiki/force_feedback/Logitech_Force_Feedback_Protocol_V1.6.pdf 2 3 4 5 6 7 8 9 10

  7. https://github.com/berarma/new-lg4ff 2 3 4 5 6

  8. https://github.com/JacKeTUs/hid-logitech-hidpp

  9. https://github.com/Ultrawipf/OpenFFBoard

  10. https://github.com/JacKeTUs/simagic-ff 2 3 4

  11. https://community.granitedevices.com/t/simucube-2-discussion-thread/2664/1606 2 3 4

  12. https://github.com/Kimplul/hid-tmff2 2 3 4 5 6

  13. https://github.com/JacKeTUs/vrs-ff

  14. https://github.com/berarma/ffbtools

  15. https://granitedevices.com/wiki/SimuCUBE_firmware_releases

  16. https://github.com/libsdl-org/SDL/blob/main/src/joystick/SDL_joystick.c#L340 2

  17. https://github.com/libsdl-org/SDL/issues/8595 2

About

Project to track Linux steering wheels support