RetroArch isn't mapping the GamePad buttons correctly - RetroPie 4.4
-
@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.
-
@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).
-
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 byjstest
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?
-
@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
andsdl2
( I think default isudev
, 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?
-
@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
-
@ANamelessDrake The
xboxdrv
driver can be installed from the RetroPie setup packages - it's in the drivers section. -
I'm very sad to report, after trying tons of different things, I simply could not get this controller to work in RetroPi 4.4.
Unless anyone has any other ideas I'm going to restore my 3.8 image. :-(
Either way I do appreciate all the help!
-
I'm curious how does this work on the 3.8 image - what's the
input_driver
used in RetroArch and if there are any other configurations you applied to make the controller work.
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.