On Thu Jul 31 20:52:11 2025 +0000, Tyson Whitehead wrote:
@rbernon I implemented this for the Microsoft Sidewinder Force Feedback 2 Joystick (ID 045e:001b). My initial use case was just my OS's (NixOS) default wine install. I have since switched to using my OS's default Valve (Proton) install in order to use OpenVR too. The problem that I first ran into was that autocenter was permanently enabled on my device and overlaid on all effects as `DIPROPAUTOCENTER_OFF` was just ignored. So I implemented support for it based on testing with fedit.exe (the MS Force Edit program included in DirectX SDK 8.1) under Windows (using Wireshark to sniff the USB bus) and under Wine in Linux. I can't recall what bus it was. But I did mess around with them all. Wound up submitting a few patches upstream to SDL too to improve the state of things there too. As an example, I noticed the square wave effect didn't work under the SDL bus. Turned out this was due to a [lack of bits](https://github.com/libsdl-org/SDL/issues/8753) for some of the newer rumble effects. I am actually still not using it for the flight simulation software though as it uses [`EnumEffectsInFile` too](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ee418645...)), and that isn't currently implemented in wine. Some [initial work was done on this back in the day](https://list.winehq.org/pipermail/wine-devel/2014-February/103057.html) in python though, so I hope to get some time at some point and get that cleaned up and ported over and included in wine too.
Oh yeah, the autocenter not disabling itself was again the fault of the `hid-pidff` driver. It was made about 20 years ago and never updated and it had some bugs + was very strict.
Together with @JacKeTUs we've made heavy updates, fixes and mofifications to the Linux PID driver and we're still doing further work but the initial big batch was only upstreamed in Linux 6.15.
From that, I pivoted into trying to work on the ffb api as a whole to improve its functionality. I think, in the end, it will be very similar to how Directinout does things. Minus a few annoyances.