0% found this document useful (0 votes)
259 views36 pages

Logitech Force Feedback Protocol V1.5

Uploaded by

5a796d
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
259 views36 pages

Logitech Force Feedback Protocol V1.5

Uploaded by

5a796d
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

Logitech

Force Feedback
Protocol
V1.5 - December 21, 2015
Logitech Force Feedback Protocol V1.5 Page 1 of 35

Table of Contents
1 License Agreement 3

2 Introduction 4
2.1 Revision History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.1 Classic Force Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.2 HID++ Force Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Classic Format 5
3.1 Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.1 CMD 0x00  Download Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2 CMD 0x01  Download and Play Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.3 CMD 0x02  Play Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.4 CMD 0x03  Stop Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.5 CMD 0x04  Default Spring On . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.6 CMD 0x05  Default Spring O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.7 CMD 0x08  Normal Mode / Extended Command . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.8 CMD 0x09  Set LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.9 CMD 0x0a  Set Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.10 CMD 0x0b  Raw Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.11 CMD 0x0c  Refresh Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.12 CMD 0x0d  Fixed Time Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.13 CMD 0x0e  Set Default Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.14 CMD 0x0f  Set Dead Band . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Force Types and Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.1 FORCE_TYPE 0x00  Constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.2 FORCE_TYPE 0x01  Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.3 FORCE_TYPE 0x02  Damper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.4 FORCE_TYPE 0x03  Auto-Centering Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.5 FORCE_TYPE 0x04  Sawtooth Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.6 FORCE_TYPE 0x05  Sawtooth Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.7 FORCE_TYPE 0x06  Trapezoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.8 FORCE_TYPE 0x07  Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.9 FORCE_TYPE 0x08  Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.10 FORCE_TYPE 0x09  Ramp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.11 FORCE_TYPE 0x0a  Square Wave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.12 FORCE_TYPE 0x0b  High-Resolution Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.13 FORCE_TYPE 0x0c  High-Resolution Damper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.14 FORCE_TYPE 0x0d  High-Resolution Auto-Centering Spring . . . . . . . . . . . . . . . . . . . . . 20
3.2.15 FORCE_TYPE 0x0e  Friction (only select devices) . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Extended Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 EXT_CMD 0x01  Change Mode to Driving Force Pro . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.2 EXT_CMD 0x02  Change Wheel Range to 200 Degrees . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.3 EXT_CMD 0x03  Change Wheel Range to 900 Degrees . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.4 EXT_CMD 0x09  Change Device Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.5 EXT_CMD 0x0a  Revert Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.6 EXT_CMD 0x10  Switch to G25 with USB Detach . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.7 EXT_CMD 0x11  Switch to G25 without USB Detach . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.8 EXT_CMD 0x12  Set RPM LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.9 EXT_CMD 0x81  Wheel Range Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Logitech Force Feedback Protocol V1.5 Page 2 of 35

4 HID++ Force Feedback 26


4.1 x8123 Force Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.1 x8123.0 getInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.2 x8123.1 resetAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.3 x8123.2 downloadEffect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.4 x8123.3 setEffectState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.5 x8123.4 destroyEffect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.6 x8123.5 getAperture and x8123.6 setAperture . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.7 x8123.7 getGlobalGains and x8123.8 setGlobalGains . . . . . . . . . . . . . . . . . . . . . . 32
4.1.8 x8123.0 forceHasFinished Notication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

A Appendix 34
A.1 Classic Compatibility Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
A.2 Xbox Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Logitech Force Feedback Protocol V1.5 Page 3 of 35

1 License Agreement
6.30.2014

1. License
Logitech Europe S.A. (Logitech) grants to Licensee a non-exclusive, royalty-free, non-sublicensable, nontransferable,
personal, worldwide license in the Technical Documentation and to copy the Technical Documentation. All right,
title and interest and any and all intellectual property rights to the Technical Documentation shall remain with
Logitech.

2. Warranties
Licensee shall make no representation or warranty to third parties on behalf of Logitech.

3. DISCLAIMERS
THE TECHNICAL DOCUMENTATION, LICENSED SPECIFICATION(S) AND ALL INTELLECTUAL PROPERTY
MADE AVAILABLE AND/OR LICENSED UNDER THIS AGREEMENT ARE PROVIDED "AS IS" WITHOUT
WARRANTY OF ANY KIND. LOGITECH DISCLAIMS ALL WARRANTIES, DUTIES AND CONDITIONS, EX-
PRESS, IMPLIED OR STATUTORY WITH RESPECT TO SUCH MATERIALS, INCLUDING ANY WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT.

4. Limitation of Liability
LOGITECH WILL NOT BE LIABLE FOR ANY DAMAGES ARISING FROM OR OTHERWISE RELATED TO
THIS AGREEMENT, WHETHER DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR SPE-
CIAL DAMAGES, EVEN IF LOGITECH HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES IN
ADVANCE.

5. Miscellaneous

(a) No Partnership
This Agreement does not create a partnership, joint venture or agency relationship between the parties.

(b) No Technical Support


This Agreement does not include technical support by Logitech. Licensee is solely responsible for any and all
such support. Logitech may at its sole discretion, provide updates to the Technical Documentation.

(c) Export Regulations


The Technical Documentation and Licensed Specications may be subject to U.S. export jurisdiction and other
applicable national or international laws. Licensee agrees to comply with all such laws.

(d) Governing Law


This Agreement is governed and controlled by the laws of the Switzerland.

(e) Assignment
Licensee may not transfer or assign this Agreement, or any rights or obligations hereunder, whether by operation
of contract, law, change of Control or otherwise. Any attempted assignment by Licensee in violation of this
Section is void.

(f ) Entire Agreement
This Agreement constitutes the entire agreement between the parties with respect to its subject matter, and
merges all prior and contemporaneous communications.
Logitech Force Feedback Protocol V1.5 Page 4 of 35

2 Introduction
This document denes parts of the Logitech Force Feedback protocol. Some commands used for testing/debugging and
other purposes have been omitted from this document. However, the given information should be sucient to implement
a fully functional open-source force feedback driver.

2.1 Revision History

RBosa, July 2014: First release; V1.0

Rbosa, July 2014: Second release, incorporated clarications and feedback from Edwin Velds; added EXT_CMD 0x0a,
EXT_CMD 0x10, EXT_CMD 0x11 and EXT_CMD 0x12; V1.1

Rbosa, July 2014: Added appendix listing all known wheels and their bcdVersion in the various modes; added table to
list supported commands to switch identity; V1.2

Rbosa, July 2014: Corrected Edwin's name; added G27 to Table 57; xed some spelling mistakes; claried spring
coecient swapping rule for older devices; added illustration of force position reporting vs. force location; V1.3

Rbosa, July/August 2015: Converted to PdfTex; added distinction between Classic Force Protocol and the new HID++
Force Protocol; xed many typos and consistency issues; V1.4

Rbosa, December 2015: Added new HID++ Force eect types; V1.5

2.2 Scope

There are two protocols described in this document.

The rst protocol (Classic) described in this document has been used in almost all force feedback-enabled devices that
Logitech has produced. It is used for joysticks and wheels. Each device may slightly deviate from the protocol by not
implementing certain commands or using slight variations of a command.

The second protocol (HID++) is only used for the G920 Driving Force Racing Wheel for Xbox One at the time of this
writing.

2.3 Capabilities

2.3.1 Classic Force Feedback


ˆ The protocol provides feedback for a device with one or two force-enabled axes.

ˆ Internally, each force-axis position is encoded in 8 bits, even if that axis is reported in a dierent size to the host.

ˆ Each axis can be driven with two eects and a default spring for joysticks. For wheels, four eects and two default
springs can be combined.

ˆ For joysticks, the two axes are completely independent. In order to play a force at a 45 degree angle, it is up to the
host to separate it into an X and Y component.

2.3.2 HID++ Force Feedback


ˆ The protocol allows for multiple force-enabled axes. The axis type is identied with each eect.

ˆ There are many force eect slots, each of which can be assigned to any axis.

ˆ All parameters are given as 16-bit numbers (signed and unsigned, varying on the parameter). Internally, most forces
are calculated with float precision.
Logitech Force Feedback Protocol V1.5 Page 5 of 35

3 Classic Format
Commands are sent to the device via HID Output Reports. These are sent from the host through either an Interrupt Out
endpoint (usually EP1) or the default pipe (EP0). HID Output Reports sent over EP0 always use the rst byte for the
Report ID. This means the available space for the command and its parameters is seven bytes. The seven bytes are dened
as vendor-specic data in the HID descriptor. The command payload has the following format:

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 FORCE_TYPE CMD_PARAM
or
2 Force/Command parameter 1 (or 0x00 if not used)
3 Force/Command parameter 2 (or 0x00 if not used)
4 Force/Command parameter 3 (or 0x00 if not used)
5 Force/Command parameter 4 (or 0x00 if not used)
6 Force/Command parameter 5 (or 0x00 if not used)
Table 1: Output Report

Parameter Value Denition

F0...F3 0/1 Each bit indicates to which force slot the command applies to
CMD see Table 3 One of the commands listed in section 3.1
FORCE_TYPE see Table 23 One of the force types listed in section 3.2
CMD_PARAM see Table 52 One of the command parameters listed in section 3.3

Table 2: Output Report Parameters

3.1 Commands

CMD Command

0x00 Download Force


0x01 Download and Play Force
0x02 Play Force
0x03 Stop Force
0x04 Default Spring On
0x05 Default Spring O
0x06 [reserved, do not use]
0x07 [reserved, do not use]
0x08 Turn on Normal Mode (see CMD 0x0b)
0x09 Set LED
0x0a Set Watchdog
0x0b Turn on Raw Mode (see CMD 0x08)
0x0c Refresh Force
0x0d Fixed Time Loop
0x0e Set Default Spring
0x0f Set Dead Band
0xf8 Extended Command

Table 3: Commands
Logitech Force Feedback Protocol V1.5 Page 6 of 35

3.1.1 CMD 0x00  Download Force


A force is downloaded from the host into the force slot(s), to be played at a later time. Selecting multiple forces (F0...F3)
is allowed.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x00
1 FORCE_TYPE
2...6 Force parameters (or 0x00 if not used)
Table 4: Download Force Report

3.1.2 CMD 0x01  Download and Play Force


A force is downloaded from the host into the force slot(s), and starts playing immediately. Selecting multiple forces
(F0...F3) is allowed.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x01
1 FORCE_TYPE
2...6 Force parameters (or 0x00 if not used)
Table 5: Download Force and Play Report

3.1.3 CMD 0x02  Play Force


Starts playing the selected force(s). Selecting multiple forces (F0...F3) is allowed. Assumes that the selected forces have
been previously downloaded.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x02
1...6 0x00
Table 6: Play Force Report

3.1.4 CMD 0x03  Stop Force


Stops playing the selected force(s). Selecting multiple forces (F0...F3) is allowed.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x03
1...6 0x00
Table 7: Stop Force Report

3.1.5 CMD 0x04  Default Spring On


Turns on the default spring(s). Setting F0 and/or F1 selects spring X. Setting F2 and/or F3 selects spring Y. Selecting
both springs is allowed.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x04
1...6 0x00
Table 8: Default Spring On Report
Logitech Force Feedback Protocol V1.5 Page 7 of 35

3.1.6 CMD 0x05  Default Spring O


Turns o the default spring(s). Setting F0 and/or F1 selects spring X. Setting F2 and/or F3 selects spring Y. Selecting
both springs is allowed.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x05
1...6 0x00
Table 9: Default Spring O Report

3.1.7 CMD 0x08  Normal Mode / Extended Command


The F0...F3 bits have a special meaning for CMD 0x08. If all the F0...F3 bits are zero, this command will restore the normal
content of the device input report after operating in Raw Mode (see chapter 3.1.10).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x08
1...6 0x00
Table 10: Restore Normal Mode Report

If all the F0...F3 bits are one, this command is an extended command (see chapter 3.3).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 1 1 1 1 0x08
1 EXT_CMD
2...6 Extended Command Parameters (or 0x00 if not used)
Table 11: Extended Command Report

3.1.8 CMD 0x09  Set LED


Turns the device LEDs on (1) or o (0). The LEDs are allocated on a per-device basis.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x09
1 LED7 LED6 LED5 LED4 LED3 LED2 LED1 LED0
2...6 0x00
Table 12: Set LED Report

3.1.9 CMD 0x0a  Set Watchdog


