-
Notifications
You must be signed in to change notification settings - Fork 185
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
(Better) support for 8BitDo Ultimate Wired Controller [PC/Switch] #256
Comments
I found this issue here with this controller from the exact same symptoms, the constant disconnect/reconnect unless something was accessing it somehow. (Switch mode is working in the interim) |
Not sure if it helps.. but i wrote a script to avoid keeping steam open https://github.com/b1337xyz/scripts/blob/main/python/8bitdo_connect.py |
I'm also seeing the exact same issue on an Ayaneo Kun (a handheld device). The integrated controller identifies itself as a Xbox360 controller. The USB device of the controller quickly performs a reset, if one should not open the corresponding event device within a second or so. Looking at the kernel level opening the event device trigger periodic USB transfers to and from the device (to query button state, etc.). It seems like that these transfer make the watchdog in the controller firmware happy. I have written my own set of workaround for this problem. You can find stuff here: https://github.com/tobiasjakobi/ayaneo_kun/tree/master/controller Consists of an UDev rule that triggers a systemd unit when the device appears. The unit itself just launches a small application that opens the event device and then waits for a Unix signal (SIGTERM, issued by systemd when the unit stops). This is clearly a workaround, and IMHO a fix in the kernel driver would be much more appropriate. However I don't know what implications it would have to talk to the USB device regardless if the evdev is open or not. At least from a powersaving perspective it's probably not a good idea. In particular I don't really get this decision to implement this watchdog in the firmware in the first place. Why would you perform a USB reset when the watchdog hits? This just results in the device dropping from the bus, only to come back a little while later. And this way you never get any powersaving at all, since it's connect, probe, disconnect, connect, probe, ad infinitum. The only way I would get the controller to sleep is to manually disable the bus port which it is connected to. Then you wait for some minutes (I'm not sure how many exactly), power up the bus port again and then device is quiet (it doesn't appear on the bus anymore). Pressing a button reactivates it again. EDIT: Forgot to mention that I also saw a report about this issue on the LKML: https://lore.kernel.org/linux-input/[email protected]/T/ |
Can confirm that @tobiasjakobi workaround also works with the 8bitdo ultimate wired just changed the udev rules. (that's way better than what I was doing)
|
Coming here to report these Ultimate controllers seem to be notoriously broken on Linux. At some point my Ultimate BT simply stopped being recognized as a controller, now I'm running a beta firmware on the dongle that allows disabling the "automatic" input mode selection. I'll list some issues I've observed (assuming latest firmware):
It may be possible to address these solely through userspace, but I'm not sure where to start, I'm open to ideas. |
I have one of these controllers and can confirm the constant 6-second reconnect-and-vibrate issue, but I have noticed another weird quirk: If it's plugged in at boot, jstest-gtk calls it "8BitDo 8BitDo Ultimate Wired Controller" and it has a ton of buttons listed in the calibration window. If I unplug it, plug in an Xbox One controller, and then plug the 8BitDo controller in again, jstest-gtk lists it as "8BitDo Ultimate Wired Controller" and treats it as an Xbox controller, and it works fine. I think this might be related to which input mode it starts in? Either way, it's strange and I'd like to figure it out as I love this controller. |
This is about the 8BitDo Ultimate Wired Controller [PC/Switch]. This one: https://www.8bitdo.com/ultimate-wired-controller/
There's an Xbox version of this as well, and a stripped-down "C" version, as well as multiple wireless versions, but those are different beasts.
In XInput mode it reports as:
The current driver has the vendor and device ID alright, the description is "8BitDo Ultimate Wireless / Pro 2 Wired Controller", except I don't think these three models are actually identical as far as behaviour is concerned.
The biggest issue is that the Ultimate Wired needs some sort of keepalive. Without something accessing it, it will disconnect & reconnect every 6 s (looks like this is a carry-over from some overzealous power management for a wireless version or other). Every time it does this, it will vibrate and flash its LED. This also affects DInput mode, but not the Switch mode.
As long as Steam or Retroarch are running, it's fine. catting its /dev/input entry works, too, but that's just too ugly for words. The problem doesn't occur with xboxdrv, either.
If xpad is active, Steam Input needs to be disabled, otherwise (some?) games pick up the Steam Input controller alongside the "raw" xpad one, each keypress being detected as coming from both simultaneously. This does not happen with xboxdrv, nor in the other modes.
The thumb buttons (on the bottom) do not work in XInput mode no matter what, and neither does the home button.
The text was updated successfully, but these errors were encountered: