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

Dualshock controllers on 4.4 with 3B+



  • @dudleydes Thanks both for the insight and information. I'm also wondering if I have two different revisions of the controllers, but when I remap the buttons, I end up with both units being remapped. One right and one wrong. That's just a theory, I'll have to test it.

    Yeah, I learned the hard way last night that the joystick selection tool wasn't doing anything at all.

    Thanks, I really do appreciate the insight!



  • Same problem here, i have 4 dualshock controller and n64 reads 4 players on 2 controllers, 2 players being the motiom sensors; how can i disble motion sensors? Or any other solution?



  • Having the same issues too.
    Any solutions to this?



  • Just a note that this problem seems to also happen when using the Sony DS4 Bluetooth dongles. I am using two of those dongles to pair my two DS4 controllers. In previous versions of RetroPie, Emulationstation only detected 2 controllers, as expected. Now, in RetroPie 4.4, it says 4 controllers detected.

    It would be nice if Emulationstation could tell me the names of all the controllers it detected, instead of just a cryptic total number.

    I have some additional issues with the controller mapping procedure:

    • I cannot seem to cancel if I press the wrong button. How do I cancel out of the controller mapping screen without a keyboard?
    • What am I supposed to press to select 'OK' at the end? I always manically press different buttons, and then, twenty seconds later, the screen goes away by itself. Is there just a really long delay at the end of this mapping screen?
    • A, B, X, Y are meaningless, there should be an icon showing which button is the one on the bottom, top, left and right. E.g. A is the button on the right (circle), B on the bottom (cross), X on the top (triangle) and Y on the left (square). Currently this information is not displayed at all.


  • @rsn8887 When you finish selecting all buttons and the "OK" button is selected, you can move up and re-enter any buttons you mis-assigned. I think that if you also press "A" or "B" (can't remember) after they've been set, you may then move up and down to re-assign specific buttons.

    Yes, there is a bit of a delay after pressing OK. It's configuring all the supported emulators, etc.


  • Global Moderator

    @rsn8887 said in Dualshock controllers on 4.4 with 3B+:

    A, B, X, Y are meaningless, there should be an icon showing which button is the one on the bottom, top, left and right. E.g. A is the button on the right (circle), B on the bottom (cross), X on the top (triangle) and Y on the left (square). Currently this information is not displayed at all.

    agreed. issue related to this:
    https://github.com/RetroPie/EmulationStation/pull/446
    and also
    https://github.com/RetroPie/EmulationStation/issues/442



  • I have to revise my earlier statement regarding the official Sony DS4 USB dongles I am using. After updating from binaries and rebooting, it behaves correctly now. Only two controllers are detected not 4. I am not sure if it was the update or just the reboot that fixed it.

    EDIT: See my answer below. It is not fixed. I just forgot I unplugged my second controller dongle.


  • Global Moderator

    @rsn8887 Did you update also the kernel and the OS packages ?



  • I don’t know. I selected the update option in the Retropie setup menu, then it asked me if I want to update from binary or source. I selected binary. I am not sure if that did a kernel or OS update?

    Is there a special, separate, option to update kernel and OS


  • Global Moderator

    @rsn8887 said in Dualshock controllers on 4.4 with 3B+:

    Is there a special, separate, option to update kernel and OS

    When you choose to - globally - update, there's a prompt if you Want to upgrade the underlying OS packages and the kernel. But that doesn't happen when you upgrade just one package - or the RetroPie script itself.



  • @mitu I am pretty sure I selected yes there but I don’t remember that question coming up. I did not just update one single package that is for sure.

    What do you mean by -globally update? I selected some option like “update all packages” I didn’t see a global update option in the Retropie setup menu.


  • Global Moderator

    @rsn8887 When I say global update, I'm referring to the Update option in the global script menu.

    Global update

    When you select it, the RetroPie setup script is updated first, some post-update hooks are executed, then - before the packages are updated - there is a prompt to update the OS

    OS Update

    Regardless of your choice in this setup, all installed packages are subsequently updated (from binary).



  • Yes I chose that option, I must have pressed yes to the kernel question, but don't remember doing it.



  • Nevermind I had accidentally removed the second dongle.

    So it is still completely broken both using internal Bluetooth, external BT dongle or official Sony DS4 dongle. The problem is that a single DS4 controller shows up as two controllers, and one of those detected controllers reacts only to motion controls, e.g. tilting the controller.

    And yes it is still broken both for the Sony DS4 dongle, as well as when using the regular Bluetooth pairing.

    Even worse: some emulators such as AdvanceMAME react to BOTH joy1 (tilt/motion controls) and joy2 (regular buttons etc) when trying to map controls inside the emulator, and there’s no way to turn that off that I know off.



  • any fix on this?



  • I wonder if a rule along the lines of the ones here
    https://github.com/denilsonsa/udev-joystick-blacklist

    could be used to disable the erroneous additional controllers that are linked to motion controls?

    Maybe adding a file named /etc/udev/rules.d/51-these-are-not-joysticks-rm.ruleswith the content

    SUBSYSTEM=="input", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", NAME=="Sony PLAYSTATION(R)3 Controller Motion Sensors", ENV{ID_INPUT_JOYSTICK}=="?*", ENV{ID_INPUT_JOYSTICK}=""
    
    SUBSYSTEM=="input", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", NAME=="Sony PLAYSTATION(R)3 Controller Motion Sensors", KERNEL=="js[0-9]*", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""
    

    Would help for DS3, and maybe adding two similar lines for DS4, with the correct names and ids might fix this problem. I don't know the names and ids for DS4 at the moment.


  • Global Moderator

    @rsn8887 I don't think they're not erroneus, the choice was deliberate to make them like this. The onus lies in the input processing libraries - like SDL - to make use of them.



  • Maybe in some distant future SDL and all the emulators will find some approach for correct use of the motion controls. But for now, I think the best approach is just to disable them altogether. The nice thing about these rules is that they can be commented out very easily.


  • Global Moderator

    @rsn8887 I agree, it's a quick fix that's easy to implement (maybe toggled on/off).



  • EDIT: The instructions below don't work. See the latest post in this thread for the correct instructions.

    I did some reading and I think the fix involves creating a new file, named
    /etc/udev/rules.d/81-disable-DS3-and-DS4-motion-controls.rules

    with content

    #disable DS3 motion controls
    SUBSYSTEM=="input", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", NAME=="Sony PLAYSTATION(R)3 Controller Motion Sensors", ENV{ID_INPUT_JOYSTICK}=="?*", ENV{ID_INPUT_JOYSTICK}=""
    
    SUBSYSTEM=="input", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", NAME=="Sony PLAYSTATION(R)3 Controller Motion Sensors", KERNEL=="js[0-9]*", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""
    
    #disable DS4 motion controls
    SUBSYSTEM=="input", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", NAME=="ZZZZ", ENV{ID_INPUT_JOYSTICK}=="?*", ENV{ID_INPUT_JOYSTICK}=""
    
    SUBSYSTEM=="input", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", NAME=="ZZZZ", KERNEL=="js[0-9]*", RUN+="/bin/rm %E{DEVNAME}", ENV{ID_INPUT_JOYSTICK}=""
    

    Where XXXX, YYYY, and ZZZZ are the as-of-yet-unknown strings idVendor, idProduct, and name of the motion control device linked to a DS4 Controller. These variables could be determined if someone with a DS4 connected could run cat /proc/bus/input/devices and post the output here. More lines might be neccessary if the DS4 Controller strings change depending on whether it is connected via BT, USB cable or Sony dongle.

    The idVendor and idProduct parts might even be removed, and we might only match the name.

    I suppose the file should have root permissions (?).

    I have a hunch this might work but haven't tested it.

    Further reading:
    https://hackaday.com/2009/09/18/how-to-write-udev-rules/
    and
    https://github.com/denilsonsa/udev-joystick-blacklist



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.