Turns on the watchdog and sets the watchdog duration (in number of main loop executions).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x0a
1 WATCHDOG
2...6 0x00
Table 13: Set Watchdog Report
Logitech Force Feedback Protocol V1.5 Page 8 of 35

Parameter Value Description

WATCHDOG 0x00 Watch dog is turned o.


0x01...0xff Device will go through a reset, if no Output Report is received during
the specied period (number of main loop executions).

Table 14: Set Watchdog Report Parameters

3.1.10 CMD 0x0b  Raw Mode


Turns on Raw Mode for the device. Each device has its own report format denition in Raw Mode. The device will
continue to send raw report data until it receives a CMD 0x08, or it gets power-cycled.

Raw Mode is required to get the actual, uncalibrated axis values for exact position tracking for springs and to improve the
calibration algorithms implemented in rmware. However, each device denes a unique form of raw data report. These
reports will very likely not t into the elds described by the HID descriptor of the device. Therefore, the data sent from
the device needs to be intercepted before it reaches HID and appropriately modied.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x0b
1...6 0x00
Table 15: Raw Mode Report

3.1.11 CMD 0x0c  Refresh Force


Changes the parameters of a force that is already playing. Multiple forces (F0...F3) may be selected.

After receiving this command, the force continues on from its most recent level. If this command is executed with a
dierent force type than the one that is already playing, the result is undened (and may cause undesired side-eects).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x0c
1 FORCE_TYPE
2...6 Force parameters (or 0x00 if not used)
Table 16: Refresh Force Report

3.1.12 CMD 0x0d  Fixed Time Loop


Makes the main rmware loop run at a constant speed or as fast as possible.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x0d
1 FIXED_LOOP
2..6 0x00
Table 17: Fixed Time Loop Report
Logitech Force Feedback Protocol V1.5 Page 9 of 35

Parameter Value Description

FIXED_LOOP 0x00 Fixed loop mode o (main loop runs as fast as possible).
0x01 Fixed loop mode on (main loop updates forces every 2ms).

Table 18: Fixed Loop Report Parameters

3.1.13 CMD 0x0e  Set Default Spring


Sets the parameters of the default spring. Setting F0 and/or F1 selects spring X. Setting F2 and/or F3 selects spring Y.
Selecting both springs is allowed. The parameters are the same as for the auto-centering force type (see chapter 3.2.4).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 0x0e
1 0x00
2 0 0 0 0 0 K1
3 0 0 0 0 0 K2
4 CLIP
5..6 0x00
Table 19: Set Default Spring Report

3.1.14 CMD 0x0f  Set Dead Band


Controls the exterior dead band. The power-up default is on. If dead band is on, the axis values are clipped at the extremes
of their travel and reported as min/max respectively.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 0 0 0 0x0f
1 DEAD_BAND
2..6 0x00
Table 20: Set Dead Band Report

Parameter Value Description

DEAD_BAND 0x00 Dead band is o.


0x01 Dead band is on.

Table 21: Set Dead Band Report Parameters

3.2 Force Types and Parameters

Wheels report the wheel position with 0 on the left side and 255 on the right side:
Logitech Force Feedback Protocol V1.5 Page 10 of 35

Force levels are generally indicated with a single byte according to the encoding below:

Level Denition

0 Maximum force 'located' towards the '0' end of the axis.


The wheel will spin clock-wise under the inuence of such a force:

127 or 128 No force


255 Maximum force 'located' towards the '255' end of the axis.
The wheel will spin counter-clock-wise under the inuence of such a force:

Table 22: Force Levels

Classic Force Feedback implements the following force types:

FORCE_TYPE Force

0x00 Constant
0x01 Spring
0x02 Damper
0x03 Auto-Centering Spring
0x04 Sawtooth Up
Logitech Force Feedback Protocol V1.5 Page 11 of 35

FORCE_TYPE Force

0x05 Sawtooth Down


0x06 Trapezoid
0x07 Rectangle
0x08 Variable
0x09 Ramp
0x0a Square Wave (not implemented on all devices)
0x0b High-Resolution Spring
0x0c High-Resolution Damper
0x0d High-Resolution Auto-Centering Spring
0x0e Friction (not implemented on all devices)

Table 23: Force Types

3.2.1 FORCE_TYPE 0x00  Constant


A constant force keeps pushing or pulling with the indicated level. It is independent of position or velocity of the axis.
The direction is encoded as the sign of the force level (see tabel 22).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x00
2 Force F0 level
3 Force F1 level
4 Force F2 level
5 Force F3 level
6 0x00
Table 24: Constant Force Type Report

3.2.2 FORCE_TYPE 0x01  Spring


A spring force creates an asymmetric force around a central dead-band area. The force is zero within the dead band. It
rises linearly just outside the dead band with a slope given by the slope coecient and saturates at the clip value. Each
side of the axis can be inverted individually.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x01
2 D1
3 D2
4 0 K2 0 K1
5 0 0 0 S2 0 0 0 S1
6 CLIP
Table 25: Spring Force Type Report

Parameter Value Denition

D1 0...255 Lower limit of central dead band


D2 0...255 Upper limit of central dead band
K1 see Table 27/28 Low (left or push) side spring constant selector
K2 see Table 27/28 High (right or pull) side spring constant selector
Logitech Force Feedback Protocol V1.5 Page 12 of 35

Parameter Value Denition

S1 0/1 Low side slope inversion (1 = inverted)


S2 0/1 High side slope inversion (1 = inverted)
CLIP 0...255 Clip level (maximum force), on either side

Table 26: Spring Force Parameters

The spring constants K1 and K2 dene the spring coecient (slope) according to Table 27. The oset is dened as the
dierence of the current position and the nearest dead band limit.

K Value Spring Coecient

0x00 1/4 of oset


0x01 1/2 of oset
0x02 3/4 of oset
0x03 Force = oset
0x04 3/2 of oset
0x05 2 times oset
0x06 3 times oset
0x07 4 times oset

Table 27: Spring Coecients

Note that for the following devices, the coecient table entries 5 and 6 are swapped and follow Table 28 instead:

ˆ Logitech Driving Force (PID_C294)

ˆ Logitech Driving Force EX (PID_C294)

ˆ Logitech Racing Force EX (PID_C294)

ˆ Logitech Driving Force RX (PID_C294)

ˆ Logitech Formula Force GP (PID_C293)

ˆ Logitech Force 3D (PID_C283)

K Value Spring Coecient

0x00 1/4 of oset


0x01 1/2 of oset
0x02 3/4 of oset
0x03 Force = oset
0x04 3/2 of oset
0x05 3 times oset
0x06 2 times oset
0x07 4 times oset

Table 28: Spring Coecients

3.2.3 FORCE_TYPE 0x02  Damper


Direction and speed are provided by an external dierentiator circuit, or by subtracting the current position from the
position recorded the last time the function ran. The speed is then multiplied by the K1/K2 parameters. The K1 and
Logitech Force Feedback Protocol V1.5 Page 13 of 35

Figure 1: Spring Parameters

K2 force multipliers use the same scale encoding as a spring force (see previous section). K1 is applied when moving to
the left/pushing, while K2 is applied when moving right/pulling. If the S1 or S2 parameter is 0, then the force generated
opposes the movement (standard damper action). If it is 1, the force generated accentuates the movement (i.e., a negative
damper or ice eect).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x02
2 0 0 0 0 0 K1
3 0 0 0 0 0 0 0 S1
4 0 0 0 0 0 K2
5 0 0 0 0 0 0 0 S2
6 0x00
Table 29: Damper Force Type Report

Parameter Value Denition

K1 0...7 Low (left or push) side damper coecient


K2 0...7 High (right or pull) side damper coecient
S1 0/1 Low side inversion (1 = inverted)
S2 0/1 High side inversion (1 = inverted)

Table 30: Damper Force Parameters

3.2.4 FORCE_TYPE 0x03  Auto-Centering Spring


The center of the Auto-Centering Spring eect is dynamically set as the center of the axis. The dead band area is 2 counts
wide from (axis_center-1) to (axis_center+1) This force computes the center of the axis travel using the following
formula: axis_center = (Max/2) + (Min/2). When the force is rst downloaded, Min is set to 255 and Max to 0. K1,
K2 and CLIP are coded the same way as a regular spring (see chapter 3.2.2).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x03
2 0 0 0 0 0 K1
3 0 0 0 0 0 K2
4 CLIP
5...6 0x00
Table 31: Auto-Centering Spring Force Type Report
Logitech Force Feedback Protocol V1.5 Page 14 of 35

3.2.5 FORCE_TYPE 0x04  Sawtooth Up


Sawtooth Up is the rst of a series of periodic eects.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x04
2 L1
3 L2
4 L0
5 0x00
6 T3 INC
Table 32: Sawtooth Up Force Type Report

Figure 2: Sawtooth Up Parameters

Parameter Value Denition

L1 0...255 Maximum Force Level


L2 0...255 Minimum Force Level
L0 0...255 Initial Force Level (L1 >= L0 >= L2)
T3 0...15 Time (in main loop execution count) per increment
INC 0...15 Increment value

Table 33: Sawtooth Up Force Parameters

3.2.6 FORCE_TYPE 0x05  Sawtooth Down

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x05
2 L1
3 L2
Logitech Force Feedback Protocol V1.5 Page 15 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


4 L0
5 0x00
6 T3 INC
Table 34: Sawtooth Down Force Type Report

Figure 3: Sawtooth Down Parameters

Parameter Value Denition

L1 0...255 Maximum Force Level


L2 0...255 Minimum Force Level
L0 0...255 Initial Force Level (L1 >= L0 >= L2)
T3 0...15 Time (in main loop execution count) per increment
INC 0...15 Increment value

Table 35: Sawtooth Down Force Parameters

3.2.7 FORCE_TYPE 0x06  Trapezoid


The frequency range of this periodic force depends somewhat on the amplitude because each step cannot be greater than
15 counts. If the amplitude is reduced in half, the maximum frequency is almost doubled. The initial force level is L1.
The rising and falling times are the same. If T1 = T2 = 0, then the wave is a triangle.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x06
2 L1
3 L2
4 T1
5 T2
6 T3 S
Table 36: Trapezoid Force Type Report
Logitech Force Feedback Protocol V1.5 Page 16 of 35

Figure 4: Trapezoid Parameters

Parameter Value Denition

L1 0...255 Maximum Force Level


L2 0...255 Minimum Force Level
T1 0...255 Duration (in main loops) of L1 Level
T2 0...255 Duration (in main loops) of L2 Level
T3 0...15 Number of main loops between adding/subtracting S
S 0...15 Amount to add/subtract after each T3 interval

Table 37: Trapezoid Force Parameters

3.2.8 FORCE_TYPE 0x07  Rectangle


This force can create signals within a frequency range of 61 Hz to 250 Hz (with xed loop time on).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x07
2 L1
3 L2
4 T1
5 T2
6 P
Table 38: Rectangle Force Type Report

Figure 5: Rectangle Parameters


Logitech Force Feedback Protocol V1.5 Page 17 of 35

Parameter Value Denition

L1 0...255 Maximum Force Level


L2 0...255 Minimum Force Level
T1 0...255 Duration (in main loops) of L1 level
T2 0...255 Duration (in main loops) of L2 level
P 0...255 Phase. If P*2 < T1, the force starts at L1, otherwise it
starts at L2. If P > (T1 + T2), then the phase is 0.
Table 39: Rectangle Force Parameters

3.2.9 FORCE_TYPE 0x08  Variable


This type denes two independent ramp-like forces for F0 and/or F2 (only). If the force level reaches either minimum or
maximum it will be clipped and remain at that level until the force is updated.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 F2 0 F0 CMD
1 0x08
2 L1
3 L2
4 T1 S1
5 T2 S2
6 0 0 0 D2 0 0 0 D1
Table 40: Variable Force Type Report

Figure 6: Variable Parameters

Parameter Value Denition

L1 0...255 Initial level for Force 0


L2 0...255 Initial level for Force 2
T1 0...15 Force 0 Step duration (in main loops)
S1 0...15 Force 0 Step size
T2 0...15 Force 2 Step duration (in main loops)
S2 0...15 Force 2 Step size
D1 0/1 Force 0 Direction (0 = increasing, 1 = decreasing)
D2 0/1 Force 2 Direction (0 = increasing, 1 = decreasing)

Table 41: Variable Force Parameters


Logitech Force Feedback Protocol V1.5 Page 18 of 35

3.2.10 FORCE_TYPE 0x09  Ramp


Once the target level (L2) is reached, the force stops playing.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0 F2 0 F0 CMD
1 0x09
2 L1
3 L2
4 0 0 0 0 0 0 0 D
5 T S
6 0x00
Table 42: Ramp Force Type Report

Figure 7: Ramp Parameters

Parameter Value Denition

L1 0...255 Maximum Force Level


L2 0...255 Minimum Force Level
D 0/1 Direction (0 = ramp up from L2 to L1; 1 = reverse)
T 0...15 Number of main loops between adding/subtracting S
S 0...15 Amount to add/subtract after each interval T

Table 43: Ramp Force Parameters


Logitech Force Feedback Protocol V1.5 Page 19 of 35

3.2.11 FORCE_TYPE 0x0a  Square Wave


This force is not implemented on most devices. It is intended to be used to control vibration feedback.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0a
2 A
3 TLOW
4 THIGH
5 N
6 0x00
Table 44: Square Force Type Report

Figure 8: Square Parameters

Parameter Value Denition

A 0...255 Amplitude (relative, depends on device)


T 0...65535 Number of mainloops per state (period / 2). 16 bits, low byte sent rst.
N 0...255 Number of periods (if N = 0, force plays for 256 periods)

Table 45: Square Force Parameters

3.2.12 FORCE_TYPE 0x0b  High-Resolution Spring


This force type allows more precise control of the spring constant than the FORCE_TYPE 0x01 Spring Eect.
Parameter denitions are identical to FORCE_TYPE 0x01 springs, but with an additional 8 selections for the spring constant
(which is represented in 4 bits instead of 3). These coecients have been tuned for each device to be fairly linear. Hence
a coecient should be scaled linearly from 0 to 15 for K1 and K2 according to the desired spring coecient.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0b
2 D1
3 D2
4 K2 K1
5 0 0 0 S2 0 0 0 S1
6 CLIP
Table 46: High-Resolution Spring Force Type Report
Logitech Force Feedback Protocol V1.5 Page 20 of 35

Parameter Value Denition

D1, D2 0...255 Deadband on the negative and positive side of the spring.
K1, K2 0...15 Linear slope with 0 being the weakest force and 15 being the strongest.
The actual coecient factor is device dependent.
S1, S2 0/1 Sign of the slope parameter.

Table 47: High-Resolution Spring Force Parameters

Logitech Driving Force Pro (PID_C298) introduced a variation of this force with an additional 3 bits of precision for the
deadbands for a total of 11 bit precision. It is backward compatible with older implementations of this force in that the
additional low order bits are located in otherwise-ignored bit elds.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0b
2 D110...3
3 D210...3
4 K2 K1
5 D22 D21 D20 S2 D12 D11 D10 S1
6 CLIP
Table 48: High-Resolution Spring Force Type Report Variation

3.2.13 FORCE_TYPE 0x0c  High-Resolution Damper


A more precise version of the FORCE_TYPE 0x02 Damper force. Parameter denitions are identical to FORCE_TYPE 0x02
dampers, but with product-specic 4-bit K factor selection as for the FORCE_TYPE 0x0b High-Resolution Spring. (see
table 47)

Logitech Driving Force Pro (PID_C298) introduced an additional CLIP parameter to this force. It is backward compatible
with older implementations of the force in that the additional parameter is encoded in an otherwise-unused byte eld.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0c
2 0 0 0 0 K1
3 0 0 0 0 0 0 0 S1
4 0 0 0 0 K2
5 0 0 0 0 0 0 0 S2
6 CLIP (only for PID_C298)
Table 49: High-Resolution Damper Force Type Report

3.2.14 FORCE_TYPE 0x0d  High-Resolution Auto-Centering Spring


A more precise version of the FORCE_TYPE 0x03 Auto-Centering Spring eect. Parameter denitions are identical to
FORCE_TYPE 0x03 Auto-Centering Spring, but with product-specic 4-bit K factor selection as for the FORCE_TYPE 0x0b
High-Resolution Spring force (see table 47).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0d
Logitech Force Feedback Protocol V1.5 Page 21 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


2 0 0 0 0 K1
3 0 0 0 0 K2
4 CLIP
5...6 0x00
Table 50: High-Resolution Auto-Centering Spring Force Type Report

3.2.15 FORCE_TYPE 0x0e  Friction (only select devices)


This force is used to generate a resistance in movement. It is similar to a damper eect in that it generates a force against
velocity. It is distinct from a damper in that it the force eect decreases as the velocity increases.

This force is only supported on the following devices:

ˆ Logitech Driving Force Pro (PID_C298)

ˆ Logitech G25 Racing Wheel (PID_C299)

ˆ Logitech Driving Force GT (PID_C29A)

ˆ Logitech G27 Racing Wheel (PID_C29B)

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 F3 F2 F1 F0 CMD
1 0x0e
2 K1
3 K2
4 CLIP
5 0 0 0 S2 0 0 0 S1
6 0x00
Table 51: Friction force type Report
Logitech Force Feedback Protocol V1.5 Page 22 of 35

3.3 Extended Commands

Extended Commands provide device-specic functionality. They are used to switch modes of newer devices, which start in
a compatibility mode. They are also used to change the amount of wheel rotation of some wheel devices.

EXT_CMD Command

0x01 Change Mode to Driving Force Pro


0x02 Change Wheel Range to 200 Degrees
0x03 Change Wheel Range to 900 Degrees
0x09 Change Device Mode
0x0a Revert Identity
0x10 Switch to G25 Identity with USB Detach
0x11 Switch to G25 Identity without USB Detach
0x12 Set RPM LEDs
0x81 Wheel Range Change

Table 52: Extended Commands

3.3.1 EXT_CMD 0x01  Change Mode to Driving Force Pro


This command will switch a device which starts up in a compatibility mode into Driving Force Pro mode.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x01
2...6 0x00
Table 53: Change Mode Report

3.3.2 EXT_CMD 0x02  Change Wheel Range to 200 Degrees

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x02
2...6 0x00
Table 54: Change Wheel Range to 200 Degrees Report

3.3.3 EXT_CMD 0x03  Change Wheel Range to 900 Degrees

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x03
2...6 0x00
Table 55: Change Wheel Range to 900 Degrees Report

3.3.4 EXT_CMD 0x09  Change Device Mode


Logitech Force Feedback Protocol V1.5 Page 23 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x09
2 DEVICE
3 DETACH
4...6 0x00
Table 56: Change Device Mode Report

