You are not logged in.

#1 2019-08-03 05:38:29

Lander1
Member
Registered: 2019-08-03
Posts: 12

udev/SDL2 BUG: Dual T.16000M Flight Sticks

Hi, I have Arch installed with xfce desktop environment. I have connected up 2 Thrustmaster T.16000M flightsticks, the flightsticks are detected and working natively, however the game I am playing(X4) only detects one of the flightsticks but not both.

Last edited by Lander1 (2019-11-17 02:18:34)

Offline

#2 2019-11-16 06:06:44

Lander1
Member
Registered: 2019-08-03
Posts: 12

Re: udev/SDL2 BUG: Dual T.16000M Flight Sticks

The problem seems to be that both Joysticks are identically labelled as T.16000M and are "too similar" to one another, with the result that only one device is visible ingame. (verified by swapping out one flightstick with different model hardware)
Here is the output of $ udevadm info /dev/input/js0

P: /devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0/0003:044F:B10A.0003/input/input3/js0
N: input/js0
L: 0
S: input/by-path/pci-0000:00:12.0-usb-0:1:1.0-joystick
S: input/by-id/usb-Thrustmaster_T.16000M-joystick
E: DEVPATH=/devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0/0003:044F:B10A.0003/input/input3/js0
E: DEVNAME=/dev/input/js0
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: USEC_INITIALIZED=14653899
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_VENDOR=Thrustmaster
E: ID_VENDOR_ENC=Thrustmaster
E: ID_VENDOR_ID=044f
E: ID_MODEL=T.16000M
E: ID_MODEL_ENC=T.16000M
E: ID_MODEL_ID=b10a
E: ID_REVISION=0500
E: ID_SERIAL=Thrustmaster_T.16000M
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:12.0-usb-0:1:1.0
E: ID_PATH_TAG=pci-0000_00_12_0-usb-0_1_1_0
E: ID_FOR_SEAT=input-pci-0000_00_12_0-usb-0_1_1_0
E: DEVLINKS=/dev/input/by-path/pci-0000:00:12.0-usb-0:1:1.0-joystick /dev/input/by-id/usb-Thrustmaster_T.16000M-joystick
E: TAGS=:uaccess:seat:

Also the output of $ udevadm info /dev/input/js1

P: /devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0/0003:044F:B10A.0007/input/input23/js1
N: input/js1
L: 0
S: input/by-path/pci-0000:00:12.0-usb-0:2:1.0-joystick
S: input/by-id/usb-Thrustmaster_T.16000M-joystick
E: DEVPATH=/devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0/0003:044F:B10A.0007/input/input23/js1
E: DEVNAME=/dev/input/js1
E: MAJOR=13
E: MINOR=1
E: SUBSYSTEM=input
E: USEC_INITIALIZED=6194827722
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_VENDOR=Thrustmaster
E: ID_VENDOR_ENC=Thrustmaster
E: ID_VENDOR_ID=044f
E: ID_MODEL=T.16000M
E: ID_MODEL_ENC=T.16000M
E: ID_MODEL_ID=b10a
E: ID_REVISION=0500
E: ID_SERIAL=Thrustmaster_T.16000M
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:12.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_00_12_0-usb-0_2_1_0
E: ID_FOR_SEAT=input-pci-0000_00_12_0-usb-0_2_1_0
E: DEVLINKS=/dev/input/by-path/pci-0000:00:12.0-usb-0:2:1.0-joystick /dev/input/by-id/usb-Thrustmaster_T.16000M-joystick
E: TAGS=:seat:uaccess:

Looking at those two outputs I can see that they both want to symlink to /dev/input/by-id/usb-Thrustmaster_T.16000M-joystick but only the second one is succesful in doing so by overwriting the first one.  This is confirmed as only the symlink for /dev/by id/ exists for js1, the entries from js0 are overwritten and non-existent.

Output of $ udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/input/js0)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '//devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0/0003:044F:B10A.0003/input/input3/js0':
    KERNEL=="js0"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0/0003:044F:B10A.0003/input/input3':
    KERNELS=="input3"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="Thrustmaster T.16000M"
    ATTRS{phys}=="usb-0000:00:12.0-1/input0"
    ATTRS{properties}=="0"
    ATTRS{uniq}==""

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0/0003:044F:B10A.0003':
    KERNELS=="0003:044F:B10A.0003"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-generic"
    ATTRS{country}=="00"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-1/6-1:1.0':
    KERNELS=="6-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{authorized}=="1"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceSubClass}=="00"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-1':
    KERNELS=="6-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{version}==" 1.10"
    ATTRS{quirks}=="0x0"
    ATTRS{devnum}=="2"
    ATTRS{idProduct}=="b10a"
    ATTRS{rx_lanes}=="1"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{product}=="T.16000M"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bcdDevice}=="0500"
    ATTRS{removable}=="unknown"
    ATTRS{tx_lanes}=="1"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{manufacturer}=="Thrustmaster"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{idVendor}=="044f"
    ATTRS{devpath}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{devspec}=="(null)"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{configuration}==""
    ATTRS{authorized}=="1"
    ATTRS{busnum}=="6"
    ATTRS{ltm_capable}=="no"
    ATTRS{maxchild}=="0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{urbnum}=="24"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6':
    KERNELS=="usb6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{manufacturer}=="Linux 5.3.11-arch1-1 ohci_hcd"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{idProduct}=="0001"
    ATTRS{bcdDevice}=="0503"
    ATTRS{authorized}=="1"
    ATTRS{serial}=="0000:00:12.0"
    ATTRS{quirks}=="0x0"
    ATTRS{ltm_capable}=="no"
    ATTRS{idVendor}=="1d6b"
    ATTRS{rx_lanes}=="1"
    ATTRS{busnum}=="6"
    ATTRS{product}=="OHCI PCI host controller"
    ATTRS{devpath}=="0"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{tx_lanes}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{removable}=="unknown"
    ATTRS{urbnum}=="81"
    ATTRS{maxchild}=="5"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{configuration}==""
    ATTRS{authorized_default}=="1"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{version}==" 1.10"
    ATTRS{devspec}=="(null)"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{speed}=="12"
    ATTRS{devnum}=="1"

  looking at parent device '//devices/pci0000:00/0000:00:12.0':
    KERNELS=="0000:00:12.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ohci-pci"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{irq}=="18"
    ATTRS{broken_parity_status}=="0"
    ATTRS{enable}=="1"
    ATTRS{subsystem_device}=="0x4397"
    ATTRS{revision}=="0x00"
    ATTRS{vendor}=="0x1002"
    ATTRS{numa_node}=="0"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{ari_enabled}=="0"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{subsystem_vendor}=="0x1849"
    ATTRS{class}=="0x0c0310"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x4397"
    ATTRS{devspec}==""
    ATTRS{msi_bus}=="1"
    ATTRS{local_cpus}=="f"
    ATTRS{driver_override}=="(null)"

  looking at parent device '//devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Output of $ udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/input/js1)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '//devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0/0003:044F:B10A.0007/input/input23/js1':
    KERNEL=="js1"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0/0003:044F:B10A.0007/input/input23':
    KERNELS=="input23"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{phys}=="usb-0000:00:12.0-2/input0"
    ATTRS{name}=="Thrustmaster T.16000M"
    ATTRS{properties}=="0"
    ATTRS{uniq}==""

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0/0003:044F:B10A.0007':
    KERNELS=="0003:044F:B10A.0007"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-generic"
    ATTRS{country}=="00"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-2/6-2:1.0':
    KERNELS=="6-2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{authorized}=="1"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bInterfaceProtocol}=="00"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6/6-2':
    KERNELS=="6-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{idProduct}=="b10a"
    ATTRS{configuration}==""
    ATTRS{urbnum}=="13"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{rx_lanes}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{busnum}=="6"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{tx_lanes}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{speed}=="12"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{idVendor}=="044f"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{product}=="T.16000M"
    ATTRS{bDeviceClass}=="00"
    ATTRS{manufacturer}=="Thrustmaster"
    ATTRS{devspec}=="(null)"
    ATTRS{version}==" 1.10"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bmAttributes}=="80"
    ATTRS{devnum}=="4"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{authorized}=="1"
    ATTRS{devpath}=="2"
    ATTRS{bcdDevice}=="0500"

  looking at parent device '//devices/pci0000:00/0000:00:12.0/usb6':
    KERNELS=="usb6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{devpath}=="0"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{maxchild}=="5"
    ATTRS{urbnum}=="81"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{devnum}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{removable}=="unknown"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{configuration}==""
    ATTRS{bDeviceClass}=="09"
    ATTRS{busnum}=="6"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bmAttributes}=="e0"
    ATTRS{devspec}=="(null)"
    ATTRS{authorized}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{manufacturer}=="Linux 5.3.11-arch1-1 ohci_hcd"
    ATTRS{rx_lanes}=="1"
    ATTRS{serial}=="0000:00:12.0"
    ATTRS{speed}=="12"
    ATTRS{quirks}=="0x0"
    ATTRS{ltm_capable}=="no"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{product}=="OHCI PCI host controller"
    ATTRS{version}==" 1.10"
    ATTRS{idProduct}=="0001"
    ATTRS{idVendor}=="1d6b"
    ATTRS{bcdDevice}=="0503"
    ATTRS{authorized_default}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{tx_lanes}=="1"

  looking at parent device '//devices/pci0000:00/0000:00:12.0':
    KERNELS=="0000:00:12.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ohci-pci"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{irq}=="18"
    ATTRS{enable}=="1"
    ATTRS{driver_override}=="(null)"
    ATTRS{class}=="0x0c0310"
    ATTRS{broken_parity_status}=="0"
    ATTRS{numa_node}=="0"
    ATTRS{msi_bus}=="1"
    ATTRS{ari_enabled}=="0"
    ATTRS{subsystem_device}=="0x4397"
    ATTRS{revision}=="0x00"
    ATTRS{local_cpus}=="f"
    ATTRS{subsystem_vendor}=="0x1849"
    ATTRS{devspec}==""
    ATTRS{device}=="0x4397"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{vendor}=="0x1002"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{local_cpulist}=="0-3"

  looking at parent device '//devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
    

I tried to make a rules file to fix the symlink however I was unsuccessful and it didn't work.  I was able to replace the broken symlinks manually but that had no effect on SDL2 or the game.  Does anyone know what my rule/rules should look like to fix this problem?
Also does anyone know how I can try to resolve this issue with regards to SDL2 which is the main issue with the flightstick not being mappable in X4?

Upstream SDL2 Bug discussion here;
https://discourse.libsdl.org/t/linux-bu … lict/26848

Downstream Game Bug discussion here;
https://forum.egosoft.com/viewtopic.php … 3#p4897173

Last edited by Lander1 (2019-11-16 19:58:05)

Offline

#3 2019-11-16 23:22:57

2ManyDogs
Forum Fellow
Registered: 2012-01-15
Posts: 4,645

Re: udev/SDL2 BUG: Dual T.16000M Flight Sticks

Moving to Kernel and Hardware.

Offline

Board footer

Powered by FluxBB