~ubuntu-branches/ubuntu/edgy/joystick/edgy

« back to all changes in this revision

Viewing changes to linux/Documentation/input/iforce-protocol.txt

  • Committer: Bazaar Package Importer
  • Author(s): Edward Betts
  • Date: 2005-10-19 06:22:03 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20051019062203-bc382mxpjne3477m
Tags: 20051019-1
* New upstream release. Closes: #245108
* drop joystick-device-check - leave device file handling to MAKEDEV
  or udev this makes everything lots more simple, means debconf is
  no longer a dependancy, and no need for an initscript.
  Closes: #164592, #235168, #303682, #331872
* debian/rules: move to CDBS
* debian/control: added 'Requires at Linux 2.4 or newer.' Closes: #111117
* debian/control: Standards-Version: 3.6.2
* debian/copyright: updated FSF address
* debian/README.Debian: removed
* fix spelling mistakes in manpages Closes: #311445, #311446

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
** Introduction
2
 
This document describes what I managed to discover about the protocole used to specify force effects to I-Force 2.0 devices.
3
 
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 undertstanding the protocole.
4
 
This is not a reference. Comments and corrections are welcome. I made all these tests on my Boeder I-Force ForceFeedback Wheel. Please note I haven't made any test on joysticks.
5
 
To contact me, send email to: deneux@ifrance.com
6
 
 
7
 
** WARNING **
8
 
I may not be held responsible for any dammage or harm caused if you try to send data to your I-Force device based on what you read in this document.
9
 
 
10
 
** Preliminary Notes:
11
 
All values are hexadecimal with big-endian encoding (msb on the left). Beware, values inside packets are encoded using little-endian.
12
 
Bytes whose roles are unknown are marked ???
13
 
Information that needs deeper inspection is marked (?)
14
 
 
15
 
** General form of a packet **
16
 
2B OP LEN DATA CS
17
 
CS is the checksum. It is equal to the exclusive or of all bytes.
18
 
 
19
 
** Force effect **
20
 
OP=  01
21
 
LEN= 0e
22
 
00 Channel (when playing several effects at the same time, each must be assigned a channel)
23
 
01 Wave form
24
 
        Val 00 Constant
25
 
        Val 20 Square
26
 
        Val 21 Triangle
27
 
        Val 22 Sine
28
 
        Val 23 Sawtooth up
29
 
        Val 24 Sawtooth down
30
 
        Val 40 Spring (Force = f(pos))
31
 
        Val 41 Friction (Force = f(velocity)) and Inertia (Force = f(acceleration))
32
 
 
33
 
        
34
 
02 Axes affected and trigger
35
 
        Bits 4-7: Val 2 = effect along one axis. Byte 05 indicates direction
36
 
                  Val 4 = X axis only. Byte 05 must contain 5a
37
 
                  Val 8 = Y axis only. Byte 05 must contain b4
38
 
                  Val c = X and Y axes. Bytes 05 must contain 60
39
 
        Bits 0-3: Val 0 = No trigger
40
 
                  Val x+1 = Button x triggers the effect
41
 
        When the whole byte is 0, cancel the previously set trigger
42
 
 
43
 
03-04 Duration of effect (little endian encoding, in ms)
44
 
 
45
 
05 Direction of effect, if applicable. Else, see 02 for value to assign.
46
 
 
47
 
06-07 Minimum time between triggering.
48
 
 
49
 
08-09 Address of periodicity or magnitude parameters
50
 
0a-0b Address of attack and fade parameters, or ffff if none.
51
 
*or*
52
 
08-09 Address of interactive parameters for X-axis, or ffff if not applicable
53
 
0a-0b Address of interactive parameters for Y-axis, or ffff if not applicable
54
 
 
55
 
0c-0d Delay before execution of effect (little endian encoding, in ms)
56
 
 
57
 
 
58
 
** Time based parameters **
59
 
 
60
 
*** Attack and fade ***
61
 
OP=  02
62
 
LEN= 08
63
 
00-01 Address where to store the parameteres
64
 
02-03 Duration of attack (little endian encoding, in ms)
65
 
04 Level at end of attack. Signed byte.
66
 
05-06 Duration of fade.
67
 
07 Level at end of fade.
68
 
 
69
 
*** Magnitude ***
70
 
OP=  03
71
 
LEN= 03
72
 
00-01 Address
73
 
02 Level. Signed byte.
74
 
 
75
 
*** Periodicity ***
76
 
OP=  04
77
 
LEN= 07
78
 
00-01 Address
79
 
02 Magnitude. Signed byte.
80
 
03 Offset. Signed byte.
81
 
04 Phase. Val 00 = 0 deg, Val 40 = 90 degs.
82
 
05-06 Period (little endian encoding, in ms)
83
 
 
84
 
** Interactive parameters **
85
 
OP=  05
86
 
LEN= 0a
87
 
00-01 Address
88
 
02 Positive Coeff
89
 
03 Negative Coeff (Val 14 = 2000 (decimal))
90
 
04 Offset (Val 64 = 2000 (decimal)) | center ?
91
 
05 ??? Val = 00                     |
92
 
06+07 Dead band (Val 01F4 = 5000 (decimal))
93
 
08 Positive saturation (Val 0a = 1000 (decimal) Val 64 = 10000 (decimal))
94
 
09 Negative saturation
95
 
 
96
 
** Controls **
97
 
OP=  41
98
 
LEN= 03
99
 
00 Channel
100
 
01 Start/Stop
101
 
        Val 00: Stop
102
 
        Val 01: Start and play once.
103
 
        Val 41: Start and play n times (See byte 02 below)
104
 
02 Number of iterations n.
105
 
 
106
 
** Init **
107
 
 
108
 
*** Querying features ***
109
 
OP=  ff
110
 
Query command. Length varies according to the query type.
111
 
The general format of this packet is:
112
 
ff 01 QUERY [INDEX] CHECKSUM
113
 
reponses are of the same form:
114
 
FF LEN QUERY VALUE_QUERIED CHECKSUM2
115
 
where LEN = 1 + length(VALUE_QUERIED)
116
 
 
117
 
**** Query ram size ****
118
 
QUERY = 42 ('B'uffer size)
119
 
The device should reply with the same packet plus two additionnal bytes
120
 
containing the size of the memory:
121
 
ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available.
122
 
 
123
 
**** Query number of effects ****
124
 
QUERY = 4e ('N'umber of effects)
125
 
The device should respond by sending the number of effects that can be played
126
 
at the same time (one byte)
127
 
ff 02 4e 14 CS would stand for 20 effects.
128
 
 
129
 
**** Vendor's id ****
130
 
QUERY = 4d ('M'anufacturer)
131
 
Query the vendors'id (2 bytes)
132
 
 
133
 
**** Product id *****
134
 
QUERY = 50 ('P'roduct)
135
 
Query the product id (2 bytes)
136
 
 
137
 
**** Open device ****
138
 
QUERY = 4f ('O'pen) 
139
 
No data returned.
140
 
 
141
 
**** Close device *****
142
 
QUERY = 43 ('C')lose
143
 
No data returned.
144
 
 
145
 
**** Query effect ****
146
 
QUERY = 45 ('E') 
147
 
Send effect type.
148
 
Returns nonzero if supported (2 bytes)
149
 
 
150
 
**** Firmware Version ****
151
 
QUERY = 56 ('V'ersion)
152
 
Sends back 3 bytes - major, minor, subminor
153
 
 
154
 
*** Initialisation of the device ***
155
 
 
156
 
**** Set Control ****
157
 
!!! Device dependent, can be different on different models !!!
158
 
OP=  40 <idx> <val> [<val>]
159
 
LEN= 2 or 3
160
 
00 Idx
161
 
   Idx 00 Set dead zone (0..2048) 
162
 
   Idx 01 Ignore Deadman sensor (0..1)     
163
 
   Idx 02 Enable comm watchdog (0..1)     
164
 
   Idx 03 Set the strength of the spring (0..100)   
165
 
   Idx 04 Enable or disable the spring (0/1)
166
 
   Idx 05 Set axis saturation threshold (0..2048) 
167
 
 
168
 
**** Set Effect State ****
169
 
OP=  42 <val>
170
 
LEN= 1
171
 
00 State
172
 
   Bit 3 Pause force feedback
173
 
   Bit 2 Enable force feedback
174
 
   Bit 0 Stop all effects
175
 
 
176
 
**** Set overall gain ****
177
 
OP=  43 <val>
178
 
LEN= 1
179
 
00 Gain
180
 
   Val 00 = 0%
181
 
   Val 40 = 50%
182
 
   Val 80 = 100%
183
 
 
184
 
** Parameter memory **
185
 
 
186
 
Each device has a certain amount of memory to store parameters of effects.
187
 
The amount of RAM may vary, I encountered values from 200 to 1000 bytes. Below
188
 
is the amount of memory apparently needed for every set of parameters:
189
 
 - period : 0c
190
 
 - magnitude : 02
191
 
 - attack and fade : 0e
192
 
 - interactive : 08
193
 
 
194
 
** Appendix: How to study the protocol ? **
195
 
 
196
 
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)
197
 
2. Start a soft spying RS232 or USB (depending on where you connected your joystick/wheel). I used ComPortSpy from fCoder (alpha version!)
198
 
3. Play the effect, and watch what happens on the spy screen.
199
 
 
200
 
A few words about ComPortSpy:
201
 
At first glance, this soft seems, hum, well... buggy. In fact, data appear with a few seconds latency. Personnaly, I restart it every time I play an effect.
202
 
Remember it's free (as in free beer) and alpha!
203
 
 
204
 
** URLS **
205
 
Well, I don't have them at hand (unluckyly, I do not have internet at home).
206
 
Check www.immerse.com for Immersion Studio, and www.fcoder.com for ComPortSpy.
207
 
 
208
 
** Author of this document **
209
 
Johann Deneux <deneux@ifrance.com>
210
 
Home page at http://www.esil.univ-mrs.fr/~jdeneux/projects/ff/
211
 
 
212
 
Additions by Vojtech Pavlik.
213
 
 
214
 
I-Force is trademark of Immersion Corp.