I just built a new arcade box that looks jus great!
It has 15 buttons and 2 joysticks, all connected to a gamepad that sends the commands to the PI via USB.
All looks good, I got my games running, but now I want to go 2 players. This is where I start having problems...
If I connect the gamepad to my mac, I see 4 axis, with readings for each one, plus each button. Perfect!
If I connect it to the PI and run jstest, I only see 2 axis, with both joysticks reporting the same values. As if I only had one joystick.... Very weird..... Driver problems?
So when I try to multi-play, both players move when I use either joystick...
Next, I tried changing the 4 connection pins of the "player 2" joystick to 4 different pins on the gamepad. I was like - that's it! It's like having a joystick for player 1, and 4 buttons for player 2.
Guess what? Now one of the characters is controlled by of the joysticks as it should, but the other joystick is controlling both players. How about that!?
I am lost.... What should I do next?
@bogdanripa what are your controllers recognized as? When you go to start and configure input, what does it say?
You must also be very careful to be sure that both controller setups are wired 100% exactly the same. The wiring must match as well as the pin locations you plug the wires from the buttons into the usb encoder. Everything has to be identical.
Last question, does each of your controllers run to a separate usb encoder with its own usb connection to the pie?
Hi @TMNTturtlguy ,
Yes, all is identical. Also, there is a single board where all the wires come in, so only one USB connector to the pie.
If I "Configure Input", it says that "2 gamepads detected". As I hold a button, it displays "Twin USB gamepad", but as I go through the mapping procedure, it only configures "gamepad 1".
Then, as I configure the D-PAD UP/DOWN/LEFT/RIGHT, it says "AXIS 1-, 1+, 0-, 0+" for both joysticks...
Running "jstest /dev/input/js1" also shows only 2 axis (0 and 1), both of them being triggered when I move either joystick:
So at this point one would be - oh, it's a hardware problem. The gamepad is broken or the wiring is off.
So next, I connect the gamepad to my computer and run some similar tests:
And here everything looks just fine, all 4 axis are visible and function independently...
edmaul69 last edited by
@bogdanripa im half confused but here is a few things. When you setup a controller in emulationstation you only setup one controller. Then restart your system. Both controllers should be working fine. When you run a jstest, js0 is player 1 and js1 is player 2. Without knowing what your usb device is i couldnt tell you if there is a usbquirk or anything for it.
Trust me, I am more confused than you :)
I just did what you are proposing here and still nothing.
jstest /dev/input/js0 shows a "fictive" GPIO joystick that I don't have:
Joystick (GPIO Controller 1)
edmaul69 last edited by
@bogdanripa then you must have ran/ installed a script for the gpio controller and need to uninstall it.
edmaul69 last edited by edmaul69
@bogdanripa also js2 should show up as the player 2 joystick in your current setup
@bogdanripa have you set up joystick 2 in emulationstatio? You stated above that you see that 2 joysticks are recognized, but you only set up the buttons for one? You need to follow the same steps for the second controller. It will recognize the button presses as the same but it should now let you operate the 2 controllers independently.
It won't let me set-up the 2nd controller... And the fact that in command line (jstest) I see both controllers as one means this is a drivers problem...
Either way - I fixed it by simply rewiring the joystick buttons to map "regular" buttons and then set it up like this.
I have a few missing buttons now but at least all works just fine...
@bogdanripa sounds like you have a solution. If you continue to have issues I would recommend getting a separate encoder for each joystick/controls. The easyget zero delay USB encoders seem to work well. They are recognized as individual dragonrise controls.
absolut1978 last edited by
I have the same USB controller and finally got it recognized as 2 controllers in Emulationstation:
The solution: You must set a "quirk" for the usbhid module
Follow the instructions here:
Be aware that the vendor / product ID might differ. (Check via lsusb, the USB name for the double usb CY-2121 controller is "Personal Communications Systems, Inc")
I'm using RetroPi via Ubuntu 16.04, so here's how I managed this for Ubuntu:
- Search for the vendor ID / Product ID via lsusb
- create a file named "usbhid.config" under /etc/modprobe.d/"
- Add the following line to the file: "options usbhid quirks=0x0810:0xe001:0x00000040"
- 0810 is the VendorID
- e001 is the product ID
- Save the file
- run "sudo update-initramfs - u - k $(uname -r)"
- Restart your PC
- check via "cat /sys/mmodules/usbhid/parameters/quirks", if the quirk has been applied successfully
- Take al look into "/dev/input": There should be a js0 and a js1 now
com_gunner last edited by
@absolut1978 tks.! has worked on arch
sudo rmmod usbhid && sudo modprobe usbhid quirks=0x0810:0xe301:0x00000040
I was just detecting a 20 button joypad xD, If you pressed joypad1 up, player 2 also moved, and it is fixed.
My joypad is this
Twin USB Gamepad
T: Bus=08 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0810 ProdID=e301 Rev= 1.06
S: Product=Twin USB Gamepad
huevo0nd last edited by
@absolut1978 hi! I'm new and I'm a noob, sorry BTW haha, but what should I do if I try to update and it says that /boot/initrd.img-4.4.38-v7+ does not exist. Cannot update. I'm on a raspberry pi model 3B. Thanks!
@huevo0nd Please open a new topic with your problem and add the info requested in https://retropie.org.uk/forum/topic/3/read-this-first.