Parameter Value Description

DEVICE 0...4 Species the device (emulation) mode to switch to:


0x00 = Logitech Driving Force EX
0x01 = Logitech Driving Force Pro
0x02 = Logitech G25 Racing Wheel
0x03 = Logitech Driving Force GT
0x04 = Logitech G27 Racing Wheel
DETACH 0/1 0x00 = Switch identity without USB detach
0x01 = Switch identity after detaching from USB

Table 57: Change Device Mode Parameters

3.3.5 EXT_CMD 0x0a  Revert Identity


This command sets a persistent ag in the device to automatically revert the identity of the device to the power-up default
upon a USB reset. This is the default behavior for most devices.

In order to instruct a device to NOT revert identity upon reset, the host needs to set the ag to 0.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x0a
2 REVERT_IDENTITY
3...6 0x00
Table 58: Revert Identity Report

Parameter Value Description

REVERT_IDENTITY 0/1 0x00 = Do not revert identity.


0x01 = Revert identity (default)

Table 59: Revert Identity Parameters

3.3.6 EXT_CMD 0x10  Switch to G25 with USB Detach


This command switches a G25 in compatibility mode over to G25 mode. The device will detach from USB and the host
will see a new device USB plug-in event.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x10
Logitech Force Feedback Protocol V1.5 Page 24 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


2...6 0x00
Table 60: Switch to G25 Mode with Detach Report

3.3.7 EXT_CMD 0x11  Switch to G25 without USB Detach


This command switches a G25 in compatibility mode over to G25 mode. The switch happens immediately, without the
device disconnecting from the host.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x11
2...6 0x00
Table 61: Switch to G25 Mode without Detach Report

3.3.8 EXT_CMD 0x12  Set RPM LEDs

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x12
2 0 0 0 LED_PATTERN
3...6 0x00
Table 62: Set RPM LEDs Report

Parameter Value Description

LED_PATTERN 0...31 Each bit of the value corresponds to one LED


from the right as well as from the left.

Table 63: Set RPM LEDs Parameters

Figure 9: RPM LED patterns

3.3.9 EXT_CMD 0x81  Wheel Range Change


This command allows setting the range of wheel travel. The range must be within the following limits: 40 <= RANGE <= 900.
If it is outside this range, it is clipped to 40 or 900 respectively.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 0xf8
1 0x81
Logitech Force Feedback Protocol V1.5 Page 25 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


2 RANGE7...0
3 RANGE15...8
4...6 0x00
Table 64: Wheel Range Change Report

Parameter Value Description

RANGE 40...900 The new range of wheel travel.

Table 65: Wheel Range Change Parameters


Logitech Force Feedback Protocol V1.5 Page 26 of 35

4 HID++ Force Feedback


The Logitech G920 wheel includes a native Xbox One Force Feedback mode and a PC mode. The PC mode is implemented
as a HID++ Feature. For further information on the HID++ framework, please see (TODO: Insert link to HID++
documentation)

A HID++ command has a 4-byte header, which includes the HID REPORT_ID, the device index (only used for HID++
hub devices; specify 0xff for the G920), the index of the feature, the index of the method, and a session identier. After
the header are the payload bytes of the specic method. The following description only lists the payload content for the
requests and the responses.

4.1 x8123 Force Feedback

The HID++ Feature x8123 implements multi-axis force feedback control. The feature has the following methods and
notications:

Index Name

0 getInfo
1 resetAll
2 downloadEect
3 setEectState
4 destroyEect
5 getAperture
6 setAperture
7 getGlobalGains
8 setGlobalGains

0 forceHasFinished

Table 66: x8123 Methods and Notications

4.1.1 x8123.0 getInfo


The getInfo method returns static data. Data that does not change for the duration of the device being plugged in. The
data should be retrieved once during driver load and cached for subsequent queries.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0...N 0x00
Table 67: getInfo Request Packet

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 SLOT_COUNT
1 ACTUATOR_MASK
2...N 0x00
Table 68: getInfo Response Packet
Logitech Force Feedback Protocol V1.5 Page 27 of 35

Parameter Value Denition

SLOT_COUNT 0...255 Indicates the number of available force eect slots on the device.
ACTUATOR_MASK 0...255 A bitmask that indicates which axes have force feedback control.

Table 69: getInfo Response Parameters

The axes of a device are assigned according to their prominence for the user and are generally device-specic. For the
Logitech G920 wheel in particular, there is just one axis (the main wheel axis), hence the ACTUATOR_MASK value being
0x01.

4.1.2 x8123.1 resetAll


The resetAll method stops and destroys all force eects on the device. This method also enables the default centering
spring. There are no parameters for either the request or the response.

4.1.3 x8123.2 downloadEffect


The downloadEffect method is used to create and update force eects on the device. The rst byte decides if the eect
is to be allocated fresh (EFFECT_ID == 0), or if an existing eect should be modied (0 < EFFECT_ID <= SLOT_COUNT).
The rst byte of the response contains either 0x00 if there was an error, or the EFFECT_ID.

Each slot controls an eect for a given axis. There are no restrictions on how many slots are assigned to any axis, as long
as the total number does not exceed SLOT_COUNT.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 START AXIS EFFECT_TYPE
2...N Parameters, depending on type of eect
Table 70: downloadEect Request Packet Header

Parameter Value Denition

EFFECT_ID 0...SLOT_COUNT 0x00: Create new eect and return allocated eect id.
0x01...SLOT_COUNT: indicates id of eect slot to update.
START 0/1 1: immediately start this eect, 0: only create/update the eect, do not start playing.
AXIS 0...7 The index of the axis, for which this force is applicable.
EFFECT_TYPE see table 72 One of the eect types listed below.

Table 71: downloadEect Parameters

Depending on the Eect Type, the header is followed by one of three dierent parameter formats.

Value Eect Type Parameter Format

0 CONSTANT Constant Parameters

1 SINE Periodic Parameters


2 SQUARE
3 TRIANGLE
4 SAWTOOTHUP
5 SAWTOOTHDOWN
6 SPRING Condition Parameters
Logitech Force Feedback Protocol V1.5 Page 28 of 35

Value Eect Type Parameter Format

7 DAMPER
8 FRICTION1
9 INERTIA1
10 RAMP1 Ramp Parameters

Table 72: Eect Type and Associated Parameter Format

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 START AXIS 0x00
2 DURATION15...8
3 DURATION7...0
4 START_DELAY15...8
5 START_DELAY7...0
6 LEVEL15...8
7 LEVEL7...0
8 ATTACK_LEVEL
9 ATTACK_DELAY15...8
10 ATTACK_DELAY7...0
11 FADE_LEVEL
12 FADE_DELAY15...8
13 FADE_DELAY7...0
14...N 0x00
Table 73: Constant Eect Force Parameters

Parameter Value Denition

DURATION 0...65535 Duration of the eect in milliseconds, does not include START_DELAY.
Specify 0x0000 for innite duration.
START_DELAY 0...65535 Initial delay before the eect starts, measured in milliseconds.
LEVEL -32767...32767 Signed magnitude of the constant force.
ATTACK_LEVEL 0...255 Initial start level, as a fraction of MAX_FORCE, LEVEL.
with the same sign as
ATTACK_DELAY 0...65535 Duration of the envelope attack phase, where the force changes from ATTACK_LEVEL to LEVEL.
FADE_LEVEL 0...255 Final end level, as a fraction of MAX_FORCE, with the same sign as LEVEL.
FADE_DELAY 0...65535 Duration of the envelope decay phase, where the force changes from LEVEL to FADE_LEVEL.

Table 74: Constant Force Parameters

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 START AXIS 0x01...0x05
2 DURATION15...8
3 DURATION7...0
4 START_DELAY15...8
5 START_DELAY7...0
6 LEVEL15...8

1 FRICTION, INERTIA and RAMP are only supported on Logitech G920 with rmware V96.2.48 or later.
Logitech Force Feedback Protocol V1.5 Page 29 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


7 LEVEL7...0
8 OFFSET15...8
9 OFFSET7...0
10 WAVELENGTH15...8
11 WAVELENGTH7...0
12 PHASE15...8
13 PHASE7...0
14 ATTACK_LEVEL
15 ATTACK_DELAY15...8
16 ATTACK_DELAY7...0
17 FADE_LEVEL
18 FADE_DELAY15...8
19 FADE_DELAY7...0
20...N 0x00
Table 75: Periodic Eect Force Parameters

Parameter Value Denition

DURATION 0...65535 Duration of the eect in milliseconds. Does not include START_DELAY.
Specify 0x0000 for innite duration.
START_DELAY 0...65535 Initial delay, before the eect starts. Unit is in milliseconds.
LEVEL -32767...32767 Signed magnitude of the periodic force.
OFFSET -32767...32767 Signed oset for the periodic force.
WAVELENGTH 1...65535 Duration in milliseconds of one full period.
PHASE -32767...32767 Signed phase of the periodic force.
ATTACK_LEVEL 0...255 Initial start level, as a fraction of MAX_FORCE, LEVEL.
with the same sign as
ATTACK_DELAY 0...65535 Duration of the envelope attack phase, where the force changes from ATTACK_LEVEL to LEVEL.
FADE_LEVEL 0...255 Final end level, as a fraction of MAX_FORCE, with the same sign as LEVEL.
FADE_DELAY 0...65535 Duration of the envelope decay phase, where the force changes from LEVEL to FADE_LEVEL.

Table 76: Periodic Force Parameters

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 START AXIS 0x06/0x07
2 DURATION15...8
3 DURATION7...0
4 START_DELAY15...8
5 START_DELAY7...0
6 NEG_SATURATION15...8
7 NEG_SATURATION7...0
8 NEG_SLOPE15...8
9 NEG_SLOPE7...0
10 DEADZONE15...8
11 DEADZONE7...0
12 OFFSET15...8
13 OFFSET7...0
14 POS_SLOPE15...8
15 POS_SLOPE7...0
16 POS_SATURATION15...8
Logitech Force Feedback Protocol V1.5 Page 30 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


17 POS_SATURATION7...0
18...N 0x00
Table 77: Condition Eect Force Parameters

Parameter Value Denition

DURATION 0...65535 Duration of the eect in milliseconds. Does not include START_DELAY.
Specify 0x0000 for innite duration.
START_DELAY 0...65535 Initial delay, before the eect starts. Unit is in milliseconds.
NEG_SATURATION 0...65535 Magnitude of the maximum saturation on the negative side of the condition.
This is an unsigned value. To achieve negative saturations change the sign of NEG_SLOPE.
NEG_SLOPE -32767...32767 Signed slope for the negative side of the condition.
DEADZONE -32767...32767 Signed deadzone for the center area of the condition.
A negative value will make the slopes intersect.
OFFSET -32767...32767 Signed oset of the condition.
POS_SLOPE 0...65535 Signed slope for the positive side of the condition.
POS_SATURATION 0...65535 Magnitude of the maximum saturation on the positive side of the condition.
This is an unsigned value. To achieve negative saturations change the sign of POS_SLOPE.
Table 78: Condition Force Parameters

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 START AXIS 0x00
2 DURATION15...8
3 DURATION7...0
4 START_DELAY15...8
5 START_DELAY7...0
6 START_LEVEL15...8
7 START_LEVEL7...0
8 END_LEVEL15...8
9 END_LEVEL7...0
10 ATTACK_LEVEL
11 ATTACK_DELAY15...8
12 ATTACK_DELAY7...0
13 FADE_LEVEL
14 FADE_DELAY15...8
15 FADE_DELAY7...0
16...N 0x00
Table 79: Ramp Eect Force Parameters

Parameter Value Denition

DURATION 0...65535 Duration of the eect in milliseconds, does not include START_DELAY.
Specify 0x0000 for innite duration.
START_DELAY 0...65535 Initial delay before the eect starts, measured in milliseconds.
START_LEVEL -32767...32767 Signed magnitude of the start level of the ramp force.
END_LEVEL -32767...32767 Signed magnitude of the end level of the ramp force.
ATTACK_LEVEL 0...255 Initial start level, as a fraction of MAX_FORCE, with the same sign as LEVEL.
Logitech Force Feedback Protocol V1.5 Page 31 of 35

Parameter Value Denition

ATTACK_DELAY 0...65535 Duration of the envelope attack phase, where the force changes from ATTACK_LEVEL to LEVEL.
FADE_LEVEL 0...255 Final end level, as a fraction of MAX_FORCE, with the same sign as LEVEL.
FADE_DELAY 0...65535 Duration of the envelope decay phase, where the force changes from LEVEL to FADE_LEVEL.

Table 80: Ramp Force Parameters

4.1.4 x8123.3 setEffectState


The setEffectState is used to start, stop, pause, and resume force eects. The request species an EFFECT_ID. If
the slot does not contain a force, the response returns 0x00 as EFFECT_ID. Otherwise, the current state is returned in
EFFECT_STATE.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 STATE_CMD
2...N 0x00
Table 81: setEectState Request Packet

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1 EFFECT_STATE
2...N 0x00
Table 82: setEectState Response Packet

Parameter Value Denition

EFFECT_ID 1...SLOT_COUNT Indicates the force eect slot id


STATE_CMD 0...3 The requested new state of this eect:
0x00 Do not change state, just return current state
0x01 Stop the eect
0x02 Resume (if paused) or Start (if stopped) the eect
0x03 Pause the eect
EFFECT_STATE 0...3 Returns the current state of the eect:
0x01 Eect is stopped
0x02 Eect is playing
0x03 Eect is paused

Table 83: setEectState Request/Response Parameters

4.1.5 x8123.4 destroyEffect


The destroyEffect frees up the give eect. Once all allocated slots have been freed, the default centering spring will
kick back in. To free all eects at once, use the resetAll instead.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 EFFECT_ID
1...N 0x00
Table 84: destroyEect Request Packet
Logitech Force Feedback Protocol V1.5 Page 32 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0...N 0x00
Table 85: destroyEect Response Packet

Parameter Value Denition

EFFECT_ID 1...SLOT_COUNT Indicates the slot id of the eect.

Table 86: destroyEect Request Parameters

4.1.6 x8123.5 getAperture and x8123.6 setAperture


The getAperture and setAperture methods are used to change the operating range of the wheel. Their parameter is a
16-bit value measuring the operating range in degrees. For the Logitech G920, the valid range is 180...900. Any values
outside this range will be clipped.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0...N 0x00
Table 87: getAperture Request Packet

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 APERTURE15...8
1 APERTURE7...0
2...N 0x00
Table 88: getAperture Response and setAperture Request/Response
Packet

Parameter Value Denition

APERTURE 180...900 The extent of the wheel reporting range, in degrees.

Table 89: getAperture/setAperture Parameters

4.1.7 x8123.7 getGlobalGains and x8123.8 setGlobalGains


The getGlobalGains and setGlobalGains methods take two 16-bit values. Both values are coecients that are applied
to any force output; however, they vary slightly. The rst value (GAIN) is a linear factor. The second value (BOOST) is
oset by a factor of 1.0:
force = evaluateAllSlots ();
force = force * ( gain / 65535);
force = force * (1.0 + boost / 65535);
outputForce ( force ) ;

Typically, the GAIN value is from the application/game. The BOOST value is controlled by the user via some value-add
software (for example, on Windows, this is controlled by Logitech Gaming Software).

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0...N 0x00
Table 90: getGlobalGains Request Packet
Logitech Force Feedback Protocol V1.5 Page 33 of 35

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 GAIN15...8
1 GAIN7...0
2 BOOST15...8
3 BOOST7...0
4...N 0x00
Table 91: getGlobalGains Response and setGlobalGains Request/Re-
sponse Packet

Parameter Value Denition

GAIN 0...65535 The force gain.


BOOST 0...65535 The force boost.

Table 92: getGlobalGains/setGlobalGains Parameters

4.1.8 x8123.0 forceHasFinished Notication


The forceHasFinished notication is sent to the host, whenever a force in an slot has nished playing. This notication
can be used to destroy these eects in order to recover slots.

Byte Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


0 COUNT
1...COUNT EFFECT_ID
COUNT...N 0x00
Table 93: forceHasFinished Notication Packet
Logitech Force Feedback Protocol V1.5 Page 34 of 35

A Appendix
A.1 Classic Compatibility Mode

In order to support older console games, most Logitech Force Feedback steering wheels connect initially in a compatibility
mode. Typically, this mode equals a Logitech Driving Force, but in some circumstances it may also look like a G25 or
Driving Force Pro.

The table below lists the checks required to identify a particular wheel, when it is in compatibility mode. The checks
should be done in the order listed, as they become progressively less specic.

Wheel Native PID Identication Criteria when in compatibility mode

((0xC294 == PID) || (0xC298 == PID))


Logitech Driving Force GT 0xC29A &&
(0x1300 == (bcdDevice & 0xff00))
((0xC294 == PID) || (0xC298 == PID) || (0xC299 == PID))
Logitech G27 Racing Wheel 0xC29B &&
(0x1230 == (bcdDevice & 0xfff0))
((0xC294 == PID) || (0xC298 == PID))
Logitech G25 Racing Wheel 0xC299 &&
(0x1200 == (bcdDevice & 0xff00))
(0xC294 == PID)
Logitech Driving Force Pro 0xC298 &&
(0x1000 == (bcdDevice & 0xf000))
Table 94: Device Identication Criteria

Once a wheel has been identied, it can be switched to its native mode using the appropriate switch command. The
following table lists the supported commands for each wheel. The Logitech Driving Force GT (PID_C29A) and Log-
itech G27 Racing Wheel (PID_C29B) also support the RevertIdentity command, so that subsequent USB resets will not
have to change mode again  the wheel will come up in native mode right-away.

Wheel Switch command(s) Byte Sequence

Logitech Driving Force GT EXT_CMD 0x0a 0xf8 0x0a 0x00 - optional


EXT_CMD 0x09 0xf8 0x09 0x03 0x01
Logitech G27 Racing Wheel EXT_CMD 0x0a 0xf8 0x0a 0x00 - optional
EXT_CMD 0x09 0xf8 0x09 0x04 0x01
Logitech G25 Racing Wheel EXT_CMD 0x10 0xf8 0x10
Logitech Driving Force Pro EXT_CMD 0x01 0xf8 0x01
Table 95: Mode Switch Command
Logitech Force Feedback Protocol V1.5 Page 35 of 35

A.2 Xbox Mode

The Logitech G920 wheel starts out by default in Xbox Force Feedback Mode. To switch to HID++ Mode, issue the
following byte sequence as an output report:

Wheel Byte Sequence

Logitech G920 0f 00 01 01 42
Table 96: G920 Mode Switch Command

You might also like