** Introduction
This document describes what I managed to discover about the protocol used to
specify force effects to I-Force 2.0 devices.  None of this information comes
from Immerse. That's why you should not trust what is written in this
document. This document is intended to help understanding the protocol.
This is not a reference. Comments and corrections are welcome.  To contact me,
send an email to: johann.deneux@gmail.com

** WARNING **
I shall not be held responsible for any damage or harm caused if you try to
send data to your I-Force device based on what you read in this document.

** Preliminary Notes:
All values are hexadecimal with big-endian encoding (msb on the left). Beware,
values inside packets are encoded using little-endian.  Bytes whose roles are
unknown are marked ???  Information that needs deeper inspection is marked (?)

** General form of a packet **
This is how packets look when the device uses the rs232 to communicate.
2B OP LEN DATA CS
CS is the checksum. It is equal to the exclusive or of all bytes.

When using USB:
OP DATA
The 2B, LEN and CS fields have disappeared, probably because USB handles frames and
data corruption is handled or unsignificant.

First, I describe effects that are sent by the device to the computer

** Device input state
This packet is used to indicate the state of each button and the value of each
axis
OP= 01 for a joystick, 03 for a wheel
LEN= Varies from device to device
00 X-Axis lsb
01 X-Axis msb
02 Y-Axis lsb, or gas pedal for a wheel
03 Y-Axis msb, or brake pedal for a wheel
04 Throttle
05 Buttons
06 Lower 4 bits: Buttons
   Upper 4 bits: Hat
07 Rudder

** Device effects states
OP= 02
LEN= Varies
00 ? Bit 1 (Value 2) is the value of the deadman switch
01 Bit 8 is set if the effect is playing. Bits 0 to 7 are the effect id.
02 ??
03 Address of parameter block changed (lsb)
04 Address of parameter block changed (msb)
05 Address of second parameter block changed (lsb)
... depending on the number of parameter blocks updated

** Force effect **
OP=  01
LEN= 0e
00 Channel (when playing several effects at the same time, each must be assigned a channel)
01 Wave form
	Val 00 Constant
	Val 20 Square
	Val 21 Triangle
	Val 22 Sine
	Val 23 Sawtooth up
	Val 24 Sawtooth down
	Val 40 Spring (Force = f(pos))
	Val 41 Friction (Force = f(velocity)) and Inertia (Force = f(acceleration))


02 Axes affected and trigger
	Bits 4-7: Val 2 = effect along one axis. Byte 05 indicates direction
	          Val 4 = X axis only. Byte 05 must contain 5a
	          Val 8 = Y axis only. Byte 05 must contain b4
	          Val c = X and Y axes. Bytes 05 must contain 60
	Bits 0-3: Val 0 = No trigger
	          Val x+1 = Button x triggers the effect
	When the whole byte is 0, cancel the previously set trigger

03-04 Duration of effect (little endian encoding, in ms)

05 Direction of effect, if applicable. Else, see 02 for value to assign.

06-07 Minimum time between triggering.

08-09 Address of periodicity or magnitude parameters
0a-0b Address of attack and fade parameters, or ffff if none.
*or*
08-09 Address of interactive parameters for X-axis, or ffff if not applicable
0a-0b Address of interactive parameters for Y-axis, or ffff if not applicable

0c-0d Delay before execution of effect (little endian encoding, in ms)


** Time based parameters **

*** Attack and fade ***
OP=  02
LEN= 08
00-01 Address where to store the parameters
02-03 Duration of attack (little endian encoding, in ms)
04 Level at end of attack. Signed byte.
05-06 Duration of fade.
07 Level at end of fade.

*** Magnitude ***
OP=  03
LEN= 03
00-01 Address
02 Level. Signed byte.

*** Periodicity ***
OP=  04
LEN= 07
00-01 Address
02 Magnitude. Signed byte.
03 Offset. Signed byte.
04 Phase. Val 00 = 0 deg, Val 40 = 90 degs.
05-06 Period (little endian encoding, in ms)

** Interactive parameters **
OP=  05
LEN= 0a
00-01 Address
02 Positive Coeff
03 Negative Coeff
04+05 Offset (center)
06+07 Dead band (Val 01F4 = 5000 (decimal))
08 Positive saturation (Val 0a = 1000 (decimal) Val 64 = 10000 (decimal))
09 Negative saturation

The encoding is a bit funny here: For coeffs, these are signed values. The
maximum value is 64 (100 decimal), the min is 9c.
For the offset, the minimum value is FE0C, the maximum value is 01F4.
For the deadband, the minimum value is 0, the max is 03E8.

** Controls **
OP=  41
LEN= 03
00 Channel
01 Start/Stop
	Val 00: Stop
	Val 01: Start and play once.
	Val 41: Start and play n times (See byte 02 below)
02 Number of iterations n.

** Init **

*** Querying features ***
OP=  ff
Query command. Length varies according to the query type.
The general format of this packet is:
ff 01 QUERY [INDEX] CHECKSUM
responses are of the same form:
FF LEN QUERY VALUE_QUERIED CHECKSUM2
where LEN = 1 + length(VALUE_QUERIED)

**** Query ram size ****
QUERY = 42 ('B'uffer size)
The device should reply with the same packet plus two additional bytes
containing the size of the memory:
ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available.

**** Query number of effects ****
QUERY = 4e ('N'umber of effects)
The device should respond by sending the number of effects that can be played
at the same time (one byte)
ff 02 4e 14 CS would stand for 20 effects.

**** Vendor's id ****
QUERY = 4d ('M'anufacturer)
Query the vendors'id (2 bytes)

**** Product id *****
QUERY = 50 ('P'roduct)
Query the product id (2 bytes)

**** Open device ****
QUERY = 4f ('O'pen)
No data returned.

**** Close device *****
QUERY = 43 ('C')lose
No data returned.

**** Query effect ****
QUERY = 45 ('E')
Send effect type.
Returns nonzero if supported (2 bytes)

**** Firmware Version ****
QUERY = 56 ('V'ersion)
Sends back 3 bytes - major, minor, subminor

*** Initialisation of the device ***

**** Set Control ****
!!! Device dependent, can be different on different models !!!
OP=  40 <idx> <val> [<val>]
LEN= 2 or 3
00 Idx
   Idx 00 Set dead zone (0..2048)
   Idx 01 Ignore Deadman sensor (0..1)
   Idx 02 Enable comm watchdog (0..1)
   Idx 03 Set the strength of the spring (0..100)
   Idx 04 Enable or disable the spring (0/1)
   Idx 05 Set axis saturation threshold (0..2048)

**** Set Effect State ****
OP=  42 <val>
LEN= 1
00 State
   Bit 3 Pause force feedback
   Bit 2 Enable force feedback
   Bit 0 Stop all effects

**** Set overall gain ****
OP=  43 <val>
LEN= 1
00 Gain
   Val 00 = 0%
   Val 40 = 50%
   Val 80 = 100%

** Parameter memory **

Each device has a certain amount of memory to store parameters of effects.
The amount of RAM may vary, I encountered values from 200 to 1000 bytes. Below
is the amount of memory apparently needed for every set of parameters:
 - period : 0c
 - magnitude : 02
 - attack and fade : 0e
 - interactive : 08

** Appendix: How to study the protocol ? **

1. Generate effects using the force editor provided with the DirectX SDK, or 
use Immersion Studio (freely available at their web site in the developer section: 
www.immersion.com)
2. Start a soft spying RS232 or USB (depending on where you connected your 
joystick/wheel). I used ComPortSpy from fCoder (alpha version!)
3. Play the effect, and watch what happens on the spy screen.

A few words about ComPortSpy:
At first glance, this software seems, hum, well... buggy. In fact, data appear with a
few seconds latency. Personally, I restart it every time I play an effect.
Remember it's free (as in free beer) and alpha!

** URLS **
Check www.immerse.com for Immersion Studio, and www.fcoder.com for ComPortSpy.

** Author of this document **
Johann Deneux <johann.deneux@gmail.com>
Home page at http://web.archive.org/web/*/http://www.esil.univ-mrs.fr

Additions by Vojtech Pavlik.

I-Force is trademark of Immersion Corp.
