Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issues on many games, how to debug and contrib #70

Open
snorkellingcactus opened this issue Sep 7, 2023 · 1 comment
Open

Issues on many games, how to debug and contrib #70

snorkellingcactus opened this issue Sep 7, 2023 · 1 comment

Comments

@snorkellingcactus
Copy link

snorkellingcactus commented Sep 7, 2023

Hi

I had issues with the wheel on many games (all with thrustmaster driver installed on prefix) with T300RS:
Game: WRC 8
Proton: 8-11
Status: Works all except force feedback

Game: Dirt5
Proton: 7-55, 8-11
Status: Crashes at start (only when wheel is plugged)
I noticed it has a tm_api_lib_x64.dll

Game: VRally 4
Proton: 8-11
Status: Seems it's miss mapped and:

  • Game invert options don't work
  • There is unwanted input (i think it's "look left" or something which makes menus and gameplay always to hit left repeatedly)
  • I think there is either some game level input config, marking an input as something it is not or giving it a wrong priority or overlays with some default (probable of menu) bindings

I added WINEDLLOVERRIDES="xinput1_3=n,b" steam launch option for some games to work, like wrc generations

I wonder where i should look at to debug it
I'm a programmer however not a super hardcore nerd but i would try my best

Should i monitor like man in the middle ? Would virtualbox serve for this ? or some wine tracing ? or rebuild the module with some debug info added ?

I had other input issues unrelated to this driver too that somehow i think they may be related to elogind and seats

Should i see the ts300 as an xinput device on wine control ?
I see it as a dinput device

I also turned off the thrustmaster api in flavour to dinput on wrc generations and everything went fine

(unrelated too) I also have the always left issue when i plug a custom handbrake

Thanks for any help in advance

dmesg:

[Thu Sep  7 08:32:43 2023] usb 1-3: new full-speed USB device number 27 using xhci_hcd
[Thu Sep  7 08:32:43 2023] usb 1-3: New USB device found, idVendor=044f, idProduct=b65d, bcdDevice= 1.00
[Thu Sep  7 08:32:43 2023] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[Thu Sep  7 08:32:43 2023] usb 1-3: Product: Thrustmaster FFB Wheel
[Thu Sep  7 08:32:43 2023] usb 1-3: Manufacturer: Thrustmaster
[Thu Sep  7 08:32:43 2023] input: Thrustmaster Thrustmaster FFB Wheel as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B65D.0019/input/input45
[Thu Sep  7 08:32:43 2023] hid-tminit 0003:044F:B65D.0019: input,hidraw1: USB HID v1.00 Gamepad [Thrustmaster Thrustmaster FFB Wheel] on usb-0000:00:14.0-3/input0
[Thu Sep  7 08:32:43 2023] hid-tminit 0003:044F:B65D.0019: Wheel with model 0x2 is a Thrustmaster T300RS
[Thu Sep  7 08:32:43 2023] hid-tminit 0003:044F:B65D.0019: Success?! The wheel should have been initialized!
[Thu Sep  7 08:32:43 2023] usb 1-3: USB disconnect, device number 27
[Thu Sep  7 08:32:43 2023] usb 1-3: new full-speed USB device number 28 using xhci_hcd
[Thu Sep  7 08:32:44 2023] usb 1-3: New USB device found, idVendor=044f, idProduct=b66e, bcdDevice= 1.00
[Thu Sep  7 08:32:44 2023] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[Thu Sep  7 08:32:44 2023] usb 1-3: Product: Thrustmaster T300RS Racing wheel
[Thu Sep  7 08:32:44 2023] usb 1-3: Manufacturer: Thrustmaster
[Thu Sep  7 08:32:44 2023] input: Thrustmaster Thrustmaster T300RS Racing wheel as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46
[Thu Sep  7 08:32:44 2023] tmff2 0003:044F:B66E.001A: input,hidraw1: USB HID v1.11 Joystick [Thrustmaster Thrustmaster T300RS Racing wheel] on usb-0000:00:14.0-3/input0
[Thu Sep  7 08:32:44 2023] tmff2 0003:044F:B66E.001A: force feedback for T300RS
$:sudo udevadm info /sys//devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46
P: //devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46
E: ABS=30027
E: DEVPATH=https://devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46
E: EV=20001b
E: FF=31fff0000 0
E: ID_BUS=usb
E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_3_1_0
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_MODEL=Thrustmaster_T300RS_Racing_wheel
E: ID_MODEL_ENC=Thrustmaster\x20T300RS\x20Racing\x20wheel
E: ID_MODEL_ID=b66e
E: ID_PATH=pci-0000:00:14.0-usb-0:3:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Thrustmaster_Thrustmaster_T300RS_Racing_wheel
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Thrustmaster
E: ID_VENDOR_ENC=Thrustmaster
E: ID_VENDOR_ID=044f
E: KEY=1fff00000000 0 0 0 0
E: MODALIAS=input:b0003v044FpB66Ee0111-e0,1,3,4,15,k120,121,122,123,124,125,126,127,128,129,12A,12B,12C,ra0,1,2,5,10,11,m4,lsf50,51,52,53,54,55,56,57,58,59,5A,5B,5C,60,61,w
E: MSC=10
E: NAME="Thrustmaster Thrustmaster T300RS Racing wheel"
E: PHYS="usb-0000:00:14.0-3/input0"
E: PRODUCT=3/44f/b66e/111
E: PROP=0
E: SUBSYSTEM=input
E: TAGS=:seat:
E: UNIQ=""
E: USEC_INITIALIZED=8851129464
:ls -l /dev/input/by-id/
total 0
lrwxrwxrwx 1 root root 10 Sep  7 06:05 usb-Chicony_Electronics_Co._Ltd._HD_User_Facing_0001-event-if00 -> ../event10
lrwxrwxrwx 1 root root 10 Sep  7 08:32 usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-event-joystick -> ../event17
lrwxrwxrwx 1 root root  6 Sep  7 08:32 usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-joystick -> ../js0
lrwxrwxrwx 1 root root 10 Sep  7 08:01 usb-Thustmaster_T500_RS_Gear_Shift-event-joystick -> ../event18
lrwxrwxrwx 1 root root  6 Sep  7 08:01 usb-Thustmaster_T500_RS_Gear_Shift-joystick -> ../js1
$:sudo udevadm info /dev/input/by-id/usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-event-joystick
P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46/event17
N: input/event17
S: input/by-id/usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-event-joystick
S: input/by-path/pci-0000:00:14.0-usb-0:3:1.0-event-joystick
E: DEVLINKS=/dev/input/by-id/usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-event-joystick /dev/input/by-path/pci-0000:00:14.0-usb-0:3:1.0-event-joystick
E: DEVNAME=/dev/input/event17
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46/event17
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_MODEL=Thrustmaster_T300RS_Racing_wheel
E: ID_MODEL_ENC=Thrustmaster\x20T300RS\x20Racing\x20wheel
E: ID_MODEL_ID=b66e
E: ID_PATH=pci-0000:00:14.0-usb-0:3:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0
E: ID_REVISION=0100
E: ID_SERIAL=Thrustmaster_Thrustmaster_T300RS_Racing_wheel
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Thrustmaster
E: ID_VENDOR_ENC=Thrustmaster
E: ID_VENDOR_ID=044f
E: LIBINPUT_DEVICE_GROUP=3/44f/b66e:usb-0000:00:14.0-3
E: MAJOR=13
E: MINOR=81
E: SUBSYSTEM=input
E: USEC_INITIALIZED=8851211059
$:sudo loginctl
SESSION  UID USER   SEAT  TTY
      2 1000 cactus seat0 

1 sessions listed.
$:loginctl seat-status seat0 > status_seat0
seat0
        Sessions: *2
         Devices:
                  ├─/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
                  │ input:input3 "Power Button"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:01/input/input5
                  │ input:input5 "Video Bus"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/LNXVIDEO:00/input/input4
                  │ input:input4 "Video Bus"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:00/10251229:00/input/input7
                  │ input:input7 "Acer Wireless Radio Control"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
                  │ input:input1 "Power Button"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
                  │ input:input0 "Lid Switch"
                  ├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
                  │ input:input2 "Sleep Button"
                  ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
                  │ [MASTER] drm:card1
                  │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DP-4
                  │ │ [MASTER] drm:card1-DP-4
                  │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-HDMI-A-3
                  │   [MASTER] drm:card1-HDMI-A-3
                  ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1
                  │ sound:card1 "NVidia"
                  │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input10
                  │ │ input:input10 "HDA NVidia HDMI"
                  │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input11
                  │   input:input11 "HDA NVidia HDMI"
                  ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.2/usb3
                  │ usb:usb3
                  ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.2/usb4
                  │ usb:usb4
                  ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0
                  │ [MASTER] drm:card0
                  │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1
                  │ │ [MASTER] drm:card0-DP-1
                  │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-2
                  │ │ [MASTER] drm:card0-DP-2
                  │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-3
                  │ │ [MASTER] drm:card0-DP-3
                  │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
                  │ │ [MASTER] drm:card0-HDMI-A-1
                  │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-2
                  │ │ [MASTER] drm:card0-HDMI-A-2
                  │ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1
                  │   [MASTER] drm:card0-eDP-1
                  │   └─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight
                  │     backlight:intel_backlight
                  ├─/sys/devices/pci0000:00/0000:00:02.0/graphics/fb0
                  │ graphics:fb0 "i915drmfb"
                  ├─/sys/devices/pci0000:00/0000:00:14.0/usb1
                  │ usb:usb1
                  │ ├─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3
                  │ │ usb:1-3
                  │ │ └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:044F:B66E.001A/input/input46
                  │ │   input:input46 "Thrustmaster Thrustmaster T300RS Racing wheel"
                  │ ├─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4
                  │ │ usb:1-4
                  │ │ └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/0003:044F:B660.0018/input/input44
                  │ │   input:input44 "Thustmaster T500 RS Gear Shift"
                  │ └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/input/input15
                  │   input:input15 "HD User Facing: HD User Facing"
                  ├─/sys/devices/pci0000:00/0000:00:14.0/usb2
                  │ usb:usb2
                  ├─/sys/devices/pci0000:00/0000:00:14.3/leds/phy0-led
                  │ leds:phy0-led
                  ├─/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-14/i2c-SYNA7DB5:00/0018:06CB:CD41.0001/input/input16
                  │ input:input16 "SYNA7DB5:00 06CB:CD41 Mouse"
                  ├─/sys/devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-14/i2c-SYNA7DB5:00/0018:06CB:CD41.0001/input/input17
                  │ input:input17 "SYNA7DB5:00 06CB:CD41 Touchpad"
                  ├─/sys/devices/pci0000:00/0000:00:1f.3/sound/card0
                  │ sound:card0 "PCH"
                  │ ├─/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/input19
                  │ │ input:input19 "HDA Intel PCH Front Headphone"
                  │ └─/sys/devices/pci0000:00/0000:00:1f.3/sound/card0/input20
                  │   input:input20 "HDA Intel PCH HDMI"
                  ├─/sys/devices/platform/i8042/serio0/input/input6
                  │ input:input6 "AT Translated Set 2 keyboard"
                  │ ├─/sys/devices/platform/i8042/serio0/input/input6/input6::capslock
                  │ │ leds:input6::capslock
                  │ ├─/sys/devices/platform/i8042/serio0/input/input6/input6::numlock
                  │ │ leds:input6::numlock
                  │ └─/sys/devices/platform/i8042/serio0/input/input6/input6::scrolllock
                  │   leds:input6::scrolllock
                  ├─/sys/devices/platform/pcspkr/input/input8
                  │ input:input8 "PC Speaker"
                  ├─/sys/devices/virtual/input/input9
                  │ input:input9 "Acer WMI hotkeys"
                  └─/sys/devices/virtual/misc/uinput
                    misc:uinput
@Kimplul
Copy link
Owner

Kimplul commented Sep 7, 2023

Hello, thanks for the report. Quite a lot to chew through, apologies if I miss anything. First of all, could you just confirm that you have working FFB in some games?

I had issues with the wheel on many games (all with thrustmaster driver installed on prefix) with T300RS:
Game: WRC 8
Proton: 8-11
Status: Works all except force feedback
[...]
I added WINEDLLOVERRIDES="xinput1_3=n,b" steam launch option for some games to work, like wrc generations

What does WRC 8 do without WINEDLLOVERRIDES=...?

I also turned off the thrustmaster api in flavour to dinput on wrc generations and everything went fine

I don't own the game, do you mean there's a setting in the game for this and with input set to dinput the game works with input and FFB?

I wonder where i should look at to debug it

General thoughts: Some input/FFB issues could be attributed to stuff similar to #38, i.e. games having an internal database of wheels, and Linux for some reason or other not fulfilling the requirements the game sets to recognise a wheel. Some games use xml files, some might have them built into source code or a library, some might use SDL (or rely on Wine which in turn relies on SDL), or potentially even tm_api_lib_x64.dll (though I'm still not entirely sure what functionality the library actually has).

Still, each game might have its own issues, so the approach unfortunately might have to differ from game to game.

Should i monitor like man in the middle ? Would virtualbox serve for this ? or some wine tracing ? or rebuild the module with some debug info added ?

Man in the middle works pretty well for monitoring FFB, could maybe also work for monitoring input though I'm not entirely sure how that would be useful. The thing is that this driver doesn't actually handle input, that job is delegated to the HID subsystem in Linux. Frankly I'm fairly confident the input is handled correctly by the Linux kernel, and I would suspect these issues exists outside of it, either in Wine/Proton or the games themselves (or any combination of both). Wine tracing might also give some insight into what a game is doing, or at least what services its requesting from Wine, which might be helpful, though very context sensitive.

I had other input issues unrelated to this driver too that somehow i think they may be related to elogind and seats

Entirely possible that some subsystem steps in and tweaks inputs between the kernel and whatever game you're trying to play, always something to keep in mind. Also note that there are at least two subsystems for joysticks, joydev and evdev, and some games might use one over the other. Generally speaking evdev is the default these days and it's the one Wine uses (I believe), but you might find some games that still use joydev in which case modifications done with evdev might not show up. Something to be wary of.

Should i see the ts300 as an xinput device on wine control ?
I see it as a dinput device

Dinput for me as well, couldn't get FFB effects to work in the control panel but they work in games so not sure what that's about. Maybe something worth looking into.

(unrelated too) I also have the always left issue when i plug a custom handbrake

I'm guessing the handbrake shows up as a separate controller with one axis. If you know which axis the handbrake shows up as, you should be able to remap it on a system level to some other axis to avoid games interpreting the handbrake as a 'normal' input. Alternatively, maybe calibrate the device to a range so that the axis doesn't register left input when not being touched.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants