Thrustmaster TMX Support
pastaq opened this issue · 7 comments
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.
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
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
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 is43 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 that43
is the 'set force gain command' and7f
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 is60 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.