XBOX One Bluetooth - Select and Home buttons invalid under Stretch
Pi Model 3 B+
Power Supply used: Northprada 5v 3amp
Stretch running RetroPie 4.4
Built From: retropie-4.4-rpi2_rpi3 distribution
USB Devices connected: Rii Wireless keyboard
Controller used: XBOX One Bluetooth Model 1708 (Firmware 3.1.1221.0)
Hi All. Just looking to see if anyone else is experiencing the same problem as I am and see if there is a possible fix. Recently purchased a new B+ and decided to image with a fresh RetroPie 4.4 (Stretch) install to test and build out. I've seen other posts about the new Stretch image having some problems with controllers, but I did not see any with this exact topic on a B+ and Stretch using Xbox One Bluetooth.
On my older Pi Model 3 B, I remember a while back that jstest would not read several of the buttons on Xbox One Bluetooth (Back and Home) because the controllers used mappings that were out of range. (These buttons displayed @ in jstest) But I seem to recall that a fix was done to Jessie (SDL?) in a later version (may have been 4.3?) that accommodated those buttons. The Xbox One Bluetooth controller still seems to work in ES/Retroarch perfectly fine, but outside of this, those buttons don't appear to be mapping properly, which causes some limitations. Version of SDL2 running is 2.0.8, which seems to be the latest version. Is my memory failing me, am I missing something, or is this just an issue on Stretch and the fixes made in Jessie didn't carry over? Just curious if anyone has seen this behavior and knows of a fix. If not, no big deal. I'm happy just to document the problem and hope for a fix in the next version. Thanks for looking, and have a great day!
You're saying that in ES/RetroArch the buttons work, and they' don't outside of this ? You're trying a non-libretro emulator and the buttons don't work ?
Correct. jstest does not recognize the buttons, because they are mapped as keys. evtest shows that they map as Select button = key_back, and the Home button = key_homepage.
@theretroprince It seems to be something similar the problems users complain in this issue on github. The patches to RetroPIe's SDL are no longer needed, since the version was synched with upstream (where the patches already had been applied).
The issue mentions the controller switching to an 'Android mode' vs the 'Windows mode', but it's not clear in which circumstances these modes are switched.
Have you updated the firmware on the controller and disabled ETRM ?
Yes, Xbox one controller firmware has been updated to the current version. (Firmware 3.1.1221.0) It was my understanding that disabling ERTM should only affect connectivity issues, not mappings. But regardless, yes, I have ERTM disabled in my autostart.sh. Luckily, I don't have any connectivity issues, only mapping issues on those two buttons. (Controllers hold connection and reconnect perfectly)
I vaguely remember when I had to apply the SDL patch on my other Pi B (not B+) running Jessie, but it's been a while. That was my assumption as well, that those patches to SDL should no longer be needed because they would be included in the upstream and I assumed that they would work in SDL2-2.0.8. And yet, I'm still having problems with these mappings on Stretch.
And yet, I'm still having problems with these mappings on Stretch.
Since you say it works in ES/RetroArch (which use SDL), then I think these mappings are handled ok in SDL, it's the other (non-SDL) apps that don't see it correctly.
@mitu Forgive me, I made an error when I said that Retroarch 'worked'. It does, in fact, work, but I forgot that I had changed my joypad driver in Retroarch global config to udev. (It does still work with SDL2, though) It helps when you actually have a valid control group for testing. My bad!
I guess my concern was that jstest was not showing the correct mappings, and I needed the button assignments to hardcode in other non-Libretro emulators. Since ES has the necessary button assignments, would I be able to just examine the es_input.cfg and translate the button id values over to non-LR emulator config files? Would that work?
@theretroprince I think it would work. What emulator do you have in mind ?
@mitu I was thinking CoolCV and some non-lr Mupen64 builds.
Circling back around to this post after a bit just to update anyone who may be having the same issue that I was and put some finality to the issue. The issue was with the Xbox One Bluetooth controller having some driver compatibility issues. I believe the solution is still a WIP, but atar-axis wrote a driver called xpadneo that works amazingly well with Xbox One in Bluetooth mode. It solved all of my controller issues. Jstest now shows the dev input perfectly, and includes rumble support. Really great stuff!