mickelson / attract

A graphical front-end for command line emulators that hides the underlying operating system and is intended to be controlled with a joystick or gamepad.
http://attractmode.org
GNU General Public License v3.0
393 stars 115 forks source link

Joystick order/mapping #700

Open MrMEEE opened 2 years ago

MrMEEE commented 2 years ago

Hi

I have an arcade cabinet, where the 4 controllers are presented through the same usb device: [arcade@GroovyArcade ~]$ udevadm info /dev/input/js0 P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input7/js0 N: input/js0 L: 0 S: input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick S: input/by-id/usb-16c0_05df-joystick E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input7/js0 E: DEVNAME=/dev/input/js0 E: MAJOR=13 E: MINOR=0 E: SUBSYSTEM=input E: USEC_INITIALIZED=10186866 E: ID_INPUT=1 E: ID_INPUT_JOYSTICK=1 E: ID_VENDOR=16c0 E: ID_VENDOR_ENC=16c0 E: ID_VENDOR_ID=16c0 E: ID_MODEL=05df E: ID_MODEL_ENC=05df E: ID_MODEL_ID=05df E: ID_REVISION=0101 E: ID_SERIAL=16c0_05df E: ID_TYPE=hid E: ID_BUS=usb E: ID_USB_INTERFACES=:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=usbhid E: ID_PATH=pci-0000:00:14.0-usb-0:3.1:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_1_0 E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_3_1_1_0 E: DEVLINKS=/dev/input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick /dev/input/by-id/usb-16c0_05df-joystick E: TAGS=:uaccess:seat: E: CURRENT_TAGS=:uaccess:seat:

[arcade@GroovyArcade ~]$ udevadm info /dev/input/js1 P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input8/js1 N: input/js1 L: 0 S: input/by-id/usb-16c0_05df-joystick S: input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input8/js1 E: DEVNAME=/dev/input/js1 E: MAJOR=13 E: MINOR=1 E: SUBSYSTEM=input E: USEC_INITIALIZED=10164135 E: ID_INPUT=1 E: ID_INPUT_JOYSTICK=1 E: ID_VENDOR=16c0 E: ID_VENDOR_ENC=16c0 E: ID_VENDOR_ID=16c0 E: ID_MODEL=05df E: ID_MODEL_ENC=05df E: ID_MODEL_ID=05df E: ID_REVISION=0101 E: ID_SERIAL=16c0_05df E: ID_TYPE=hid E: ID_BUS=usb E: ID_USB_INTERFACES=:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=usbhid E: ID_PATH=pci-0000:00:14.0-usb-0:3.1:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_1_0 E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_3_1_1_0 E: DEVLINKS=/dev/input/by-id/usb-16c0_05df-joystick /dev/input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick E: TAGS=:uaccess:seat: E: CURRENT_TAGS=:uaccess:seat:

[arcade@GroovyArcade ~]$ udevadm info /dev/input/js2 P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input9/js2 N: input/js2 L: 0 S: input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick S: input/by-id/usb-16c0_05df-joystick E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input9/js2 E: DEVNAME=/dev/input/js2 E: MAJOR=13 E: MINOR=2 E: SUBSYSTEM=input E: USEC_INITIALIZED=10176852 E: ID_INPUT=1 E: ID_INPUT_JOYSTICK=1 E: ID_VENDOR=16c0 E: ID_VENDOR_ENC=16c0 E: ID_VENDOR_ID=16c0 E: ID_MODEL=05df E: ID_MODEL_ENC=05df E: ID_MODEL_ID=05df E: ID_REVISION=0101 E: ID_SERIAL=16c0_05df E: ID_TYPE=hid E: ID_BUS=usb E: ID_USB_INTERFACES=:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=usbhid E: ID_PATH=pci-0000:00:14.0-usb-0:3.1:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_1_0 E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_3_1_1_0 E: DEVLINKS=/dev/input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick /dev/input/by-id/usb-16c0_05df-joystick E: TAGS=:uaccess:seat: E: CURRENT_TAGS=:uaccess:seat:

[arcade@GroovyArcade ~]$ udevadm info /dev/input/js3 P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input10/js3 N: input/js3 L: 0 S: input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick S: input/by-id/usb-16c0_05df-joystick E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:16C0:05DF.0003/input/input10/js3 E: DEVNAME=/dev/input/js3 E: MAJOR=13 E: MINOR=3 E: SUBSYSTEM=input E: USEC_INITIALIZED=10317306 E: ID_INPUT=1 E: ID_INPUT_JOYSTICK=1 E: ID_VENDOR=16c0 E: ID_VENDOR_ENC=16c0 E: ID_VENDOR_ID=16c0 E: ID_MODEL=05df E: ID_MODEL_ENC=05df E: ID_MODEL_ID=05df E: ID_REVISION=0101 E: ID_SERIAL=16c0_05df E: ID_TYPE=hid E: ID_BUS=usb E: ID_USB_INTERFACES=:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=usbhid E: ID_PATH=pci-0000:00:14.0-usb-0:3.1:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_1_0 E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_3_1_1_0 E: DEVLINKS=/dev/input/by-path/pci-0000:00:14.0-usb-0:3.1:1.0-joystick /dev/input/by-id/usb-16c0_05df-joystick E: TAGS=:uaccess:seat: E: CURRENT_TAGS=:uaccess:seat:

/dev/input/js0 is always player 1 and so on.. but for some reason the inputs inside attract are switched around, almost everytime the system is rebooted..

I have tried enabling the SDL joystick classic mode: https://github.com/libsdl-org/SDL/pull/4727

But it doesn't seem to make a differens..

Got any good ideas??

MrMEEE commented 2 years ago

Maybe something like this: https://github.com/mickelson/attract/commit/06cdab9d95a7950bac8ea08a3cea3a7f5b370704 could be enhanced to support /dev/input/* ??