Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

Controller config - no longer working



  • Pi Model or other hardware: 3B+
    Power Supply used: 2.5v 5a official Raspberry supply
    RetroPie Version Used (eg 3.6, 3.8.1, 4.1 - do not write latest): 4.4
    Built From: Download from Retropie website
    USB Devices connected: Keyboard, 1x Mega Drive/Genesis clone 6 button controller, 2x iNNEXT SNES clone controllers
    Controller used: As above
    Error messages received: None
    Emulator: Defaults for SNES, Mega Drive, PSX, N64

    I've posted a few times over the last week of so since I broke my original Pi after snapping the SD card so thank you to everyone that has helped me so far. I've just about finished rebuilding my system, but I have some final nagging problems to resolve and I can't work out what to do. Previously this all worked fine, and I have rebuilt the system exactly as before, and run all update scripts to make sure I am the latest versions of everything.

    Firstly, Sega Mega Drive/Genesis and Nintendo SNES clone controllers

    The Mega Drive controller is a RetroFlag one, supplied with the Mega Pi Case. The SNES ones are manufactured by iNNEXT

    With both of these I cannot get the hot key combinations to work on any system. Start + Select for quitting doesn't work, nor the load or save game combos. I can't get into the green screen menu (Select + Y I think!) either. They do work to control the games (e.g. I can move Sonic and Mario around the screen) but nothing else.

    Secondly, Dual Shock 4 having odd problems

    My two DS4 controllers previously worked flawlessly. Now, although I can connect both to my Pi at the same time, and use them both to control the menus in Emulation Station, I can't get them to work together in a game. Mario Kart 64 for example, only Player 1 can select a character and start the game. Player 2's DS4 just doesn't do anything, but head back to the Emulation Station home screen and suddenly it works. Previously I could play 2 player games with this set up easily.

    For PSX games, the DS4 no longer does anything. The games just won't respond to any button presses at all. I can't quit the game, can't press Start to begin the game. Nothing works where it previously did.

    I have set up all controllers using the Config Input menu in ES, and all buttons are mapped correctly and the same as previously. I always leave Hot Key as undefined and say Yes to the prompt about the system defining it.

    What can I do to reset all controller configs?
    Is there anything else I can try to get these all working as they were previously?

    Thanks


  • Global Moderator

    @MisterMints said in Controller config - no longer working:

    What can I do to reset all controller configs?

    Use the RetroPie script and select the Emulationstation package, then you'll have a 'reset controller' option - https://retropie.org.uk/docs/EmulationStation/#controller-configs.

    For the controller problems

    • you probably didn't map the Hotkey for the SNES controllers, that's why any Select+ <key> combinations (exit, save state, load state, open RGUI) don't work. Re-map their input, then skip the Hotkey selection and you'll be asked if you want to use Select as hotkey - choose yes.
    • the DS4 (and DS3) are detected as 2 controllers in the new Raspbian Stretch - a normal controller and a set of motion sensors. See this topic for an explanation and a fix there.


  • @mitu said in Controller config - no longer working:

    @MisterMints said in Controller config - no longer working:

    What can I do to reset all controller configs?

    Use the RetroPie script and select the Emulationstation package, then you'll have a 'reset controller' option - https://retropie.org.uk/docs/EmulationStation/#controller-configs.

    For the controller problems

    • you probably didn't map the Hotkey for the SNES controllers, that's why any Select+ <key> combinations (exit, save state, load state, open RGUI) don't work. Re-map their input, then skip the Hotkey selection and you'll be asked if you want to use Select as hotkey - choose yes.
    • the DS4 (and DS3) are detected as 2 controllers in the new Raspbian Stretch - a normal controller and a set of motion sensors. See this topic for an explanation and a fix there.

    Thanks @mitu

    I had left the HotKeyundefined, and then pressed Yes to the prompt to go with the default setting, but for whatever reason that didn't work. I will give clearing the complete config a go and start again.

    Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?

    You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!

    Thanks


  • Global Moderator

    @MisterMints said in Controller config - no longer working:

    Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?

    It's registering as an Xbox 360 pad because that's what the device reports - probably just to be compatible with Windows/XBox. I wouldn't worry too much, as long as it's detected and configured properly.

    You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!

    The post I mentioned shows you which file you have to create from the command line (after you exit Emulationstation) and the contents. So exit ES and execute

    sudo nano /etc/udev/rules.d/51-disable-DS3-and-DS4-motion-controls.rules
    

    this will open the text editor and you can insert the lines below

    SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
    

    after that save the file (Ctrl+O), then exit the editor (Ctrl+X) and reboot your system (sudo reboot).



  • @mitu said in Controller config - no longer working:

    @MisterMints said in Controller config - no longer working:

    Just a note on the Mega Drive pad - the Pi is registering that as an Xbox 360 pad and I'm not sure whether that will make any difference to the way it behaves, or the way Retropie deals with it. Anything I should change on this, or any reason to?

    It's registering as an Xbox 360 pad because that's what the device reports - probably just to be compatible with Windows/XBox. I wouldn't worry too much, as long as it's detected and configured properly.

    You'll have to excuse my ignorance regarding the DS4s - what am I looking at on the links you provided, and what am I supposed to do? I have very little experience in Linux and using the command prompts, so an idiot's step by step guide would be appreciated!

    The post I mentioned shows you which file you have to create from the command line (after you exit Emulationstation) and the contents. So exit ES and execute

    sudo nano /etc/udev/rules.d/51-disable-DS3-and-DS4-motion-controls.rules
    

    this will open the text editor and you can insert the lines below

    SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
    

    after that save the file (Ctrl+O), then exit the editor (Ctrl+X) and reboot your system (sudo reboot).

    Thanks @mitu

    Does it matter where I stick that SUBSYSTEMline in the file? Or just write it anywhere?

    Thanks


  • Global Moderator

    @MisterMints said in Controller config - no longer working:

    Does it matter where I stick that SUBSYSTEMline in the file? Or just write it anywhere?

    I don't understand. Since this is a new file, there isn't anything there, just add everything on one line, exactly as it appears.



  • @mitu said in Controller config - no longer working:

    @MisterMints said in Controller config - no longer working:

    Does it matter where I stick that SUBSYSTEMline in the file? Or just write it anywhere?

    I don't understand. Since this is a new file, there isn't anything there, just add everything on one line, exactly as it appears.

    Sorry, misunderstanding on my part - because you said "insert the lines below" I thought that meant the file already existed and I had to insert that line. Rather it creating a new file and then just typing that in.

    Anyway, done now, but it hasn't changed anything.

    Mario Kart 64 - player 2 still can't control anything so can't select a character and the Hotkey combinations don't do anything (other than Select + Start exiting the game). I have just remapped the DS4s and absolutely made sure not to define a Hotkey and select Yes to the system prompt to enable default set up.


  • Global Moderator

    @MisterMints What emulator are you using ? I think Mupen64plus (the default N64 emulator) might need some adjustments to the input configuration when using multiple controllers.



  • @mitu said in Controller config - no longer working:

    @MisterMints What emulator are you using ? I think Mupen64plus (the default N64 emulator) might need some adjustments to the input configuration when using multiple controllers.

    mupen64plus-gles2n64

    Its the only one I could get to work consistently without too much stutter, messed up graphics or crashes on the N64 games I tend to play. Super Mario 64 for example is just unplayable on anything else.

    What adjustments would I need to make @mitu ?



  • I've found this thread on Reddit which suggests I need to amend the start and select buttons in the config file.

    Mine currently read as:

    input_start_btn = "9"
    input_exit_emulator_btn = "9"
    

    but the Reddit thread suggests these should be two different numbers. I'm not really sure what to do with this information, or what to try next to get this all working like it used to.


  • Global Moderator

    @MisterMints The format of the button configuration for Mupen64plus is described in the docs - check if the generated configuration file has settings for both your controllers.



  • @mitu said in Controller config - no longer working:

    @MisterMints The format of the button configuration for Mupen64plus is described in the docs - check if the generated configuration file has settings for both your controllers.

    @mitu I assume that Wireless Controller is the one I should be looking for (since the DS4s are wireless and that's what shows up when trying to configure them through the GUI).

    This is what shows up in the config file at /opt/retropie/configs/n64/mupen64plus.cfg:

    [Input-SDL-Control2]
    
    # Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
    version = 2
    # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
    mode = 2
    # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
    device = 1
    # SDL joystick name (or Keyboard)
    name = "Wireless Controller"
    # Specifies whether this controller is 'plugged in' to the simulated N64
    plugged = True
    # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
    plugin = "2"
    # If True, then mouse buttons may be used with this controller
    mouse = False
    # Scaling factor for mouse movements.  For X, Y axes.
    MouseSensitivity = "2.00,2.00"
    # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
    AnalogDeadzone = "4096,4096"
    # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
    AnalogPeak = "32768,32768"
    # Digital button configuration mappings
    DPad R = "hat(0 Right)"
    DPad L = "hat(0 Left)"
    DPad D = "hat(0 Down)"
    DPad U = "hat(0 Up)"
    Start = "button(9)"
    Z Trig = "button(6)"
    B Button = "button(3)"
    A Button = "button(0)"
    C Button R = "axis(3+)"
    C Button L = "axis(3-)"
    C Button D = "button(1) axis(4+)"
    C Button U = "button(2) axis(4-)"
    R Trig = "button(5)"
    L Trig = "button(4)"
    Mempak switch = "button(11)"
    Rumblepak switch = "button(12)"
    # Analog axis configuration mappings
    X Axis = "axis(0-,0+)"
    Y Axis = "axis(1-,1+)"
    
    
    [Input-SDL-Control3]
    
    # Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
    version = 2
    # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
    mode = 2
    # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
    device = 2
    # SDL joystick name (or Keyboard)
    name = "Wireless Controller"
    # Specifies whether this controller is 'plugged in' to the simulated N64
    plugged = True
    # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
    plugin = "2"
    # If True, then mouse buttons may be used with this controller
    mouse = False
    # Scaling factor for mouse movements.  For X, Y axes.
    MouseSensitivity = "2.00,2.00"
    # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
    AnalogDeadzone = "4096,4096"
    # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
    AnalogPeak = "32768,32768"
    # Digital button configuration mappings
    DPad R = "hat(0 Right)"
    DPad L = "hat(0 Left)"
    DPad D = "hat(0 Down)"
    DPad U = "hat(0 Up)"
    Start = "button(9)"
    Z Trig = "button(6)"
    B Button = "button(3)"
    A Button = "button(0)"
    C Button R = "axis(3+)"
    C Button L = "axis(3-)"
    C Button D = "button(1) axis(4+)"
    C Button U = "button(2) axis(4-)"
    R Trig = "button(5)"
    L Trig = "button(4)"
    Mempak switch = "button(11)"
    Rumblepak switch = "button(12)"
    # Analog axis configuration mappings
    X Axis = "axis(0-,0+)"
    Y Axis = "axis(1-,1+)"
    
    
    [Input-SDL-Control4]
    
    # Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
    version = 2
    # Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
    mode = 2
    # Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
    device = 3
    # SDL joystick name (or Keyboard)
    name = "Wireless Controller Motion Sensors"
    # Specifies whether this controller is 'plugged in' to the simulated N64
    plugged = True
    # Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
    plugin = "2"
    # If True, then mouse buttons may be used with this controller
    mouse = False
    # Scaling factor for mouse movements.  For X, Y axes.
    MouseSensitivity = "2.00,2.00"
    # The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
    AnalogDeadzone = "4096,4096"
    # An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
    AnalogPeak = "32768,32768"
    # Digital button configuration mappings
    DPad R = "hat(0 Right)"
    DPad L = "hat(0 Left)"
    DPad D = "hat(0 Down)"
    DPad U = "hat(0 Up)"
    Start = "button(9)"
    Z Trig = "button(6)"
    B Button = "button(3)"
    A Button = "button(0)"
    C Button R = "axis(3+)"
    C Button L = "axis(3-)"
    C Button D = "button(1) axis(4+)"
    C Button U = "button(2) axis(4-)"
    R Trig = "button(5)"
    L Trig = "button(4)"
    Mempak switch = "button(11)"
    Rumblepak switch = "button(12)"
    # Analog axis configuration mappings
    X Axis = "axis(0-,0+)"
    Y Axis = "axis(1-,1+)"
    


  • One other thing to mention...

    The "press A to configure" option while the game starts doesn't work on the N64 with DS4 either.

    I'm out of my depth here @mitu. I don't understand what I should be checking for and editing with that N64 document page and config files


  • Global Moderator

    It looks like the settings for ignoring the 'Motion Sensors' did not work. I'll test it myself with a DS4.
    In your configuration file, there's a missing entry for the 1st controller ([Input-SDL-Control1]), you either didn't paste it or it's not present. When you're trying out the 2nd player in Mupen64plus, do you also have the other controllers (SNES Innext) plugged in ? Did you try with just the BT controllers connected to see if the 2nd player appears ?



  • @mitu said in Controller config - no longer working:

    It looks like the settings for ignoring the 'Motion Sensors' did not work. I'll test it myself with a DS4.
    In your configuration file, there's a missing entry for the 1st controller ([Input-SDL-Control1]), you either didn't paste it or it's not present.

    [Input-SDL-Control1] is in the mupen64plus.cfg file, I must have just not copied it across.

    When you're trying out the 2nd player in Mupen64plus, do you also have the other controllers (SNES Innext) plugged in ? Did you try with just the BT controllers connected to see if the 2nd player appears ?

    I have done it with the USB controls connected and unconnected. No difference.


  • Global Moderator

    OK, so I connected a DS4 and - as expected - the systems sees both the Motion Sensors and the Wireless Controller as gamepads. After adding the .rules file and rebooting, the Motion Sensors are gone and they don't appear as an extra gamepad/joystick. When you configure your DS4 in Emulationstation, how many gamepads it reports as detected ? Before the .rules file was added, mine reported 2, after it reported only 1.

    Take a look at the N64 .cfg file you pasted and pay attention in each of the [Input-SDL-ControlX] sections, to the device = <X> line. Each section assigns a player to gamepad. The device = <X> instructs the emulator to look for the device numbered <X> (numbering starts from 0).
    In your file, I see that Wireless Controller Motion Sensors appears in the list, but it shouldn't, since it's not a real gamepad, so the configuration file has been generated when the motion sensors where available.
    I'd suggest to rename this .cfg file, then re-install the Mupen64-plus emulator (so the cfg file gets generated again) and then re-configure your DS4 controller. Check the file and see if the controller is correctly registered - i.e. without the Motion Sensors - and how many controllers are registered - i.e. how many [Input-SDL-ControlX] sections are saved.

    Try a N64 game and see if both controllers work. Unfortunately I don't have 2 DS4, just one, so I can't test it myself.



  • @mitu said in Controller config - no longer working:

    OK, so I connected a DS4 and - as expected - the systems sees both the Motion Sensors and the Wireless Controller as gamepads. After adding the .rules file and rebooting, the Motion Sensors are gone and they don't appear as an extra gamepad/joystick. When you configure your DS4 in Emulationstation, how many gamepads it reports as detected ? Before the .rules file was added, mine reported 2, after it reported only 1.

    Take a look at the N64 .cfg file you pasted and pay attention in each of the [Input-SDL-ControlX] sections, to the device = <X> line. Each section assigns a player to gamepad. The device = <X> instructs the emulator to look for the device numbered <X> (numbering starts from 0).
    In your file, I see that Wireless Controller Motion Sensors appears in the list, but it shouldn't, since it's not a real gamepad, so the configuration file has been generated when the motion sensors where available.
    I'd suggest to rename this .cfg file, then re-install the Mupen64-plus emulator (so the cfg file gets generated again) and then re-configure your DS4 controller. Check the file and see if the controller is correctly registered - i.e. without the Motion Sensors - and how many controllers are registered - i.e. how many [Input-SDL-ControlX] sections are saved.

    Try a N64 game and see if both controllers work. Unfortunately I don't have 2 DS4, just one, so I can't test it myself.

    I have a theory then....

    I'm sure when I configured the first DS4 it said there were 3 pads connected. 1 being the SNES I used to navigate the menus and the other being my MegaPi case.

    I may need to clear all the config files and reinstall the emulator as you've said, but take the Pi out of the case (or at least disconnect the USBs) and start again.

    Will try later and report back



  • Hi @mitu

    I think its (almost) solved now!! Thank you for help!

    I disconnected everything, except my keyboard, uninstalled mupen64, disconnected and deleted all Bluetooth devices and controller configs and then started again.

    I though I should also redo the ignore DS3/DS4 rule, so followed the steps to complete that, and this is where I noticed a (probable) major flaw. My file contained the following:

    SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+=="/bin/rm %E{DEVNAME}"
    

    When it actually should've contained this:

    SUBSYSTEM=="input", ATTRS{name}=="*Motion Sensors", RUN+="/bin/rm %E{DEVNAME}"
    

    Notice the extra = after RUN+? Looks like that could be what made it not work.

    Anyway, removed the extra = and saved the file, rebooted and remapped my DS4s, configured them and fired up Mario Kart 64 and it worked.

    Couple of issues remain though! mupen64 still does not respond to any HotKey+ combinations other than Select+Start but I can probably live with that.

    When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.

    All inconveniences rather than show stoppers, but if there is any way to prevent the config dialog opening each start up then I'm happy to hear all about it!

    Thanks again


  • Global Moderator

    @MisterMints said in Controller config - no longer working:

    When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.

    That's the default behavior. I remember seeing somewhere a workaround - configuring a keyboard as a gamepad in the system once, then when ES boots it doesn't ask for a controller to be selected.

    Glad you got it working out. You can probably make Start + Select working again - how are you 'skipping' the Hotkey selection in the input configuration dialog ? Are you using the D-pad to skip over, or long-press another button ?



  • @mitu said in Controller config - no longer working:

    @MisterMints said in Controller config - no longer working:

    When I start the system up it now always complains that no gamepad is connected and asks me to configure one. As soon as I turn a DS4 on and tap a button this goes away, but it is slightly irritating when it just used to sit at the main menu until I connected something.

    That's the default behavior. I remember seeing somewhere a workaround - configuring a keyboard as a gamepad in the system once, then when ES boots it doesn't ask for a controller to be selected.

    Glad you got it working out. You can probably make Start + Select working again - how are you 'skipping' the Hotkey selection in the input configuration dialog ? Are you using the D-pad to skip over, or long-press another button ?

    @mitu Long pressing down on the D-pad, it then says not defined, I hit OK, then a pop up comes up about No Hotkey enabled - set up the default (or whatever the wording is) and I hit Yes/OK again


Log in to reply
 

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.