Nvidia Controller on Retropie 4.6.7
-
I created a clean Retropie install on my RPi 3B+ (from the downloaded SD card image). Version 4.6.7 on Raspbian Buster. I updated everything as of yesterday (core packages, OS, etc)
My main controller is a DragonRise USB arcade controller, plus a wireless keyboard. With only those 2 controllers, everything works as expected: EmulationStation UI, arcade games, RGUI using Select+X on the joystick, Tab menu from the keyboard. I mostly use lr-mame2003, with a few games using lr-fbneo or advmame.
Then I add a Nvidia Controller V1.03 (2015) connected via USB cable. I can use the ES input configuration to configure it. Everything looks ok, all buttons seems to be configured properly.
But when I start a game, I get an overlay message that says that the Nvidia controller is not configured, the DragonRise controller configured on port #1. At that point the game still recognizes the arcade joystick for the gate itself, but not Select+X (or even Select+Start to exit a game). Nothing on the Nvidia controller is recognized.
I tried pretty much every suggestion from googling "retropie nvidia controller", but nothing seems to work for me. Any suggestion?
-
@robca Did you disable the EmulationStation joystick auto-configuration from the RetroPie Setup ? If you did, configuring the input in EmulationStation will not generate the RetroArch gamepad auto-configuration file.
-
Good suggestion, thanks... but, no, the autoconfiguration is enabled and works as expected for the DragonRise joystick. For example, if I remap the DragonRise buttons, every game then uses the remapped ones, so I'm assuming everything works.
If I launch a game with verbose logging, I get the following portion:
[...] [INFO] [Video]: Graphics driver did not initialize an input driver. Attempting to pick a suitable driver. [INFO] [udev]: Keyboard #0 (/dev/input/event3). [INFO] [udev]: Mouse #0 (/dev/input/event4). [INFO] [udev]: Mouse #1 (/dev/input/mouse1). [INFO] [udev]: Mouse #2 (/dev/input/event1). [INFO] [udev]: Mouse #3 (/dev/input/mouse0). [INFO] [udev]: Plugged pad: DragonRise Inc. Generic USB Joystick (121:6) on port #0. [INFO] [udev]: Pad #0 (/dev/input/event7) supports 0 force feedback effects. [INFO] [udev]: Plugged pad: NVIDIA Corporation NVIDIA Controller v01.03 (2389:29200) on port #1. [INFO] [udev]: Pad #1 (/dev/input/event0) supports 0 force feedback effects. [INFO] [Joypad]: Found joypad driver: "udev". [WARN] [udev]: Full-screen pointer won't be available. [INFO] [Video]: Found display server: null [...]
But then the overlay on the screen says that it's not enabled
-
One more piece of info: from EmulationStation, Retropie settings, if I select Retroarch and open the Retroarch grey.green blocky menu, I get the same overlay stating that the Nvidia controller is not configured. And I cannot control the Retroarch menu with the Nvidia controller, only DragonRise. Which clearly points to Retroarch not recognizing the Nvidia controller.
Looks like I cannot include files here, but there doesn't seem to be anything in retroarch.cfg that would either help or cause problems. Is there a way to force a device in retroarch.cfg?
I also did a usb-devices command to see if the drivers used for the DragonRise and Nvidia are different, but doesn't seem to be the case
T: Bus=01 Lev=03 Prnt=03 Port=02 Cnt=03 Dev#= 5 Spd=1.5 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0079 ProdID=0006 Rev=01.07 S: Manufacturer=DragonRise Inc. S: Product=Generic USB Joystick C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0955 ProdID=7210 Rev=01.00 S: Manufacturer=NVIDIA Corporation S: Product=NVIDIA Controller v01.03 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
using lsusb, I can see that the only difference is that the DragonRise and the keyboard are 1.5M devices, the Nvidia controller is 12M. Can that be enough to cause problems to Retroarch? I'm assuming most controllers with analog axis are faster than a simple digital joystick and buttons
-
Adding also the output of lsusb -v for both controllers, just in case
Bus 001 Device 004: ID 0955:7210 NVIDIA Corp. SHIELD Controller Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0955 NVIDIA Corp. idProduct 0x7210 SHIELD Controller bcdDevice 1.00 iManufacturer 11 NVIDIA Corporation iProduct 12 NVIDIA Controller v01.03 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x0022 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 14 Gamepad1 Device HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 241 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 2 Device Status: 0x0000 (Bus Powered) Bus 001 Device 005: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0079 DragonRise Inc. idProduct 0x0006 PC TWIN SHOCK Gamepad bcdDevice 1.07 iManufacturer 1 DragonRise Inc. iProduct 2 Generic USB Joystick iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x0029 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.10 bCountryCode 33 US bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 101 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)
-
@robca said in Nvidia Controller on Retropie 4.6.7:
Which clearly points to Retroarch not recognizing the Nvidia controller.
Actually, your log shows the Nvidia controller being recognized as P2, which cannot control the menu. Can you check
\\retropie\configs\all\retroarch-joypads
and see if there's a.cfg
file for the Nvidia controller ? -
I just finally figured out what is happening, and I'm 99% sure it's an EmulationStation bug.
When I configured the Nvidia controller with EmulationStation "Configure Input", it created a file called "NVIDIA Controller v01.03.cfg". When I configure the controller using the Retroarch gray/green blocky menu, it creates a file called "NVIDIA Corporation NVIDIA Controller v01.03.cfg".
Once that file is created, things work much better, and at least some keys are recognized. So it looks as if EmulationStation uses a shorter name for the controller, and Retroarch needs the full long name instead.
Now I need to understand why the only keys the games recognize are the Start and Select keys. I think that is because it's recognized as Player 2 (per your suggestion).
Is there a way to use 2 controllers interchangeably as player 1 and 2? Does this utility https://github.com/meleu/RetroPie-joystick-selection work in recent builds, or is there a better way??
-
@robca said in Nvidia Controller on Retropie 4.6.7:
I just finally figured out what is happening, and I'm 99% sure it's an EmulationStation bug.
It's not EmulationStation that creates the config, but regardless, the name of the generated
.cfg
is based on the name reported by the controller - that works for the other controller you have and is generally not something that was changed recently. Even the Retroarch's joypad autoconfig profiles use the same file name, without the vendor.Now I need to understand why the only keys the games recognize are the Start and Select keys. I think that is because it's recognized as Player 2 (per your suggestion).
Is there a way to use 2 controllers interchangeably as player 1 and 2? Does this utility https://github.com/meleu/RetroPie-joystick-selection work in recent builds, or is there a better way??
That should still work.
-
@mitu Thanks, appreciate the help.
I tried many times to autoconfigure the Nvidia controller (Manage packages -> Manage core packages -> emulationstation -> Configuration -> and run Clear/Reset Emulation Station input configuration) and recreating it, every time it created the same shorter name. Only using the Retroarch menu, the new longer file name was created. As soon as that file was created, I stopped seeing the "not configured overlay", and seeing "Nvidia controller on port 2" (or something along those lines). And the controller started working
I really think that there is something weird with the auto-creation of the Nvidia controller. It's possible that somehow Retroarch and the auto configuration use different APIs to get the device name? Or that the V1.03 controller is somehow behaving differently?
Anyway, hopefully anyone else with this problem will bump into this thread and get a possible workaround
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.