kimplul / hid-tmff2 Goto Github PK
View Code? Open in Web Editor NEWLinux kernel module for Thrustmaster T300RS, T248 and (experimental) TX and TS-XW wheels
License: GNU General Public License v3.0
Linux kernel module for Thrustmaster T300RS, T248 and (experimental) TX and TS-XW wheels
License: GNU General Public License v3.0
Can not install on(Regolith) OS: Ubuntu 20.04.2 LTS x86_64 / Kernel: 5.4.0-70-generic :
It should be my mistake but I can not find it.
sudo make install
make -C hid-tminit install
make[1] : on entre dans le répertoire « /home/coyote/hid-tmff2/hid-tminit »
make -C /lib/modules/5.4.0-70-generic/build M=/home/coyote/hid-tmff2/hid-tminit modules_install
make[2] : on entre dans le répertoire « /usr/src/linux-headers-5.4.0-70-generic »
INSTALL /home/coyote/hid-tmff2/hid-tminit/hid-tminit.ko
At main.c:160:
Hi,
First I would like to thanks you for your amazing job.
I installed your driver, my wheel is well recognized as T300rs, but I have no FFB, only autocenter.
When I try fftest, nothing happens, and in oversteer I only have force gain which is activated, nothing else.
Is there any solution to my problem?
Thanks in advance
Does the steering wheel return to normal automatically
Hi,
I'm using 5.14.18-1-MANJARO and have recently installed KartKraft on Steam. My system specs are:
Intel Core i7-10875H
graphics: NVIDIA TU106M [GeForce RTX 2060 Mobile]
nvidia driver: 495.44
RAM: 32GB
My wheel is a Thrustmaster T300RS (Playstation model) and is recognized as such when I do lsusb:
Bus 001 Device 015: ID 044f:b66e ThrustMaster, Inc. Thrustmaster T300RS Racing wheel
However, the wheel is only recognised as 'generic gamepad' in Steam and I cannot configure the wheel in KartKraft either.
I followed the instructions for installing the linux kernel module but I got errors:
[john@ja-clevo hid-tmff2]$ **make**
make -C hid-tminit KDIR="/lib/modules/5.14.18-1-MANJARO/build"
make[1]: Entering directory '/home/john/GIT/hid-tmff2/hid-tminit'
make -C /lib/modules/5.14.18-1-MANJARO/build M=/home/john/GIT/hid-tmff2/hid-tminit modules
make[2]: Entering directory '/home/john/GIT/hid-tmff2/hid-tminit'
make[2]: *** /lib/modules/5.14.18-1-MANJARO/build: No such file or directory. Stop.
make[2]: Leaving directory '/home/john/GIT/hid-tmff2/hid-tminit'
make[1]: *** [Makefile:5: all] Error 2
make[1]: Leaving directory '/home/john/GIT/hid-tmff2/hid-tminit'
make: *** [Makefile:17: hid-tminit] Error 2
[john@ja-clevo hid-tmff2]$ **sudo make install**
[sudo] password for john:
make -C hid-tminit KDIR="/lib/modules/5.14.18-1-MANJARO/build" install
make[1]: Entering directory '/home/john/GIT/hid-tmff2/hid-tminit'
make -C /lib/modules/5.14.18-1-MANJARO/build M=/home/john/GIT/hid-tmff2/hid-tminit modules_install
make[2]: Entering directory '/home/john/GIT/hid-tmff2/hid-tminit'
make[2]: *** /lib/modules/5.14.18-1-MANJARO/build: No such file or directory. Stop.
make[2]: Leaving directory '/home/john/GIT/hid-tmff2/hid-tminit'
make[1]: *** [Makefile:7: install] Error 2
make[1]: Leaving directory '/home/john/GIT/hid-tmff2/hid-tminit'
make: *** [Makefile:17: hid-tminit] Error 2
Under lib/modules, I don't have a a build directory:
john@ja-clevo hid-tmff2]$ **ls /lib/modules/5.14.18-1-MANJARO/**
extramodules/ modules.alias modules.builtin.alias.bin modules.dep modules.order modules.symbols.bin kernel/ modules.alias.bin modules.builtin.bin modules.dep.bin modules.softdep pkgbase kernelbase modules.builtin modules.builtin.modinfo modules.devname modules.symbols vmlinuz
I have updated the driver/firmware installed on the wheel to the latest. Firmware is 34.00 and Driver is 2.10.84.0.
Is there anything else I can do to try and install the drivers or to get the wheel to be correctly recognized?
Thanks,
Follow up to berarma/oversteer#73, sorry for the delay @Kimplul.
I managed to get a packed capture of the initial USB communication with Linux, I can see that it does include things like the vendor id so the connected pedals might be in there as well: t300rs_t2pa_linux.pcap
I'm having trouble capturing the equivalent communication with Windows on VirtualBox (never done this), I can connect the wheel to the VM but the wheel doesn't reinitialize, even though I can see all the buttons and axis functional on the driver software inside Windows.
I'm following this guide, I can't do step 4 which is probably what is causing the wheel to not reinitialize, but none of the USB interfaces show up on ifconfig -a
like they do on wireshark.
Trying to install with command
yay -S hid-tmff2-dkms
I get the messages at the end :
:: Procéder à l’installation ? [O/n]
(1/1) vérification des clés dans le trousseau [###############################################] 100%
(1/1) vérification de l’intégrité des paquets [###############################################] 100%
(1/1) chargement des fichiers des paquets [###############################################] 100%
(1/1) analyse des conflits entre fichiers [###############################################] 100%
(1/1) vérification de l’espace disque disponible [###############################################] 100%
:: Exécution des crochets de pré-transaction…
(1/1) Remove upgraded DKMS modules
==> Unable to remove module hid-tmff2/0.8 for kernel 5.12.19-1-MANJARO: Not found in dkms status output.
:: Traitement des changements du paquet…
(1/1) réinstallation hid-tmff2-dkms [###############################################] 100%
:: Exécution des crochets de post-transaction…
(1/2) Arming ConditionNeedsUpdate...
(2/2) Install DKMS modules
==> Unable to install module hid-tmff2/0.8 for kernel 5.12.19-1-MANJARO: Missing kernel modules tree.
I don't success to solve this issue with message "Unable to ...."
Hi! How to remove/reinstall the driver?
First, thanks for your work on this. It's much appreciated.
I am on arch linux, kernel Linux 5.9.1-arch1-1 #1 SMP PREEMPT.
I haven't managed to get force feedback working. Attached is the dmesg log when plugging in the wheel. There are some errors:
[ 12.988878] BUG: scheduling while atomic: systemd-udevd/757/0x00000002
...
[ 12.988968] Preemption disabled at:
[ 12.988974] [<0000000000000000>] 0x0
...
[ 12.988986] Call Trace:
[ 12.988999] dump_stack+0x6b/0x88
After plugging in, the wheel does its calibration thing and after that force feedback works to keep the wheel centered.
Oversteer shows working axes and buttons, but the force feedback setting seem to have no effect. fftest reports OK for all effects, but nothing happens when actually running an effect.
It may be of significance that wheel's firmware has been last updated a couple of years ago. I haven't had access to Windows machine since, but I'll try to find one to update to recent firmware to see if that helps.
Otherwise, I 'd appreciate any pointers on what to try to make this work. Thanks.
I have updated the firmware with the Thrustmaster tool in Win7, but it is still not working in American Truck Simulator on my Regolith (Ubuntu 20.10).
I might be able to provide some information, if you can tell me, what to look for.
Never had a wheel, ordered T300RS GT today. I tried to install driver and got this:
make -C /lib/modules/5.8.0-7630-generic/build M=/home/fcf/hid-tmff2 modules_install
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-7630-generic'
INSTALL /home/fcf/hid-tmff2/hid-tminit.ko
At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:69
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:76
sign-file: certs/signing_key.pem: No such file or directory
INSTALL /home/fcf/hid-tmff2/hid-tmt300rs.ko
At main.c:160:- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:69
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:76
sign-file: certs/signing_key.pem: No such file or directory
DEPMOD 5.8.0-7630-generic
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-7630-generic'
Hi @Kimplul ,
more of a question than issue - please, how to set constant/periodic effects?
I can see in a code that it should be supported as there are methods t300rs_upload_periodic
and t300rs_upload_constant
, but not sure how to change them.
Oversteer does not even have those two in force feedback tab.
I tried F1 2019 yesterday and while wheel was recognized and worked in menus it behaved strangely in game - like pedals were constantly pressed or something :( Any hint?
Thanks.
peter
While playing Project CARS 2 on Steam (via Proton Tricks) the following spams the console (minus the initialization bit):
[62004.545268] input: Thrustmaster Thrustmaster T300RS Racing wheel as /devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-5/1-5:1.0/0003:044F:B66E.000B/input/input36
[62004.545358] hid-generic 0003:044F:B66E.000B: input,hidraw9: USB HID v1.11 Joystick [Thrustmaster Thrustmaster T300RS Racing wheel] on usb-0000:01:00.0-5/input0
[62008.871269] input: Thrustmaster Thrustmaster T300RS Racing wheel as /devices/pci0000:00/0000:00:01.1/0000:01:00.0/usb1/1-5/1-5:1.0/0003:044F:B66E.000B/input/input37
[62008.871334] t300rs 0003:044F:B66E.000B: input,hidraw9: USB HID v1.11 Joystick [Thrustmaster Thrustmaster T300RS Racing wheel] on usb-0000:01:00.0-5/input0
[62008.871347] t300rs 0003:044F:B66E.000B: force feedback for T300RS
[62291.174625] t300rs 0003:044F:B66E.000B: invalid effect type: 2038
[62291.174628] t300rs 0003:044F:B66E.000B: failed uploading effects
[62322.996295] t300rs 0003:044F:B66E.000B: invalid effect type: 2038
[62322.996299] t300rs 0003:044F:B66E.000B: failed uploading effects
[62451.303549] t300rs 0003:044F:B66E.000B: invalid effect type: 2031
[62451.303552] t300rs 0003:044F:B66E.000B: failed uploading effects
[62451.561965] t300rs 0003:044F:B66E.000B: invalid effect type: 2031
[62451.561968] t300rs 0003:044F:B66E.000B: failed uploading effects
After game launch, this starts spamming the console:
[ 3034.516377] t300rs 0003:044F:B66E.000B: output queue full
[ 3034.533090] t300rs 0003:044F:B66E.000B: output queue full
[ 3034.533094] t300rs 0003:044F:B66E.000B: output queue full
[ 3034.533096] t300rs 0003:044F:B66E.000B: output queue full
[ 3034.551362] t300rs 0003:044F:B66E.000B: output queue full
[ 3034.551365] t300rs 0003:044F:B66E.000B: output queue full
Game: ETS2 on Steam (running the windows version via Proton Experimental)
Hello,
I was looking for support for a Thrustmaster TX wheel. Mine is the Ferrari 458 wheel, but it is technically a Thrustmaster TX.
https://support.thrustmaster.com/en/product/txracingwheel-en/
From my understanding, this wheel is the same as the T300RS, but for Xbox/PC instead of PS4/PC. The drivers on Windows use the same files.
I was able to get the wheel working with tmdriv, but it did not have FFB.
I would love if there would be support for my wheel on Linux!
thanks!
hi @Kimplul ,
thanks for your driver!
I tried to install and use hid-tmff2 and everything went smoothly until last step:
peter@dell:~/Projects/hid-tmff2$ sudo modprobe hid_tmt300rs modprobe: ERROR: could not insert 'hid_tmt300rs': Exec format error
Please, any idea what is wrong?
Thanks a lot.
peter@dell:~/Projects/hid-tmff2$ uname -a
Linux dell 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
peter@dell:~/Projects/hid-tmff2$ ls /lib/modules/$(uname -r)/extra
hid-tminit.ko hid-tmt300rs.ko
Hi,
Before installing the driver, I could play automobilista 2, albeit with no FFB.
Now, with the T248 plugged, the game crashes on startup. If I disconnect the wheel, start the game, and reconnect the wheel, the game crashes the moment the wheel is connected. This happens with proton experimental, 7.0 and 6.3.
How can I give you proper info to debug this? Like logs or smthing.
Hello! Have there been any global changes in the driver over the past six months to update it?
Hi,
I got an G29 wheel base and wanted to use the T-LCM pedals separately via USB. Is there a way to do it?
Hello! I was about to sell my T300RS when I found this project.
I have successfully built and installed both modules in my Linux Mint 20. But, unfortunately, I have no FFB in any game (Assetto Corsa Competizione, Wrekfest, ...).
In other hand, Oversteer software finds successfully the plugged T300RS with theses modules.
What are the requirements to make FFB work?
$ uname -a
Linux spocthier-PC 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
And the last firmware is installed (v31).
I don't know what to say more to help for debugging.
Thx for this!
When I nagitive the direction of ffb effect, there is a high probability that force feedback not work. Unless I remove the effect and upload a new effect. Is it my misuse?
system: Ubuntu 16.04/20.04
my test code with compile command gcc -std=c++14 t300rs.cc
:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <fcntl.h>
#include <libevdev-1.0/libevdev/libevdev.h>
#include <unistd.h>
int main() {
int event_fd_ =
open("/dev/input/by-id/"
"usb-Thrustmaster_Thrustmaster_T300RS_Racing_wheel-event-joystick",
O_RDWR | O_NONBLOCK);
ff_effect effect_;
effect_.id = -1;
effect_.type = FF_CONSTANT;
effect_.u.constant.level = 19722;
effect_.direction = 35389;
effect_.u.constant.envelope.attack_length = 0;
effect_.u.constant.envelope.attack_level = 0;
effect_.u.constant.envelope.fade_length = 0;
effect_.u.constant.envelope.fade_level = 0;
effect_.trigger.button = 0;
effect_.trigger.interval = 0;
effect_.replay.length = 0xffff;
effect_.replay.delay = 0;
bool ffb_need_restart_ = false;
bool has_play_effect_ = false;
int cnt = 0;
while (true) {
// There is a high probability that force feedback will fail when change
// direction without rewrite
if (++cnt % 1000 == 0) {
effect_.direction = -effect_.direction;
// ffb_need_restart_ = true; // not restart
}
printf("ffb_level %d\n", effect_.u.constant.level);
printf("direction %d\n", effect_.direction);
if (ffb_need_restart_ || ioctl(event_fd_, EVIOCSFF, &effect_) < 0) {
printf("restart force feed back\n");
if (effect_.id >= 0 && ioctl(event_fd_, EVIOCRMFF, effect_.id) < 0) {
printf("ioctl erase feedback failed\n");
}
effect_.id = -1;
has_play_effect_ = false;
ffb_need_restart_ = false;
continue;
}
/* If first time, start to play the effect_ */
if (!has_play_effect_) {
struct input_event play;
play.type = EV_FF;
play.code = effect_.id;
play.value = 1;
if (write(event_fd_, (const void *)&play, sizeof(play)) == -1) {
printf("Play effect failed\n");
}
has_play_effect_ = true;
}
usleep(8000);
}
}
No force feedback in both games, even if the controller is recognized correctly. I can play the game, but there is a uniform resistance of the wheel, with no proper force feedback felt.
Launch any of the games in proton experimental or 6.3-8, and feel no feedback. I am using a Thrustmaster T248.
fftest fails to detect the device properly, oversteer also, and the ls usb of the dfevice is:
Bus 003 Device 002: ID 044f:b696 ThrustMaster, Inc. Thrustmaster Racing Wheel FFB
Please let me know how I can help to add support for it, I'm not tech savvy enough to implement it on my own and do a pull request :(
First off, thank you very much for your hard work on this project. I'd love to buy you a beer or something if you accept donations for your time. We pay so much for these devices and games but the parts that really stitch together Linux gaming are often small projects like this and the people behind them.
I've just purchased a used T300 and have been testing this out with several games. Everything is mostly working great however in beamng, which is the game I spend the most time in, I've experienced two issues:
libbeamng.| Steering wheel drivers didn't provide any FFB resolution information. Defaulting to 65536 steps
. This doesn't seem to be so much of an issue, FFB is functional, but I'm curious what exactly this might mean and thought it might be something you should be aware of.I know that beamng is running through proton and there are a lot of variables there with all the compatibility layers but it would be interesting to hear if you've encountered this and if you have any ideas. Also I thought these might be related so I put them in the same issue. Let me know if I should open separate ones.
Thanks again!
First of all: thank you for the driver! :D
The only issue i encounter is that the dkms modules can't be installed on kernel update because dkms is trying to install them in the old kernel:
[2021-09-21T00:12:44+0200] [ALPM-SCRIPTLET] ==> dkms install --no-depmod -m hid-tmff2 -v 0.8 -k 5.14.6-2-MANJARO
[2021-09-21T00:12:44+0200] [ALPM-SCRIPTLET] Error! Bad return status for module build on kernel: 5.14.6-2-MANJARO (x86_64)
[2021-09-21T00:12:44+0200] [ALPM-SCRIPTLET] Consult /var/lib/dkms/hid-tmff2/0.8/build/make.log for more information.
[2021-09-21T00:12:44+0200] [ALPM-SCRIPTLET] ==> Warning, `dkms install --no-depmod -m hid-tmff2 -v 0.8 -k 5.14.6-2-MANJARO' returned 10
[2021-09-21T00:12:44+0200] [ALPM-SCRIPTLET] ==> dkms install --no-depmod -m hid-tmff2 -v 0.8 -k 5.10.67-1-MANJARO
[2021-09-21T00:12:45+0200] [ALPM-SCRIPTLET] Error! Bad return status for module build on kernel: 5.10.67-1-MANJARO (x86_64)
[2021-09-21T00:12:45+0200] [ALPM-SCRIPTLET] Consult /var/lib/dkms/hid-tmff2/0.8/build/make.log for more information.
[2021-09-21T00:12:45+0200] [ALPM-SCRIPTLET] ==> Warning, `dkms install --no-depmod -m hid-tmff2 -v 0.8 -k 5.10.67-1-MANJARO' returned 10
[2021-09-21T00:12:45+0200] [ALPM-SCRIPTLET] ==> dkms install --no-depmod -m hid-xpadneo -v 0.9.1 -k 5.14.6-2-MANJARO
as i only encounter this behaviour with hid-tmff2, i would assume it's something in your dkms.conf (i have no experiencing in packaging dkms though). One thing that i notice when looking at the dkms.conf file and comparing it to xpadneo's .conf-file (which works as expected here) is the MAKE line:
MAKE[0]="make -C $kernel_source_dir M=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build/src VERSION=$PACKAGE_VERSION modules"
maybe that has something to do with it?
Report in #21 about FFB in RRRE existing but being 'inverted'.
I couldn't get RRRE to launch, as it kept spewing SteamAPI_Init()
failed at me with newest Proton GE, 7.0 and 6.3-8. I'll try to get the game to run, but for now this issue is mostly just an acknowledgement of the report.
Hello,
a few days ago my T300 stopped being available in games running in proton. This seems to suddenly effect all recent proton versions. 5.0-10 is the latest version that works as expected. Wine/Proton has a tool to test available controllers:
proton run control
(of course using the same wine prefix and so on)
It looks like this:
In newer versions there is an additional middle panel titled "Connected (xinput)"
When the game is started "Thrustmaster T300 RS Racing Wheel" is moved into this panel. Testing the device under the "Test Joystick" tab indicates that no input is detected. The behaviour is reverted back to normal when the game stops.
Weird thing is that my pedals do not see this treatment (maybe it does not qualify as a controller without any buttons?)
Do you see similar effects? Is there something that could be implemented on the driver side to prevent this behaviour?
Other things I have tried:
The same Proton versions worked before, it seems to be a combination of Proton+Steam+Runtime+Wizardry
Pop_OS 21.04
Whenever I unplug the steering wheel my entire pc reboots after 10-20 seconds or longer. Any idea where I should start looking as to a possible cause?
Thanks, ACC is working perfectly :)
Hello,
As the title says, I've tried both Project Cars 2 under Proton and the Oversteer aplication and both detect the wheel correctly but neither one has the gas pedal working.
Oversteer shows the T2PA pedals as clutch and brake instead of brake and gas, PC2 only detects the brake. I've made sure that the wheel is in the correct mode, with the red light and PS3 selected. I've also tried to select the green pedal mode but it didn't make a difference.
Do you have any idea what the issue might be?
I would be happy to try to debug it myself and open a PR with a fix if you could give me some tips on where to get started :)
Hi I have a T-GT II and I would like to use it on linux (I use pop os)
I install the driver after figure it out for the ssl problem My wheel is not reconize
dmesg
[ 384.552140] usb 5-1: USB disconnect, device number 12
[ 384.552145] usb 5-1.1: USB disconnect, device number 13
[ 386.192095] usb 5-1: new high-speed USB device number 14 using xhci_hcd
[ 386.343422] usb 5-1: New USB device found, idVendor=05e3, idProduct=0610, bcdDevice=32.98
[ 386.343427] usb 5-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[ 386.343429] usb 5-1: Product: USB2.0 Hub
[ 386.394712] hub 5-1:1.0: USB hub found
[ 386.395172] hub 5-1:1.0: 2 ports detected
[ 386.524294] hub 5-1:1.0: USB hub found
[ 386.524791] hub 5-1:1.0: 2 ports detected
[ 386.875771] usb 5-1.1: new full-speed USB device number 15 using xhci_hcd
[ 386.992678] usb 5-1.1: New USB device found, idVendor=044f, idProduct=b66d, bcdDevice= 7.00
[ 386.992681] usb 5-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 386.992682] usb 5-1.1: Product: Thrustmaster Racing Wheel FFB
[ 386.992683] usb 5-1.1: Manufacturer: Thrustmaster
[ 387.071842] input: Thrustmaster Thrustmaster Racing Wheel FFB as /devices/pci0000:00/0000:00:08.1/0000:2f:00.3/usb5/5-1/5-1.1/5-1.1:1.0/0003:044F:B66D.0010/input/input36
[ 387.071948] tmff2 0003:044F:B66D.0010: input,hiddev2,hidraw2: USB HID v1.10 Gamepad [Thrustmaster Thrustmaster Racing Wheel FFB] on usb-0000:2f:00.3-1.1/input0
[ 387.074675] tmff2 0003:044F:B66D.0010: firmware version 10 is too old, please update.
[ 387.074679] tmff2 0003:044F:B66D.0010: note: this has to be done through Windows.
[ 387.074680] tmff2 0003:044F:B66D.0010: failed initializing T300RS
[ 387.074681] tmff2 0003:044F:B66D.0010: init failed
[ 387.168318] tmff2: probe of 0003:044F:B66D.0010 failed with error -22
lsusb in other mod (what should on pc)
Bus 005 Device 017: ID 044f:b66d ThrustMaster, Inc. Thrustmaster Racing Wheel FFB
lsusb in gt mod (I believe for granturismo on ps4/5) not reconize on windows
Bus 005 Device 021: ID 044f:b681 ThrustMaster, Inc. Thrustmaster Racing Wheel FFB T-GT
last firmware for the tgt2 base is the v10
So What do you need to add the T-GT II ? I have a laptop with windows on it if need information from windows side.
Thanks for reading me :)
First of all, thanks for this great driver, thanks to it i was able to enjoy my whell on linux for some time. Unfortunately it stopped working yesterday. I installed all my updates yesterday (5.15.16-1-MANJARO), and for sure I used the wheel same day, but i can't recall if it was before or after udpates.
All in all, now it comes up as 'Bus 001 Device 008: ID 044f:b65d ThrustMaster, Inc. Thrustmaster FFB Wheel', like when i didn't have drivers installed. I reinstalled oversteer (also removed ./home configs) and drivers. Then I tried to manually load drivers (your driver name is hid_tmff?) but after this whell comes up again as 'ThrustMaster, Inc. Thrustmaster FFB Wheel'
Output of lsmod:
hid_tminit 16384 0
hid_thrustmaster 16384 0
hid_tmff 16384 0
ff_memless 20480 1 hid_tmff
joydev 28672 1
It works with limited functionality and doesn't show up in Oversteer.
Driver installation:
[2022-01-26T17:51:07+0100] [ALPM] transaction started
[2022-01-26T17:51:07+0100] [ALPM] installed dkms (3.0.3-1)
[2022-01-26T17:51:07+0100] [ALPM] transaction completed
[2022-01-26T17:51:07+0100] [ALPM] running '30-systemd-update.hook'...
[2022-01-26T17:51:12+0100] [ALPM] transaction started
[2022-01-26T17:51:12+0100] [ALPM] installed hid-tmff2-dkms (0.8-1)
[2022-01-26T17:51:12+0100] [ALPM] transaction completed
[2022-01-26T17:51:12+0100] [ALPM] running '30-systemd-update.hook'...
[2022-01-26T17:51:12+0100] [ALPM] running '70-dkms-install.hook'...
[2022-01-26T17:51:12+0100] [ALPM-SCRIPTLET] ==> dkms install --no-depmod hid-tmff2/0.8 -k 5.14.21-2-MANJARO
[2022-01-26T17:51:15+0100] [ALPM-SCRIPTLET] ==> dkms install --no-depmod hid-tmff2/0.8 -k 5.15.16-1-MANJARO
[2022-01-26T17:51:19+0100] [ALPM-SCRIPTLET] ==> depmod 5.14.21-2-MANJARO
[2022-01-26T17:51:24+0100] [ALPM-SCRIPTLET] ==> depmod 5.15.16-1-MANJARO
Hi there,
Good work so far to get T300 RS support to linux; Kudos!
I wonder if you can bring T500 RS support to your project.
I know there are some other alternatives that started to make the device detection working (https://github.com/her001/tmdrv) so maybe there something to combine with you two projects.
Personally owner of T500 RS + shifter, I'd be glad to give some help if I can anyhow, but I don't know from where to start...
Hi @hoover67, I took the liberty to open up an issue for you in reference to #49 , hope you can at least comment on issues.
Just so we're clear, this driver is just the basis for the T500 driver. I don't own a T500 myself, and @cazzoo kindly offered to try reverse-engineering the wheel, but he hasn't had much time to do so. As such, the FFB won't work even if the wheel is detected properly, sorry.
If you'd like to help with the reverse-engineering, there's a short description of what has to be done in the wiki.
Anycase, the actual issue you reported is technically in https://github.com/scarburato/hid-tminit. Thrustmaster wheels have a pretty dumb thing where they require the computer to first initialize them (such as telling the wheel which model it is, wtf?), and the hid-tminit
driver is specifically for this as multiple wheels use more or less the same init sequence. The hid-tmff2
driver then takes over and provides FFB for the initialized wheel.
From the log it seems that the error is -EPIPE
, which according to this might be related to hardware issues. I remember contacting Thrustmaster about something similar and apparently it is recommended to use USB3 ports and try different ports. Not sure if it's relevant here, but probably worth a shot if you didn't already try it.
@cazzoo Have you run into anything similar with your wheel?
DiRT Rally 2.0's FFB doesn't work ootb, but I got it working by adding the line
<device id="{B696044F-0000-0000-0000-504944564944}" name="tm_t248" priority="100" type="wheel" />
into the games' local file input/devices/device_defines.xml
and creating a file input/actionmaps/tm_t248.xml
with the content
<?xml version="1.0" encoding="utf-8"?>
<action_map name="tm_t248" device_name="tm_t248" library="lib_direct_input" version="19">
<axis_defaults>
<axis name="di_z_axis_rotation">
<action deadzone="0" name="driving.accelerate" />
<action deadzone="0" name="menu.navigate.scroll.down" />
<action deadzone="0" name="replay.forward" />
</axis>
<axis name="di_y_axis">
<action deadzone="0" name="driving.brake" />
<action deadzone="0" name="menu.navigate.scroll.up" />
<action deadzone="0" name="replay.rewind" />
</axis>
<axis name="di_slider_0">
<action deadzone="0.2" saturation="0.6" name="driving.clutch" />
</axis>
<axis name="di_x_axis">
<action deadzone="0" name="driving.steer.left" />
<action deadzone="0" name="driving.steer.right" />
<action deadzone="0" name="replay.forward" />
<action deadzone="0" name="replay.rewind" />
</axis>
</axis_defaults>
<group name="driving">
<action name="accelerate">
<axis name="di_z_axis_rotation" type="negative" />
</action>
<action name="brake">
<axis name="di_y_axis" type="negative" />
</action>
<action name="change_view">
<axis name="di_button_3" />
</action>
<action name="clutch">
<axis name="di_slider_0" type="negative" />
</action>
<action name="handbrake">
<axis name="di_button_8" />
</action>
<action name="headlights">
<axis name="di_button_4" />
</action>
<action name="pause">
<axis name="di_button_5" />
</action>
<action name="reset_vehicle">
<axis name="di_dpad_0_down" />
</action>
<action name="roadside_repair">
<axis name="di_dpad_0_up" />
</action>
<action name="wipers">
<axis name="di_button_2" />
</action>
<group name="gear">
<group name="sequential">
<action name="up">
<axis name="di_button_1" />
</action>
<action name="down">
<axis name="di_button_0" />
</action>
</group>
</group>
<group name="look">
<action name="back">
<axis name="di_button_9" />
</action>
<group name="shared">
<action name="right">
<axis name="di_dpad_0_right" />
</action>
<action name="left">
<axis name="di_dpad_0_left" />
</action>
</group>
</group>
<group name="steer">
<action name="left">
<axis name="di_x_axis" type="lower" />
</action>
<action name="right">
<axis name="di_x_axis" type="upper" />
</action>
</group>
</group>
<group name="menu">
<action name="start">
<axis name="di_button_5" />
</action>
<action name="option">
<axis name="di_button_11" />
</action>
<group name="navigate">
<action name="back">
<axis name="di_button_8" />
</action>
<action name="down">
<axis name="di_dpad_0_down" />
</action>
<action name="left">
<axis name="di_dpad_0_left" />
</action>
<action name="right">
<axis name="di_dpad_0_right" />
</action>
<action name="select">
<axis name="di_button_4" />
</action>
<action name="up">
<axis name="di_dpad_0_up" />
</action>
<action name="cancel_keybinding">
<axis name="di_button_12" />
</action>
<group name="tab">
<group name="primary">
<action name="left">
<axis name="di_button_0" />
</action>
<action name="right">
<axis name="di_button_1" />
</action>
</group>
<group name="secondary">
<action name="left">
<axis name="di_y_axis" type="negative" />
</action>
<action name="right">
<axis name="di_z_axis_rotation" type="negative" />
</action>
</group>
</group>
</group>
<group name="context">
<action name="1">
<axis name="di_button_9" />
</action>
<action name="2">
<axis name="di_button_2" />
</action>
</group>
</group>
<group name="replay">
<action name="exit">
<axis name="di_button_8" />
</action>
<action name="forward">
<axis name="di_x_axis" type="upper" />
<axis name="di_z_axis_rotation" type="negative" />
</action>
<action name="rewind">
<axis name="di_x_axis" type="lower" />
<axis name="di_y_axis" type="negative" />
</action>
<action name="playback_step_up">
<axis name="di_dpad_0_up" />
</action>
<action name="playback_step_down">
<axis name="di_dpad_0_down" />
</action>
<action name="pause">
<axis name="di_button_4" />
</action>
<group name="toggle">
<action name="ui">
<axis name="di_button_3" />
</action>
</group>
<group name="camera">
<action name="previous">
<axis name="di_button_0" />
</action>
<action name="next">
<axis name="di_button_1" />
</action>
</group>
</group>
<group name="network">
<group name="toggle">
<action name="voice">
<axis name="di_button_11" />
</action>
</group>
</group>
</action_map>
I suspect something similar should be possible with DiRT 4, but no success so far.
EDIT: The same procedure outlined above works with DiRT 4 FFB running under Wine, but for some reason you can't use the wheel buttons to navigate menus. Haven't been able to get the Linux native version to work, and it also seems to ignore the clutch pedal, so for now my recommendation is to run DiRT 4 through Proton.
Line 44 in 3e03c3d
$ make
make -C /lib/modules/5.10.1-gentoo-r1/build M=/usr/src/hid-tmff2 modules
make[1]: Entering directory '/usr/src/linux-5.10.1-gentoo-r1'
CC [M] /usr/src/hid-tmff2/hid-tminit.o
/usr/src/hid-tmff2/hid-tminit.c: In function ‘tminit_interrupts’:
/usr/src/hid-tmff2/hid-tminit.c:44:5: error: implicit declaration of function ‘kzfree’; did you mean ‘kfree’? [-Werror=implicit-function-declaration]
44 | kzfree(send_buf);
| ^~~~~~
| kfree
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:279: /usr/src/hid-tmff2/hid-tminit.o] Error 1
make[1]: *** [Makefile:1805: /usr/src/hid-tmff2] Error 2
make[1]: Leaving directory '/usr/src/linux-5.10.1-gentoo-r1'
make: *** [Makefile:5: all] Error 2
I had to manually change that to kfree(send_buf);
to make it compile cleanly.
gcc:
gcc version 9.3.0 (Gentoo 9.3.0-r2 p4)
Hello,
I'm using Ubuntu 20.10 and running an Intel Core I5 with an AMD Radeon RX 5600 XT.
With the Bash command "lsusb" it shows me this: Bus 001 Device 006: ID 044f:b66d ThrustMaster, Inc. Thrustmaster Racing Wheel FFB
I just bought the Thrustmaster T300 Alcantara Editon and tried to use it for Forza Horizon 5 with Linux. I plugged everything in and tried to configure it in FH5 - didn't work. So the next step was trying to configure the Steering Wheel in the Steam Settings. It was recognized as a normal/typical GamePad. Configuring the Steering Wheel itself in the Controller Settings was possible but I wasn't able to change anything effectively for using it. Then I noticed that the buttons (including the shifter) were recognized which means I could use them in FH5. The Steering Wheel itself (Rotation Axis) and the Pedals were not usable/I could not bind a function on them. Also, I was not able to use them in steam for navigation inside the menus.
I already installed this Linux Kernel Module but there were some errors:
I don't think those errors are fatal because it installed successfully.
According to this maybe my distro does not load these modules because they're unsigned.
I also took a lock at issues #8 and #14 - I was not able to find a solution for this problem.
modprobe shows nothing special:
I can also find the "/lib/modules/5.13.0-22-generic/extra/hid-tmt300rs.ko" file. (it's the same for "sudo modprobe hid-tminit")
For "sudo dmesg -w" this shows up:
I've already had a conversation with berarma.
Thanks
Hi,
Off the bat, I would like to that you for your efforts on this. It's great to finally have my wheel working nearly perfectly on Linux :)
I could not find a thread indicating which games have been tested so I made a shortlist of tested games and encountered problems.
Let me know if I can be of some assistance to help debug/test fixes for known issues.
Do you still have the capped traffic you used to get the USB controller request to initialize your Thrustmaster wheel? If so can you share them?
Would be nice to understand how the Windows's driver is able to understand which wheel really is the generic 044f:b65d so that we can write a single and polyvalent init driver for the Thrustmaster wheels. I'm not sure if it's even possible (is possible on Windows to have multiple Thrustmaster models at the same time?)
You can find my capped traffic from a T150 here, the control urb is the packet n° 210, it's a Wireshark file.
Maybe the correct title for this «issue» should be something like «Polyvalent hid-tminit»
Hello,
I'm looking to get my T300 + th8 shifter working.
I am a beginner with Linux and I can't manage to do the installation correctly.
My t300 is recognized but no FFB!
I am under Ubuntu
Sorry for the beginner questions!
After entering the command to download the file, or should I enter "make" and then "sudo make install"?
The seized "DKMS" is it to be made in more?
Thanks for your help
When I try to make
or dkms-install
it says that there are incompatible gcc/plugin versions, specifically referring to structleak_plugin.so
. The plugin seems to normally exist inside /usr/lib/modules/5.10.36-2-MANJARO/build/scripts/gcc-plugins
but there seems to be a version mismatch?
DKMS make.log for hid-tmff2-0.8 for kernel 5.10.36-2-MANJARO (x86_64)
Sat Jun 12 01:31:40 PM EEST 2021
make -C hid-tminit
make[1]: Entering directory '/var/lib/dkms/hid-tmff2/0.8/build/hid-tminit'
make -C /lib/modules/5.10.36-2-MANJARO/build M=/var/lib/dkms/hid-tmff2/0.8/build/hid-tminit modules
make[2]: Entering directory '/usr/lib/modules/5.10.36-2-MANJARO/build'
CC [M] /var/lib/dkms/hid-tmff2/0.8/build/hid-tminit/hid-tminit.o
cc1: error: incompatible gcc/plugin versions
cc1: error: failed to initialize plugin ./scripts/gcc-plugins/structleak_plugin.so
make[3]: *** [scripts/Makefile.build:279: /var/lib/dkms/hid-tmff2/0.8/build/hid-tminit/hid-tminit.o] Error 1
make[2]: *** [Makefile:1821: /var/lib/dkms/hid-tmff2/0.8/build/hid-tminit] Error 2
make[2]: Leaving directory '/usr/lib/modules/5.10.36-2-MANJARO/build'
make[1]: *** [Makefile:5: all] Error 2
make[1]: Leaving directory '/var/lib/dkms/hid-tmff2/0.8/build/hid-tminit'
make: *** [Makefile:17: hid-tminit] Error 2
I’m running this driver, installed via the aur, in arch linux. i have blacklisted hid_thrustmaster. i have installed the windows drivers in the wine prefix.
In Assetto Corza Competizione, while on race track, wheel auto enters regardless of whether oversteer is open or closed, or whether overdrive autocenter is on/off.
When in ACC menu, wheel does not autocenter.
In Project Cars 2, wheel behaves as expected.
EDIT: wheel also auto enters in Wreckfest, as it does in ACC. When in desktop (no game open), wheel auto centers until Overdrive is opened (with autocenter off).
I’m assuming this means that tmff2 autocenters by default; is there a config file where i can change a 0 to a 1 and see how behavior changes?
Hi there.
The T818 has the same device ID as the T248 (b696) so it is immediately picked up by hid-tmff2 and usable.
I recently noticed that it's feeling different than on Windows, so I decided to capture USB packets and check if I can see any differences between Linux and Windows.
This issue is intended as a place for me to gather my findings and for people to chime in if they already have some information.
To find packets differing between Windows and Linux I for now resorted to recording USB packets while running rFactor 2 and comparing the used commands. Most of them are the same but there is one command that is sent a few times that does not seem to be sent by hid-tmff-new.
60 00 --- Default Header
01 --- ID
0b --- Unknown Command
00 00
37 fd --- Unknown values
00 00
ff ff --- Unknown vlaues
00 80 --- Unknown values
I was unable to recreate this command with fedit.exe for now, so I have no clue what it does.
I don't quite understand the code inside t248.c yet, though, so it might be that it was already deciphered.
If anyone cares to chip in or help out, feel free!
In the README, there are instructions on how to change range by writing to file:
/sys/bus/devices/XXXX:044F:B66E.XXX/range
In my system (Arch Linux) there is no such file, instead the range can be changed at:
/sys/devices/pci0000:00/0000:00:14.0/usb2/2-5/2-5:1.0/0003:044F:B66E.0008/range
The exact path varies and can be seen in dmesg
when plugging-in the wheel.
The driver seems to init 900 degrees range, aren't TM3000RS wheels all 1080?
Btw, I've been testing the wheel in Dirt Rally and BeamNG and it works great.
Hi, I've got a T300rs and the (old) Ferrari F1 Wheel attachment.
When using the normal PlayStation attachment, everything's working fine, but whenever I use my F1 Wheel, it's not getting picked up by the driver.
I'm willing to test/help with anything you need! :)
Hello,
I've noticed that Dirt Rally 2 doesn't allow me to set "Tyre Slip" and "Engine" options in "vibration & feedback" menu. The steering effects work, but there is no vibration.
I've tried fftest
on the device. It uploaded all effects without problem, but only "periodic sinusoidal" and "constant" do anything (they move the steering wheel), but nothing else (strong/weak rumble etc.) works. (There is no error, it's just nothing happens.)
Are these effects known to work or is this known issue?
Wheel firmware version: 34 (this is the one provided by the updater I could download from thrustmaster website, not sure if there is way to downgrade).
Hello,
Just a quick question. I updated to Ubuntu 21.10 from .04 and this one ships with kernel 5.13 which includes some basic support for the thrustmaster T300.
I was wondering. How do I blacklist that default driver and use this one? It seems to be conflicting somehow. The weel is detected but no FFB.
I got a very large dead zone in the center. I created a file /etc/udev/rules.d/99-joydev.rules. What value should be changed to --deadzone 0?
FFB is not working for me, and I am kind of lost how to solve this. Can someone please explain what possibly can go wrong? FFB isn't working for F1 2021 and Assetto Corsa Competizione.
I know this will sounds a bit strange but I have been able to reproduce this on multiple occasions.
I recently acquired F1 22 and it did not recognize my wheel no matter what I did. Eventually I gave up assuming it was a game issue.
A few days later I noticed a post on vales proton bug tracker about someone who installed the windows drivers inside the prefix and then the wheel was detected and mapped correctly on startup. I was pretty sure it won’t do anything, knowing wine has massive limitation when it comes to driver support, but it did. The wheel is detected and works perfectly.
I then decided to test other titles such as ams2 and acc. With both titles the games did not recognize my previous configuration and I had to recalibrate everything. What really surprised me is that the feel of the wheel and especially the pedals changed a lot after installing the drivers. I race daily and I have very fine settings I always keep, but this changed it quite significantly. Can’t really say if it’s for better or worse but the pedals do provide more depth or range of motion for sure.
Could you shed some light on this perhaps? I honestly feel like this should not have done anything yet it made a big difference.
Does this driver work on the latest firmware v.34?
I saw there is a closed issue about this, but it seems i have a different problem.
I tried to locate the range file but it just doesn't exist. It can't be found anywhere, not even in the paths given by dmesg.
Could it be that README is outdated? Maybe that file now has another name?
I know that the wheel base is supposed to be used in ps3 mode, while running on PC, but…
When running so, the TH8A addon needs to be connected to the PC via a dedicated usb cable.
I wonder if it could be reworked, so that the wheel will be recognised in PS4 mode with all attachements. I could do all the necessary testing. Just point me in the right direction.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.