Last active
March 27, 2021 14:19
-
-
Save andsve/1805fdaec8cb45fb7971f81fb8d3a656 to your computer and use it in GitHub Desktop.
Thrustmasters T150 Pro USB, Mac data report
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Investigating values in the report data for Thrustmasters T150 Pro (including and connected pedals) when connected to a MacBook Pro. | |
The wheel is set in the PS4 mode, NOT the "recommended" PC mode "PS3". | |
The values were snooped up using Wireshark, listening to the USB. | |
Vendor: 0x44F (1103) | |
Product: 0xB66D (46701) | |
(Note: The values were recorded while the "switch clutch and acc" mode was enabled, sadly... But hopefully it should only be those two "axis" being swapped.) | |
Example of report data (in idle): | |
01 80 80 80 80 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c6 7f 00 00 ff ff ff ff 00 ff ff 00 00 00 00 00 00 00 00 00 00 | |
(Note: Clutch in this case seems to report 00 00 as idle, but "should" be ff ff. It does however fall back to ff ff when anything else is being pressed, but might be something to keep in mind when reading the clutch values.) | |
Naive interpretation of the different bytes: | |
-------------------------------------------------------------------------- | |
BYTE: 0 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | 1 | CONST (=0x01) | |
+-------------------+ | |
BYTE: 1, 2, 3, 4 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| 1 | 0 | CONST (=0x80) | |
+-------------------+ | |
HAT and BUTTONS | |
BYTE: 5 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | 1 | IDLE | |
+-------------------+ | |
| 1 | | TRIANGLE (=8x) | |
+-------------------+ | |
| 1 | | CIRCLE (=4x) | |
+-------------------+ | |
| 1 | | CROSS (=2x) | |
+-------------------+ | |
| 1 | | SQUARE (=1x) | |
+-------------------+ | |
| | | HAT UP (=x0) | |
+-------------------+ | |
| | 1 | HAT RIGHT (=x2) | |
+-------------------+ | |
| | 1 | HAT DOWN (=x4) | |
+-------------------+ | |
| | 1 1 | HAT LEFT (=x6) | |
+-------------------+ | |
TRIGGERS, SHARE, OPTIONS | |
BYTE: 6 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | | IDLE | |
+-------------------+ | |
| | 1 | L1 | |
+-------------------+ | |
| | 1 | L2 (NOTE, Byte 8 is 0xFF when active) | |
+-------------------+ | |
| 1 | | L3 | |
+-------------------+ | |
| | 1 | R1 | |
+-------------------+ | |
| | 1 | R2 (NOTE, Byte 9 is 0xFF when active) | |
+-------------------+ | |
| 1 | | R3 | |
+-------------------+ | |
| 1 | | SE/Share | |
+-------------------+ | |
| 1 | | ST/Options | |
+-------------------+ | |
PS Button | |
BYTE: 7 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | | IDLE | |
+-------------------+ | |
| | 1 | PS Button | |
+-------------------+ | |
L2 and R2, extra data? (See Byte 6 above) | |
BYTE: 8, 9 | |
8 9 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| | | | | IDLE | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | | | L2 | |
+-------------------+-------------------+ | |
| | | 1 1 1 1 | 1 1 1 1 | R2 | |
+-------------------+-------------------+ | |
Unused (could be force feedback data?) | |
BYTE: 10 to (and including) 42 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | | IDLE | |
+-------------------+ | |
WHEEL | |
BYTE: 43, 44 | |
NOTE: | |
Center can differ, after self test/setup the wheel will auto turn into "center". | |
The data is least significant byte first, so example below, center position is reported as 0xc67f, but should be read as a uint16_t as 0x7fc6! | |
43 44 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| 1 1 | 1 1 | 1 1 1 | 1 1 1 1 | Center position (=0xc67f) | |
+-------------------+-------------------+ | |
| 1 | 1 1 1 | 1 1 | 1 1 | Wheel to the right (=0x2d9a) | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | Right max (=0xffff) | |
+-------------------+-------------------+ | |
| 1 1 | 1 | 1 1 | 1 1 | Wheel to the left (=0x525a) | |
+-------------------+-------------------+ | |
| | | | | Left max (=0x0000) | |
+-------------------+-------------------+ | |
| 1 1 | 1 | | 1 1 1 | Left max-~30DEG (=0x3407) | |
+-------------------+-------------------+ | |
The range is 0x0000 to 0xffff, 0 to 65535. Center should be half, so: 65535/2 -> ~32767. | |
True value center compared to reported value after init/bootup; | |
"True": 32767 -> 0x7fff | |
After boot: 0xc67f (swap bytes) -> 0x7fc6 -> 32710 | |
(But after boot center can differ!) | |
PEDALS (CLUTCH, BREAK, ACC) | |
BYTE: 45, 46, 47, 48, 49, 50 | |
45 46 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | Idle | |
+-------------------+-------------------+ | |
| | | | | Clutch Max | |
+-------------------+-------------------+ | |
47 48 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | Idle | |
+-------------------+-------------------+ | |
| | | | | Break Max | |
+-------------------+-------------------+ | |
49 50 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | Idle | |
+-------------------+-------------------+ | |
| | | | | Acc Max | |
+-------------------+-------------------+ | |
Rest of vendor data is constant, as far as I understand. | |
BYTE: 51 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | | CONST (=0x00) | |
+-------------------+ | |
BYTE: 52, 53 | |
+-------------------+-------------------+ | |
| 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | | |
+-------------------+-------------------+ | |
| 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | CONST (=0xffff) | |
+-------------------+-------------------+ | |
BYTE: 54 to (and including) 63 | |
+-------------------+ | |
| 7 6 5 4 3 2 1 0 | | |
+-------------------+ | |
| | | CONST (=0x00) | |
+-------------------+ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment