Ranks are totally subjective.
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).
FFB on a device works perfectly with custom driver, was tested by many users, every FFB effect implemented.
Works with custom driver, without major bugs. May be not tested with many users/in all scenarios.
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.
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.
FFB doesn't work at all. Device uses proprietary protocol, not yet reverse-engineered
Device not tested at all. FFB protocol unknown. May be working, may be not. Contributions welcome!
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 |
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%
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).
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
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.
-
Turn Steam Input off in game settings
-
Use recent Proton version for non-native games. 7 version known for having issues with HID devices detection.
-
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.
-
If none of that worked, create an issue, where members of the community will try to help you with your specific game
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
-
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
-
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
-
https://elixir.bootlin.com/linux/latest/source/drivers/hid/hid-logitech-hidpp.c ↩ ↩2 ↩3
-
https://github.com/gotzl/hid-fanatecff ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
https://opensource.logitech.com/wiki/force_feedback/Logitech_Force_Feedback_Protocol_V1.6.pdf ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
https://community.granitedevices.com/t/simucube-2-discussion-thread/2664/1606 ↩ ↩2 ↩3 ↩4
-
https://granitedevices.com/wiki/SimuCUBE_firmware_releases ↩
-
https://github.com/libsdl-org/SDL/blob/main/src/joystick/SDL_joystick.c#L340 ↩ ↩2