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

RetroArch isn't mapping the GamePad buttons correctly - RetroPie 4.4



  • Hey guys,

    I'm using a generic Bluetooth controller that used to work in RetroPie 3.7. I've successfully paired and configured the controller but when I go to actually play a game it seems that the buttons aren't correctly mapped to the game. They do work correctly in EmulationStation.

    Looking through a verbose output of runcommand.log I see the following:

    [libretro INFO] Frontend supports RGB565 - will use that instead of XRGB1555.
    [INFO] Environ PERFORMANCE_LEVEL: 7.
    [INFO] Loading content file: /home/pi/RetroPie/roms/snes/Castlevania - Dracula X.smc.
    [INFO] Did not find a valid content patch.
    [INFO] CRC32: 0x7c4887e1 .
    [INFO] Environ SET_INPUT_DESCRIPTORS:
    [INFO] 	RetroPad, User 1, Button "B (bottom)" => "B"
    [INFO] 	RetroPad, User 1, Button "Y (left)" => "Y"
    [INFO] 	RetroPad, User 1, Button "Select" => "Select"
    [INFO] 	RetroPad, User 1, Button "Start" => "Start"
    [INFO] 	RetroPad, User 1, Button "D-Pad Up" => "D-Pad Up"
    [INFO] 	RetroPad, User 1, Button "D-Pad Down" => "D-Pad Down"
    [INFO] 	RetroPad, User 1, Button "D-Pad Left" => "D-Pad Left"
    [INFO] 	RetroPad, User 1, Button "D-Pad Right" => "D-Pad Right"
    [INFO] 	RetroPad, User 1, Button "A (right)" => "A"
    [INFO] 	RetroPad, User 1, Button "X (up)" => "X"
    [INFO] 	RetroPad, User 1, Button "L" => "L"
    [INFO] 	RetroPad, User 1, Button "R" => "R"
    

    Hardware configuration is below:

    Pi Model or other hardware: 2 B+
    Power Supply used: USB
    RetroPie Version Used : 4.4
    Built From: Official image - retropie-4.4-rpi2_rpi3.img - Upgraded after install using built in scripts


  • Global Moderator

    Please post the complete log on pastebin.com. Did you configre your controller in Emulationstation, using the Input configuration ?



  • Sure thing... https://pastebin.com/GYaCLxKH

    And yes I used the input configuration process within EmulationStation and it works great within EmulationStation's UI. I believe the problem lies with RetroArch somewhere.


  • Global Moderator

    @ANamelessDrake Can you try to unplug your keyboard - it's detected as P1.



  • It's completely unplugged. Is there a way I can force it to rescan the dev bus?



  • Also I think it's marking the GamePad as a keyboard device not a joystick. That's why it's showing up as a keyboard attached.

    Not sure if that's the problem or not though.


  • Global Moderator

    @ANamelessDrake said in RetroArch isn't mapping the GamePad buttons correctly - RetroPie 4.4:

    It's completely unplugged. Is there a way I can force it to rescan the dev bus?

    There's no need for that. Maybe your gamepad is acting also like a keyboard, but the thing is there are 2 joysticks being detected, based on the log.

    What buttons are mis-matched in your controller configuration ?



  • The d-pad seems to be mapped correctly. Literally everything else seems to be incorrect.

    Nothing else is attached or paired with the system so I can't figure out why it's detecting two input devices.



  • root@retropie:~# lshw -short
    H/W path  Device  Class          Description
    ============================================
                      system         Raspberry Pi 2 Model B Rev 1.1
    /0                bus            Motherboard
    /0/0              processor      cpu
    /0/1              processor      cpu
    /0/2              processor      cpu
    /0/3              processor      cpu
    /0/4              memory         748MiB System memory
    /1        usb1    bus            DWC OTG Controller
    /1/1              bus            SMC9514 Hub
    /1/1/1            generic        SMSC9512/9514 Fast Ethernet Adapter
    /1/1/3            communication  Bluetooth Dongle (HCI mode)
    /1/1/5            generic        802.11n WLAN Adapter
    /2        wlan0   network        Wireless interface
    /3        eth0    network        Ethernet interface
    
    
    root@retropie:~# hwinfo --short
    cpu:                                                            
                           CPU
                           CPU
                           CPU
                           CPU
    keyboard:
      /dev/input/event0    Gamepad
    network:
      eth0                 Standard Microsystems SMSC9512/9514 Fast Ethernet Adapter
      wlan0                Edimax EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
    network interface:
      eth0                 Ethernet network interface
      wlan0                WLAN network interface
      lo                   Loopback network interface
    disk:
      /dev/ram11           Disk
      /dev/ram2            Disk
      /dev/ram0            Disk
      /dev/ram9            Disk
      /dev/ram7            Disk
      /dev/ram14           Disk
      /dev/ram5            Disk
      /dev/ram12           Disk
      /dev/ram3            Disk
      /dev/ram10           Disk
      /dev/ram1            Disk
      /dev/ram8            Disk
      /dev/ram15           Disk
      /dev/ram6            Disk
      /dev/mmcblk0         Disk
      /dev/ram13           Disk
      /dev/ram4            Disk
    partition:
      /dev/mmcblk0p1       Partition
      /dev/mmcblk0p2       Partition
    usb controller:
                           ARM USB 0
    hub:
                           Linux Foundation 2.0 root hub
                           Standard Microsystems SMC9514 Hub
    memory:
                           Main Memory
    bluetooth:
                           Cambridge Silicon Radio Bluetooth Dongle (HCI mode)
    
    


  • What's weird is that the hardware is being detected by udev and mapping it to /dev/input/event0 but it's also creating a joystick device.

    ls /dev/input/
    event0	js0  mice  mouse0
    

    I don't know how to fix it yet but this is likely the problem.

    jstest responds as we would expect for /dev/input/js0 but not for /dev/input/event0

    I have a feeling that RetroArch is detecting the device as the system is "/dev/input/event0" but I have no evidence of that yet.

    Any ideas?



  • can you show the output of evtest



  • Sure thing!

    evtest /dev/input/event0
    Input driver version is 1.0.1
    Input device ID: bus 0x5 vendor 0x1949 product 0x402 version 0x11b
    Input device name: "Gamepad"
    Supported events:
      Event type 0 (EV_SYN)
      Event type 1 (EV_KEY)
        Event code 1 (KEY_ESC)
        Event code 2 (KEY_1)
        Event code 3 (KEY_2)
        Event code 4 (KEY_3)
        Event code 5 (KEY_4)
        Event code 6 (KEY_5)
        Event code 7 (KEY_6)
        Event code 8 (KEY_7)
        Event code 9 (KEY_8)
        Event code 10 (KEY_9)
        Event code 11 (KEY_0)
        Event code 12 (KEY_MINUS)
        Event code 13 (KEY_EQUAL)
        Event code 14 (KEY_BACKSPACE)
        Event code 15 (KEY_TAB)
        Event code 16 (KEY_Q)
        Event code 17 (KEY_W)
        Event code 18 (KEY_E)
        Event code 19 (KEY_R)
        Event code 20 (KEY_T)
        Event code 21 (KEY_Y)
        Event code 22 (KEY_U)
        Event code 23 (KEY_I)
        Event code 24 (KEY_O)
        Event code 25 (KEY_P)
        Event code 26 (KEY_LEFTBRACE)
        Event code 27 (KEY_RIGHTBRACE)
        Event code 28 (KEY_ENTER)
        Event code 29 (KEY_LEFTCTRL)
        Event code 30 (KEY_A)
        Event code 31 (KEY_S)
        Event code 32 (KEY_D)
        Event code 33 (KEY_F)
        Event code 34 (KEY_G)
        Event code 35 (KEY_H)
        Event code 36 (KEY_J)
        Event code 37 (KEY_K)
        Event code 38 (KEY_L)
        Event code 39 (KEY_SEMICOLON)
        Event code 40 (KEY_APOSTROPHE)
        Event code 41 (KEY_GRAVE)
        Event code 42 (KEY_LEFTSHIFT)
        Event code 43 (KEY_BACKSLASH)
        Event code 44 (KEY_Z)
        Event code 45 (KEY_X)
        Event code 46 (KEY_C)
        Event code 47 (KEY_V)
        Event code 48 (KEY_B)
        Event code 49 (KEY_N)
        Event code 50 (KEY_M)
        Event code 51 (KEY_COMMA)
        Event code 52 (KEY_DOT)
        Event code 53 (KEY_SLASH)
        Event code 54 (KEY_RIGHTSHIFT)
        Event code 55 (KEY_KPASTERISK)
        Event code 56 (KEY_LEFTALT)
        Event code 57 (KEY_SPACE)
        Event code 58 (KEY_CAPSLOCK)
        Event code 59 (KEY_F1)
        Event code 60 (KEY_F2)
        Event code 61 (KEY_F3)
        Event code 62 (KEY_F4)
        Event code 63 (KEY_F5)
        Event code 64 (KEY_F6)
        Event code 65 (KEY_F7)
        Event code 66 (KEY_F8)
        Event code 67 (KEY_F9)
        Event code 68 (KEY_F10)
        Event code 69 (KEY_NUMLOCK)
        Event code 70 (KEY_SCROLLLOCK)
        Event code 71 (KEY_KP7)
        Event code 72 (KEY_KP8)
        Event code 73 (KEY_KP9)
        Event code 74 (KEY_KPMINUS)
        Event code 75 (KEY_KP4)
        Event code 76 (KEY_KP5)
        Event code 77 (KEY_KP6)
        Event code 78 (KEY_KPPLUS)
        Event code 79 (KEY_KP1)
        Event code 80 (KEY_KP2)
        Event code 81 (KEY_KP3)
        Event code 82 (KEY_KP0)
        Event code 83 (KEY_KPDOT)
        Event code 85 (KEY_ZENKAKUHANKAKU)
        Event code 86 (KEY_102ND)
        Event code 87 (KEY_F11)
        Event code 88 (KEY_F12)
        Event code 89 (KEY_RO)
        Event code 90 (KEY_KATAKANA)
        Event code 91 (KEY_HIRAGANA)
        Event code 92 (KEY_HENKAN)
        Event code 93 (KEY_KATAKANAHIRAGANA)
        Event code 94 (KEY_MUHENKAN)
        Event code 95 (KEY_KPJPCOMMA)
        Event code 96 (KEY_KPENTER)
        Event code 97 (KEY_RIGHTCTRL)
        Event code 98 (KEY_KPSLASH)
        Event code 99 (KEY_SYSRQ)
        Event code 100 (KEY_RIGHTALT)
        Event code 102 (KEY_HOME)
        Event code 103 (KEY_UP)
        Event code 104 (KEY_PAGEUP)
        Event code 105 (KEY_LEFT)
        Event code 106 (KEY_RIGHT)
        Event code 107 (KEY_END)
        Event code 108 (KEY_DOWN)
        Event code 109 (KEY_PAGEDOWN)
        Event code 110 (KEY_INSERT)
        Event code 111 (KEY_DELETE)
        Event code 113 (KEY_MUTE)
        Event code 114 (KEY_VOLUMEDOWN)
        Event code 115 (KEY_VOLUMEUP)
        Event code 116 (KEY_POWER)
        Event code 117 (KEY_KPEQUAL)
        Event code 119 (KEY_PAUSE)
        Event code 121 (KEY_KPCOMMA)
        Event code 122 (KEY_HANGUEL)
        Event code 123 (KEY_HANJA)
        Event code 124 (KEY_YEN)
        Event code 125 (KEY_LEFTMETA)
        Event code 126 (KEY_RIGHTMETA)
        Event code 127 (KEY_COMPOSE)
        Event code 128 (KEY_STOP)
        Event code 129 (KEY_AGAIN)
        Event code 130 (KEY_PROPS)
        Event code 131 (KEY_UNDO)
        Event code 132 (KEY_FRONT)
        Event code 133 (KEY_COPY)
        Event code 134 (KEY_OPEN)
        Event code 135 (KEY_PASTE)
        Event code 136 (KEY_FIND)
        Event code 137 (KEY_CUT)
        Event code 138 (KEY_HELP)
        Event code 139 (KEY_MENU)
        Event code 140 (KEY_CALC)
        Event code 142 (KEY_SLEEP)
        Event code 144 (KEY_FILE)
        Event code 150 (KEY_WWW)
        Event code 152 (KEY_SCREENLOCK)
        Event code 155 (KEY_MAIL)
        Event code 158 (KEY_BACK)
        Event code 159 (KEY_FORWARD)
        Event code 161 (KEY_EJECTCD)
        Event code 163 (KEY_NEXTSONG)
        Event code 164 (KEY_PLAYPAUSE)
        Event code 165 (KEY_PREVIOUSSONG)
        Event code 166 (KEY_STOPCD)
        Event code 171 (KEY_CONFIG)
        Event code 172 (KEY_HOMEPAGE)
        Event code 173 (KEY_REFRESH)
        Event code 176 (KEY_EDIT)
        Event code 177 (KEY_SCROLLUP)
        Event code 178 (KEY_SCROLLDOWN)
        Event code 179 (KEY_KPLEFTPAREN)
        Event code 180 (KEY_KPRIGHTPAREN)
        Event code 183 (KEY_F13)
        Event code 184 (KEY_F14)
        Event code 185 (KEY_F15)
        Event code 186 (KEY_F16)
        Event code 187 (KEY_F17)
        Event code 188 (KEY_F18)
        Event code 189 (KEY_F19)
        Event code 190 (KEY_F20)
        Event code 191 (KEY_F21)
        Event code 192 (KEY_F22)
        Event code 193 (KEY_F23)
        Event code 194 (KEY_F24)
        Event code 207 (KEY_PLAY)
        Event code 217 (KEY_SEARCH)
        Event code 240 (KEY_UNKNOWN)
        Event code 272 (BTN_LEFT)
        Event code 273 (BTN_RIGHT)
        Event code 274 (BTN_MIDDLE)
        Event code 304 (BTN_SOUTH)
        Event code 305 (BTN_EAST)
        Event code 306 (BTN_C)
        Event code 307 (BTN_NORTH)
        Event code 308 (BTN_WEST)
        Event code 309 (BTN_Z)
        Event code 310 (BTN_TL)
        Event code 311 (BTN_TR)
        Event code 312 (BTN_TL2)
        Event code 313 (BTN_TR2)
        Event code 314 (BTN_SELECT)
        Event code 315 (BTN_START)
        Event code 316 (BTN_MODE)
        Event code 317 (BTN_THUMBL)
        Event code 318 (BTN_THUMBR)
        Event code 319 (?)
        Event code 581 (KEY_SCREENSAVER)
      Event type 2 (EV_REL)
        Event code 0 (REL_X)
        Event code 1 (REL_Y)
        Event code 8 (REL_WHEEL)
      Event type 3 (EV_ABS)
        Event code 0 (ABS_X)
          Value    128
          Min        0
          Max      255
          Flat      15
        Event code 1 (ABS_Y)
          Value    128
          Min        0
          Max      255
          Flat      15
        Event code 2 (ABS_Z)
          Value    128
          Min        0
          Max      255
          Flat      15
        Event code 5 (ABS_RZ)
          Value    128
          Min        0
          Max      255
          Flat      15
        Event code 16 (ABS_HAT0X)
          Value      0
          Min       -1
          Max        1
        Event code 17 (ABS_HAT0Y)
          Value      0
          Min       -1
          Max        1
      Event type 4 (EV_MSC)
        Event code 4 (MSC_SCAN)
      Event type 17 (EV_LED)
        Event code 0 (LED_NUML) state 0
        Event code 1 (LED_CAPSL) state 0
        Event code 2 (LED_SCROLLL) state 0
        Event code 3 (LED_COMPOSE) state 0
        Event code 4 (LED_KANA) state 0
    Key repeat handling:
      Repeat type 20 (EV_REP)
        Repeat code 0 (REP_DELAY)
          Value    250
        Repeat code 1 (REP_PERIOD)
          Value     33
    Properties:
    Testing ... (interrupt to exit)
    Event: time 1555798015.740419, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
    Event: time 1555798015.740419, type 1 (EV_KEY), code 305 (BTN_EAST), value 1
    Event: time 1555798015.740419, -------------- SYN_REPORT ------------
    Event: time 1555798015.985428, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
    Event: time 1555798015.985428, type 1 (EV_KEY), code 305 (BTN_EAST), value 0
    Event: time 1555798015.985428, -------------- SYN_REPORT ------------
    


  • just type evtest by iteslf



  • That produces an error.

    evtest 
    No device specified, trying to scan all of /dev/input/event*
    USAGE:
     Capture mode:
       evtest [--grab] /dev/input/eventX
         --grab  grab the device for exclusive access
    
     Query mode: (check exit code)
       evtest --query /dev/input/eventX <type> <value>
    
    <type> is one of: EV_KEY, EV_SW, EV_LED, EV_SND
    <value> can either be a numerical value, or the textual name of the
    key/switch/LED/sound being queried (e.g. SW_DOCK).
    

  • Global Moderator

    Based on the evtest output, it looks like the device is registering a keyboard, mouse and joystick inputs. Looks like an Android gamepad.
    Since the auto-configuration doesn't work, I'd take the manual configuration route and create the mappings manually in the .cfg file (see https://retropie.org.uk/docs/RetroArch-Configuration/#autoconfigurations). Your configuration file is in /home/pi/.config/retroarch/autoconfig/Gamepad.cfg - you should add there the keycodes as reported by jstest when testing your controller.

    EDIT: or maybe the gamepad has a 'mode' switch that turns on a PC compatible connection mode - you could try to use that.



  • I'll give that a try but I'd prefer to disable it on the system itself.

    Fortunately I have a backup image of my last working version of RetroPie (3.8 I believe) and since I rarely logged into it interactively I have a fairly small bash history to look through. It seems I changed the driver for this device in the past to sd12. That doesn't seem to do anything now though.

    Can you tell me if that's still a valid driver for devices? Maybe there's another package I can try to install.

    Also I found this post (second answer) which describes a solution that involves modifying X11 configs: https://askubuntu.com/questions/632026/how-can-i-stop-my-controller-from-moving-my-mouse

    Does the X11 that's shipped with Debian (rasberian) Stretch still use these config files?


  • Global Moderator

    @ANamelessDrake said in RetroArch isn't mapping the GamePad buttons correctly - RetroPie 4.4:

    Does the X11 that's shipped with Debian (rasberian) Stretch still use these config files?

    RetroPie doesn't use Raspbian, so that solution doesn't apply. Other input drivers available are hid and sdl2 ( I think default is udev, which is what you're using right now).



  • @mitu I just tried to manually configure the inputs (/home/pi/.config/retroarch/autoconfig/Gamepad.cfg) but they seem to be correct.

    Any other ideas?


  • Global Moderator

    @ANamelessDrake One last idea - use Xboxdrv to simulate an Xbox compatible driver and 'hide' the original device.



  • @mitu said in RetroArch isn't mapping the GamePad buttons correctly - RetroPie 4.4:

    @ANamelessDrake One last idea - use Xboxdrv to simulate an Xbox compatible driver and 'hide' the original device.

    Okay I'll give that a shot and report back if that did the trick or not. One quick note is the documentation seems to be a bit dated. Installing the driver via the EmulationStation GUI wasn't possiable (at least it wasn't in the menu option location documented) so I ended up installing it via the command line.

    sudo apt-get install xboxdrv



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.