-
Notifications
You must be signed in to change notification settings - Fork 110
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Xbox Wireless Controller rumble sometimes doesn't stop #264
Comments
This is a known bug of the controller firmware when using Bluetooth connections, it also happens in Windows. There's nothing we can do except poking MS about it: https://answers.microsoft.com/en-us/xbox/forum/all/xbox-elite-series-2-disconnecting-from-pc/7e5a964a-16cc-4e83-8dec-aa8c858b875c Depending on the model, firmware version, and rumble patterns you'll experience loss of input (partially or completely), spontaneous controller reboots, or full devices freezes (with the rumble motors stopping after 30+ seconds). The Bluetooth stack may or may not detect a disconnect or connections timeout. This is most likely purely an issue with the device firmware and nothing that can be fixed or worked around from the driver. We already deployed some work arounds, e.g. by using tighter rumble timing and intervals of at least 10ms before updating the rumble motors which prevents most instantaneous crashes. Future versions of xpadneo will work towards supporting the original controller dongle which uses Wifi instead of Bluetooth. With that, rumble is stable if we stay above the 10ms intervals. Apparently, the dongle firmware must be uploaded to the dongle during device init, and it's closed source and legal implications for shipping it aren't clear yet. |
Yeah, this is because Steam Input steals the device and presents it under uinput. You should disable Steam controller support in big picture mode otherwise we get wrong info, and some of the work-arounds of the driver may not work. |
Thanks for the detailed reply. It is unfortunate to learn this is a problem with the device firmware. I had the same issue with a wired xbox 360 gamepad I broke by dropping one too many times, but was never able to get a detailed explanation. :)
Is there a place this can be tracked?
I don't use steam and have never installed it to this computer. |
I wonder if it would be possible to reverse engineer the firmware and then replace it with an open source reimplementation? At the very least I doubt this would be trivial, but it would avoid having to rely on microsoft to fix this issue. |
|
Then this is strange... Do you use other types of similar software that moves the controller to uinput? Because this looks like uinput may be involved:
Looks like a placebo effect, this parameter isn't supported any longer:
Since you are running Gentoo and probably installed without the official installer, you may need to install the udev rules manually, along with the other files that should go to I'm using Gentoo myself, I should probably add some official installer for it. |
Not that I am aware of. This is a relatively new install with a stock
Thanks for pointing this out, I also noticed the logs after I wrote that. It seems sometimes it happens sooner and other times it happens later.
Yes, I used Looking at the install scripts I created these files.
And ertm is disabled.
Did I miss anything? Edit: |
Now, the rumble throttler of xpadneo should work and you may have better luck. After all, I don't think your system was actually using xpadneo before. |
I was able to Thanks for the help! |
This is because the gamepad PIDs are in the driver so the kernel autoloads it, but your dmesg logs didn't show any presence that it actually initialized the controller so udev didn't bind the device to the driver. If you compare dmesg now, you'll see xpadneo actually logging device init. The connect rumble is actually a hint for that so you know it worked without looking at the logs (and it's a test if 3rd party manufacturers implemented rumble correctly). |
@orbea As a Gentoo user, you could use my kernel patch which integrates xpadneo right into the kernel, and with it you also probably no longer need to disable ERTM: Clone the repository, then checkout that PR branch, now run:
(9300 is just a number to order this after Gentoo kernel patches, any number 9000-9999 should work) This will export a patch above my current master (which points to the base version of the kernel I'm using) for xpadneo. The branch names include the kernel branch which is 5.10 currently. Then re-emerge gentoo-sources. You may need to After installing that kernel, you should have xpadneo built right into the kernel - just enable it in There are a few other pull requests that track several other performance patchsets useful for gaming with the gentoo-sources kernel (MuQSS + full CK patchset, Intel's kernel performance patches from ClearLinux, support for Valve's Proton fsync. At some point I'll rebase those patches when they become incompatible with the latest kernel version. If you're having problem with one of those, consider asking your question there and not here. Thanks. |
Thanks for pointing that out. I'll give it a try soon when I move to 5.10 kernels. I am currently on 5.9.15 using sources from kernel.org, but I am fairly familiar with compiling the kernel manually that I should manage. In gentoo genkernel does most of the tedious work. Regarding this issue it still enters the infinite rumble, but sometimes it never seems to happen. Maybe some games reproduce it easier? I haven't found the time to try to debug it further yet. |
Yeah, using the 10ms intervals is only half of the solution. The other crash condition seems to be deeply hidden in the Bluetooth implementation of the controller firmware itself and can also be observed in Windows. There's no known work-around. You can try disabling the trigger rumble (if your controller has those rumble motors) with parameter |
I unmasked |
I am pretty stuck in my ways after manually installing my own kernel in Slackware for so long. I am rather new to Gentoo, but found genkernel does away with lot of the tedium of updating the kernel, it is still able of using arbitrarily modified source trees, using menuconfig, custom config files and offers more control on the kernel version.
|
I compiled a It seems to work just as well as it did before.
Also you can just add |
Yes, this is how I'm using xpadneo in Gentoo: Compiled right into the kernel as a patch (but still as a loadable module). Updating xpadneo from the xpadneo source itself still works (if compiled as a module), if you use BTW: Yep, appending |
Just curious, but are there any known similar controllers with working bluetooth and rumble? |
We should be supporting any controller that claims to be compatible with Xbox controller HID mode. I think most 8BitDo controllers in xinput mode are supported. Some of them have rumble support, tho, their implementation is buggy/limited sometimes. The driver has work-arounds for it via quirk flags. Maybe we should start compiling a list of known-compatible controllers in the docs. |
@orbea stretching "similar" (if you're looking for anything that works), PS2-PS4 controllers have in-tree Linux drivers written by Sony, and PS5 controller support is waiting to be merged. |
The interesting bit is that PS5 controllers started discussion about how to properly support the trigger rumble natively via kernel APIs. Our driver currently synthesizes the rumble values from the strong and weak motor values because we only get two values from the kernel rumble API. This will be interesting and I'll be watching the development once merging is complete. |
@lights0123 I have various official and non-official PS3 controllers, but they all fail with bluetooth in the same way. |
This may be a duplicate of #272. |
Please re-open if it is still an issue. |
This patch has been accepted upstream: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git/commit/?id=98d2c3e1731007acf03addf83c863df6694beb95 Maybe-fixes: atar-axis#264 Signed-off-by: Kai Krakow <kai@kaishome.de>
This patch has been accepted upstream: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git/commit/?id=98d2c3e1731007acf03addf83c863df6694beb95 Maybe-fixes: #264 Signed-off-by: Kai Krakow <kai@kaishome.de>
Version of xpadneo
bf8a3c3
Severity / Impact
Describe the bug
When using an official Xbox Wireless Controller with rumble it will occasionally get stuck on a rumble on state and will not stop rumbling until the controller is turned off. During this time other input still works as expected. This can completely break gameplay depending on the game.
Steps to Reproduce
Expected behavior
The rumble should not get stuck.
Screenshots/Gifs
N/A
System information
I'm not sure where this file is?
Best guess is?
Controller and Bluetooth information
xpadneo-btmon.txt.gz
xpadneo-dmesg.txt
xpadneo-lsusb.txt
Additional context
With
disable-ff=1
ordisable-ff=2
the issue seems rarer? Withtrigger_rumble_mode=1
when this occurs I also lose all other input. It also does not rumble when connecting the gamepad. Please let me know if there is any other info I can provide?The text was updated successfully, but these errors were encountered: