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

Thrustmaster TMX Support #78

Open
pastaq opened this issue Dec 11, 2023 · 2 comments
Open

Thrustmaster TMX Support #78

pastaq opened this issue Dec 11, 2023 · 2 comments

Comments

@pastaq
Copy link

pastaq commented Dec 11, 2023

Hi. I'm working on Thurstmaster TMX support. Using the existing TX model as a baseline, and https://github.com/emtek995/TMX-driver to init the two state startup, I have got the module to load and detect the TMX. This has allowed me to load a corrected Report Descriptor and it also seems to enable auto-centering. So far I have not been able to play any FFB effects using fftest.

fftest /dev/input/event7                                                                                                   ✔ 
Force feedback test program.
HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES

Device /dev/input/event7 opened
Features:
  * Absolute axes: X, Y, Z, RZ, Hat 0 X, Hat 0 Y, 
    [27 00 03 00 00 00 00 00 ]
  * Relative axes: 
    [00 00 ]
  * Force feedback effects types: Constant, Periodic, Ramp, Spring, Friction, Damper, Rumble, Inertia, Gain, Autocenter, 
    Force feedback periodic effects: Square, Triangle, Sine, Saw up, Saw down, 
    [00 00 00 00 00 00 00 00 00 00 FF 1F 03 00 00 00 ]
  * Number of simultaneous effects: 16

Setting master gain to 75% ... OK
Uploading effect #0 (Periodic sinusoidal) ... OK (id 0)
Uploading effect #1 (Constant) ... OK (id 1)
Uploading effect #2 (Spring) ... OK (id 2)
Uploading effect #3 (Damper) ... OK (id 3)
Uploading effect #4 (Strong rumble, with heavy motor) ... OK (id 4)
Uploading effect #5 (Weak rumble, with light motor) ... OK (id 5)
Enter effect number, -1 to exit
0
Now Playing: Sine vibration
Enter effect number, -1 to exit
1
Now Playing: Constant Force
Enter effect number, -1 to exit
2
Now Playing: Spring Condition
Enter effect number, -1 to exit
3
Now Playing: Damping Condition
Enter effect number, -1 to exit
4
Now Playing: Strong Rumble
Enter effect number, -1 to exit
5
Now Playing: Weak Rumble
Enter effect number, -1 to exit
-1
Stopping effects

Everything is detected but so far but nothing plays.

I did some USBPcap captures in windows of each of the FFB effects in the config tool as well as changing configs for gain.

tmx_ff_cap.zip

Current status is in my fork's main: https://github.com/pastaq/hid-tmff2/
What would you recommend as a next step? The TX and TMX devices seem very similar based on how they init and the needed Report Descriptor modifications. Reading through #48 didn't provide any insight on where I need to go next.

Some more data:

lsmod | grep tm

hid_tmff_new           73728  0
tmx_driver             16384  0

udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/input/event7)

   looking at device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1/3-6.1:1.0/0003:044F:B67F.0005/input/input37/event7':
    KERNEL=="event7"
    SUBSYSTEM=="input"
    DRIVER==""
    ATTR{power/control}=="auto"
    ATTR{power/runtime_active_time}=="0"
    ATTR{power/runtime_status}=="unsupported"
    ATTR{power/runtime_suspended_time}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1/3-6.1:1.0/0003:044F:B67F.0005/input/input37':
    KERNELS=="input37"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{capabilities/abs}=="30027"
    ATTRS{capabilities/ev}=="20001b"
    ATTRS{capabilities/ff}=="31fff0000 0"
    ATTRS{capabilities/key}=="1fff00000000 0 0 0 0"
    ATTRS{capabilities/led}=="0"
    ATTRS{capabilities/msc}=="10"
    ATTRS{capabilities/rel}=="0"
    ATTRS{capabilities/snd}=="0"
    ATTRS{capabilities/sw}=="0"
    ATTRS{id/bustype}=="0003"
    ATTRS{id/product}=="b67f"
    ATTRS{id/vendor}=="044f"
    ATTRS{id/version}=="0111"
    ATTRS{inhibited}=="0"
    ATTRS{name}=="Thrustmaster Thrustmaster TMX Racing Wheel"
    ATTRS{phys}=="usb-0000:07:00.3-6.1/input0"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="0"
    ATTRS{power/runtime_status}=="unsupported"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{properties}=="0"
    ATTRS{uniq}==""

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1/3-6.1:1.0/0003:044F:B67F.0005':
    KERNELS=="0003:044F:B67F.0005"
    SUBSYSTEMS=="hid"
    DRIVERS=="tmff2"
    ATTRS{country}=="00"
    ATTRS{damper_level}=="30"
    ATTRS{friction_level}=="30"
    ATTRS{gain}=="40000"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="0"
    ATTRS{power/runtime_status}=="unsupported"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{range}=="900"
    ATTRS{spring_level}=="30"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1/3-6.1:1.0':
    KERNELS=="3-6.1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1':
    KERNELS=="3-6.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="4"
    ATTRS{devpath}=="6.1"
    ATTRS{idProduct}=="b67f"
    ATTRS{idVendor}=="044f"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Thrustmaster"
    ATTRS{maxchild}=="0"
    ATTRS{power/active_duration}=="1408517"
    ATTRS{power/autosuspend}=="2"
    ATTRS{power/autosuspend_delay_ms}=="2000"
    ATTRS{power/connected_duration}=="1408517"
    ATTRS{power/control}=="on"
    ATTRS{power/level}=="on"
    ATTRS{power/persist}=="1"
    ATTRS{power/runtime_active_time}=="1408348"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="disabled"
    ATTRS{power/wakeup_abort_count}==""
    ATTRS{power/wakeup_active}==""
    ATTRS{power/wakeup_active_count}==""
    ATTRS{power/wakeup_count}==""
    ATTRS{power/wakeup_expire_count}==""
    ATTRS{power/wakeup_last_time_ms}==""
    ATTRS{power/wakeup_max_time_ms}==""
    ATTRS{power/wakeup_total_time_ms}==""
    ATTRS{product}=="Thrustmaster TMX Racing Wheel"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{remove}=="(not readable)"
    ATTRS{rx_lanes}=="1"
    ATTRS{speed}=="12"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="65"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6':
    KERNELS=="3-6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="8536"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="3"
    ATTRS{devpath}=="6"
    ATTRS{idProduct}=="0608"
    ATTRS{idVendor}=="05e3"
    ATTRS{ltm_capable}=="no"
    ATTRS{maxchild}=="4"
    ATTRS{physical_location/dock}=="no"
    ATTRS{physical_location/horizontal_position}=="left"
    ATTRS{physical_location/lid}=="no"
    ATTRS{physical_location/panel}=="front"
    ATTRS{physical_location/vertical_position}=="upper"
    ATTRS{power/active_duration}=="1409040"
    ATTRS{power/autosuspend}=="0"
    ATTRS{power/autosuspend_delay_ms}=="0"
    ATTRS{power/connected_duration}=="1409040"
    ATTRS{power/control}=="auto"
    ATTRS{power/level}=="auto"
    ATTRS{power/runtime_active_time}=="1408774"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="disabled"
    ATTRS{power/wakeup_abort_count}==""
    ATTRS{power/wakeup_active}==""
    ATTRS{power/wakeup_active_count}==""
    ATTRS{power/wakeup_count}==""
    ATTRS{power/wakeup_expire_count}==""
    ATTRS{power/wakeup_last_time_ms}==""
    ATTRS{power/wakeup_max_time_ms}==""
    ATTRS{power/wakeup_total_time_ms}==""
    ATTRS{product}=="USB2.0 Hub"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="removable"
    ATTRS{remove}=="(not readable)"
    ATTRS{rx_lanes}=="1"
    ATTRS{speed}=="480"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="37"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0606"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 6.6.4-arch1-1 xhci-hcd"
    ATTRS{maxchild}=="6"
    ATTRS{power/active_duration}=="1409474"
    ATTRS{power/autosuspend}=="0"
    ATTRS{power/autosuspend_delay_ms}=="0"
    ATTRS{power/connected_duration}=="1409474"
    ATTRS{power/control}=="auto"
    ATTRS{power/level}=="auto"
    ATTRS{power/runtime_active_time}=="1409471"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="disabled"
    ATTRS{power/wakeup_abort_count}==""
    ATTRS{power/wakeup_active}==""
    ATTRS{power/wakeup_active_count}==""
    ATTRS{power/wakeup_count}==""
    ATTRS{power/wakeup_expire_count}==""
    ATTRS{power/wakeup_last_time_ms}==""
    ATTRS{power/wakeup_max_time_ms}==""
    ATTRS{power/wakeup_total_time_ms}==""
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{remove}=="(not readable)"
    ATTRS{rx_lanes}=="1"
    ATTRS{serial}=="0000:07:00.3"
    ATTRS{speed}=="480"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="75"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3':
    KERNELS=="0000:07:00.3"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{ari_enabled}=="0"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0330"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{current_link_speed}=="16.0 GT/s PCIe"
    ATTRS{current_link_width}=="16"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x149c"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="39"
    ATTRS{link/l0s_aspm}=="0"
    ATTRS{link/l1_aspm}=="0"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{local_cpus}=="0000ffff"
    ATTRS{max_link_speed}=="16.0 GT/s PCIe"
    ATTRS{max_link_width}=="16"
    ATTRS{msi_bus}=="1"
    ATTRS{msi_irqs/78}=="msix"
    ATTRS{msi_irqs/79}=="msix"
    ATTRS{msi_irqs/80}=="msix"
    ATTRS{msi_irqs/81}=="msix"
    ATTRS{msi_irqs/82}=="msix"
    ATTRS{msi_irqs/83}=="msix"
    ATTRS{msi_irqs/84}=="msix"
    ATTRS{msi_irqs/85}=="msix"
    ATTRS{numa_node}=="-1"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="1410729"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="enabled"
    ATTRS{power/wakeup_abort_count}=="0"
    ATTRS{power/wakeup_active}=="0"
    ATTRS{power/wakeup_active_count}=="0"
    ATTRS{power/wakeup_count}=="0"
    ATTRS{power/wakeup_expire_count}=="0"
    ATTRS{power/wakeup_last_time_ms}=="0"
    ATTRS{power/wakeup_max_time_ms}=="0"
    ATTRS{power/wakeup_total_time_ms}=="0"
    ATTRS{power_state}=="D0"
    ATTRS{remove}=="(not readable)"
    ATTRS{rescan}=="(not readable)"
    ATTRS{reset}=="(not readable)"
    ATTRS{reset_method}=="pm"
    ATTRS{resource0}=="(not readable)"
    ATTRS{revision}=="0x00"
    ATTRS{subsystem_device}=="0x148c"
    ATTRS{subsystem_vendor}=="0x1022"
    ATTRS{vendor}=="0x1022"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0':
    KERNELS=="0000:03:08.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{ari_enabled}=="0"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{current_link_speed}=="16.0 GT/s PCIe"
    ATTRS{current_link_width}=="16"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x57a4"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="2"
    ATTRS{irq}=="36"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{local_cpus}=="0000ffff"
    ATTRS{max_link_speed}=="16.0 GT/s PCIe"
    ATTRS{max_link_width}=="16"
    ATTRS{msi_bus}=="1"
    ATTRS{msi_irqs/36}=="msi"
    ATTRS{numa_node}=="-1"
    ATTRS{power/autosuspend_delay_ms}=="100"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="1410738"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="disabled"
    ATTRS{power/wakeup_abort_count}==""
    ATTRS{power/wakeup_active}==""
    ATTRS{power/wakeup_active_count}==""
    ATTRS{power/wakeup_count}==""
    ATTRS{power/wakeup_expire_count}==""
    ATTRS{power/wakeup_last_time_ms}==""
    ATTRS{power/wakeup_max_time_ms}==""
    ATTRS{power/wakeup_total_time_ms}==""
    ATTRS{power_state}=="D0"
    ATTRS{remove}=="(not readable)"
    ATTRS{rescan}=="(not readable)"
    ATTRS{reset}=="(not readable)"
    ATTRS{reset_method}=="pm"
    ATTRS{revision}=="0x00"
    ATTRS{secondary_bus_number}=="7"
    ATTRS{subordinate_bus_number}=="7"
    ATTRS{subsystem_device}=="0x1484"
    ATTRS{subsystem_vendor}=="0x1022"
    ATTRS{vendor}=="0x1022"

  looking at parent device '/devices/pci0000:00/0000:00:01.2/0000:02:00.0':
    KERNELS=="0000:02:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{ari_enabled}=="0"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{current_link_speed}=="8.0 GT/s PCIe"
    ATTRS{current_link_width}=="4"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x57ad"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="2"
    ATTRS{irq}=="24"
    ATTRS{link/l1_1_aspm}=="0"
    ATTRS{link/l1_1_pcipm}=="0"
    ATTRS{link/l1_aspm}=="0"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{local_cpus}=="0000ffff"
    ATTRS{max_link_speed}=="8.0 GT/s PCIe"
    ATTRS{max_link_width}=="8"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{power/autosuspend_delay_ms}=="100"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="1410743"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="disabled"
    ATTRS{power/wakeup_abort_count}==""
    ATTRS{power/wakeup_active}==""
    ATTRS{power/wakeup_active_count}==""
    ATTRS{power/wakeup_count}==""
    ATTRS{power/wakeup_expire_count}==""
    ATTRS{power/wakeup_last_time_ms}==""
    ATTRS{power/wakeup_max_time_ms}==""
    ATTRS{power/wakeup_total_time_ms}==""
    ATTRS{power_state}=="D0"
    ATTRS{remove}=="(not readable)"
    ATTRS{rescan}=="(not readable)"
    ATTRS{reset}=="(not readable)"
    ATTRS{reset_method}=="pm bus"
    ATTRS{revision}=="0x00"
    ATTRS{secondary_bus_number}=="3"
    ATTRS{subordinate_bus_number}=="9"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{subsystem_vendor}=="0x0000"
    ATTRS{vendor}=="0x1022"

  looking at parent device '/devices/pci0000:00/0000:00:01.2':
    KERNELS=="0000:00:01.2"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{ari_enabled}=="0"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{current_link_speed}=="8.0 GT/s PCIe"
    ATTRS{current_link_width}=="4"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x1453"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="2"
    ATTRS{irq}=="28"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{local_cpus}=="0000ffff"
    ATTRS{max_link_speed}=="8.0 GT/s PCIe"
    ATTRS{max_link_width}=="4"
    ATTRS{msi_bus}=="1"
    ATTRS{msi_irqs/28}=="msi"
    ATTRS{numa_node}=="-1"
    ATTRS{power/autosuspend_delay_ms}=="100"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="1410747"
    ATTRS{power/runtime_status}=="active"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/wakeup}=="enabled"
    ATTRS{power/wakeup_abort_count}=="0"
    ATTRS{power/wakeup_active}=="0"
    ATTRS{power/wakeup_active_count}=="0"
    ATTRS{power/wakeup_count}=="0"
    ATTRS{power/wakeup_expire_count}=="0"
    ATTRS{power/wakeup_last_time_ms}=="0"
    ATTRS{power/wakeup_max_time_ms}=="0"
    ATTRS{power/wakeup_total_time_ms}=="0"
    ATTRS{power_state}=="D0"
    ATTRS{remove}=="(not readable)"
    ATTRS{rescan}=="(not readable)"
    ATTRS{reset}=="(not readable)"
    ATTRS{reset_method}=="pm"
    ATTRS{revision}=="0x00"
    ATTRS{secondary_bus_number}=="2"
    ATTRS{subordinate_bus_number}=="9"
    ATTRS{subsystem_device}=="0x1453"
    ATTRS{subsystem_vendor}=="0x1022"
    ATTRS{vendor}=="0x1022"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_time}=="0"
    ATTRS{power/runtime_status}=="unsupported"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{waiting_for_supplier}=="0"

evtest /dev/input/event7

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x44f product 0xb67f version 0x111
Input device name: "Thrustmaster Thrustmaster TMX Racing Wheel"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 288 (BTN_TRIGGER)
    Event code 289 (BTN_THUMB)
    Event code 290 (BTN_THUMB2)
    Event code 291 (BTN_TOP)
    Event code 292 (BTN_TOP2)
    Event code 293 (BTN_PINKIE)
    Event code 294 (BTN_BASE)
    Event code 295 (BTN_BASE2)
    Event code 296 (BTN_BASE3)
    Event code 297 (BTN_BASE4)
    Event code 298 (BTN_BASE5)
    Event code 299 (BTN_BASE6)
    Event code 300 (?)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min        0
      Max    65535
      Fuzz     255
      Flat    4095
    Event code 1 (ABS_Y)
      Value      0
      Min        0
      Max     1023
      Fuzz       3
      Flat      63
    Event code 2 (ABS_Z)
      Value      0
      Min        0
      Max     1023
      Fuzz       3
      Flat      63
    Event code 5 (ABS_RZ)
      Value      0
      Min        0
      Max     1023
      Fuzz       3
      Flat      63
    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 21 (EV_FF)
    Event code 80 (FF_RUMBLE)
    Event code 81 (FF_PERIODIC)
    Event code 82 (FF_CONSTANT)
    Event code 83 (FF_SPRING)
    Event code 84 (FF_FRICTION)
    Event code 85 (FF_DAMPER)
    Event code 86 (FF_INERTIA)
    Event code 87 (FF_RAMP)
    Event code 88 (FF_SQUARE)
    Event code 89 (FF_TRIANGLE)
    Event code 90 (FF_SINE)
    Event code 91 (FF_SAW_UP)
    Event code 92 (FF_SAW_DOWN)
    Event code 96 (FF_GAIN)
    Event code 97 (FF_AUTOCENTER)
Properties:

dmesg

[ 1621.971860] usb 3-6.1: new full-speed USB device number 7 using xhci_hcd
[ 1622.084645] usb 3-6.1: New USB device found, idVendor=044f, idProduct=b67e, bcdDevice= 1.01
[ 1622.084654] usb 3-6.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1622.084659] usb 3-6.1: Product: Thrustmaster TMX GIP Racing Wheel
[ 1622.084663] usb 3-6.1: Manufacturer: Thrustmaster
[ 1622.084667] usb 3-6.1: SerialNumber: 000055AEDE480218
[ 1622.179675] probing for wheel
[ 1622.190680] Error maybe?
[ 1622.276480] usb 3-6.1: USB disconnect, device number 7
[ 1622.276552] disconnect the wheel
[ 1622.994927] usb 3-6.1: new full-speed USB device number 8 using xhci_hcd
[ 1623.104629] usb 3-6.1: New USB device found, idVendor=044f, idProduct=b65d, bcdDevice= 1.00
[ 1623.104638] usb 3-6.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1623.104643] usb 3-6.1: Product: Thrustmaster FFB Wheel
[ 1623.104647] usb 3-6.1: Manufacturer: Thrustmaster
[ 1623.176713] probing for wheel
[ 1623.181664] Error maybe?
[ 1623.300339] usb 3-6.1: USB disconnect, device number 8
[ 1623.348141] disconnect the wheel
[ 1624.018106] usb 3-6.1: new full-speed USB device number 9 using xhci_hcd
[ 1624.127613] usb 3-6.1: New USB device found, idVendor=044f, idProduct=b67f, bcdDevice= 1.00
[ 1624.127622] usb 3-6.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1624.127627] usb 3-6.1: Product: Thrustmaster TMX Racing Wheel
[ 1624.127631] usb 3-6.1: Manufacturer: Thrustmaster
[ 1624.201076] input: Thrustmaster Thrustmaster TMX Racing Wheel as /devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:07:00.3/usb3/3-6/3-6.1/3-6.1:1.0/0003:044F:B67F.000C/input/input38
[ 1624.201285] tmff2 0003:044F:B67F.000C: input,hidraw4: USB HID v1.11 Joystick [Thrustmaster Thrustmaster TMX Racing Wheel] on usb-0000:07:00.3-6.1/input0
[ 1624.226844] tmff2 0003:044F:B67F.000C: force feedback for TMX
@Kimplul
Copy link
Owner

Kimplul commented Dec 12, 2023

Hello, thanks for showing interest in this project.

I had a cursory look at the zip file, and it seems like the TMX and TX use different USB command sets. For example, in file force_strength_100-0.pcapng, packet number 39, the leftover capture data is 43 7f [...]. From the name of the file, I'm guessing this would be setting the gain of the wheel, and from the other packets I would assume that 43 is the 'set force gain command' and 7f in this case would be the value to set it to. However, looking at the gain command in my docs, the format that the T300 (and by extension, the TX) uses is 60 02 bf [...], meaning that it looks like the two wheels speak a different language.

I did notice that the packet looks a lot like what the T150 driver does for its gain setting, seems like the TMX and T150 might share a command set. See here for the T150 gain setting code:
https://github.com/scarburato/t150_driver/blob/bd543aa58c66cea7be76425eb7747de9bce15ea8/hid-t150/forcefeedback.c#L418

If that's the case, adding support for the T150 might allow adding support for the TMX (or vice versa) in a similar way to how T248 and TX wheels use the T300 functionality. Alternatively, you can try patching the T150 driver, would probably take fewer lines of code.

I have some rough outlines of what needs to be done to add support for a new wheel with a different command set, though nobody's done so yet: https://github.com/Kimplul/hid-tmff2/blob/master/docs/CONTRIBUTING.md#how-to-add-in-support-for-a-new-t-series-wheel

@pastaq
Copy link
Author

pastaq commented Dec 12, 2023

Hello, thanks for showing interest in this project.

I had a cursory look at the zip file, and it seems like the TMX and TX use different USB command sets. For example, in file force_strength_100-0.pcapng, packet number 39, the leftover capture data is 43 7f [...]. From the name of the file, I'm guessing this would be setting the gain of the wheel, and from the other packets I would assume that 43 is the 'set force gain command' and 7f in this case would be the value to set it to. However, looking at the gain command in my docs, the format that the T300 (and by extension, the TX) uses is 60 02 bf [...], meaning that it looks like the two wheels speak a different language.

I did notice that the packet looks a lot like what the T150 driver does for its gain setting, seems like the TMX and T150 might share a command set. See here for the T150 gain setting code: https://github.com/scarburato/t150_driver/blob/bd543aa58c66cea7be76425eb7747de9bce15ea8/hid-t150/forcefeedback.c#L418

If that's the case, adding support for the T150 might allow adding support for the TMX (or vice versa) in a similar way to how T248 and TX wheels use the T300 functionality. Alternatively, you can try patching the T150 driver, would probably take fewer lines of code.

I have some rough outlines of what needs to be done to add support for a new wheel with a different command set, though nobody's done so yet: https://github.com/Kimplul/hid-tmff2/blob/master/docs/CONTRIBUTING.md#how-to-add-in-support-for-a-new-t-series-wheel

Thanks for your quick reply. I'll look into how the t150 works and see if I can get something going here. If I'm honest I'd like to see a unification of TM drivers. It's a bit excessive that there are at least three init projects and two ffb projects all doing basically the same thing in radically different ways.

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