~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/input/devices/iforce-protocol.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/input/devices/iforce-protocol.rst (Version linux-6.11.5) and /Documentation/input/devices/iforce-protocol.rst (Version linux-5.8.18)


  1 ===============                                     1 ===============
  2 Iforce Protocol                                     2 Iforce Protocol
  3 ===============                                     3 ===============
  4                                                     4 
  5 :Author: Johann Deneux <johann.deneux@gmail.com      5 :Author: Johann Deneux <johann.deneux@gmail.com>
  6                                                     6 
  7 Home page at `<http://web.archive.org/web/*/ht      7 Home page at `<http://web.archive.org/web/*/http://www.esil.univ-mrs.fr>`_
  8                                                     8 
  9 :Additions: by Vojtech Pavlik.                      9 :Additions: by Vojtech Pavlik.
 10                                                    10 
 11                                                    11 
 12 Introduction                                       12 Introduction
 13 ============                                       13 ============
 14                                                    14 
 15 This document describes what I managed to disc     15 This document describes what I managed to discover about the protocol used to
 16 specify force effects to I-Force 2.0 devices.      16 specify force effects to I-Force 2.0 devices.  None of this information comes
 17 from Immerse. That's why you should not trust      17 from Immerse. That's why you should not trust what is written in this
 18 document. This document is intended to help un     18 document. This document is intended to help understanding the protocol.
 19 This is not a reference. Comments and correcti     19 This is not a reference. Comments and corrections are welcome.  To contact me,
 20 send an email to: johann.deneux@gmail.com          20 send an email to: johann.deneux@gmail.com
 21                                                    21 
 22 .. warning::                                       22 .. warning::
 23                                                    23 
 24     I shall not be held responsible for any da     24     I shall not be held responsible for any damage or harm caused if you try to
 25     send data to your I-Force device based on      25     send data to your I-Force device based on what you read in this document.
 26                                                    26 
 27 Preliminary Notes                                  27 Preliminary Notes
 28 =================                                  28 =================
 29                                                    29 
 30 All values are hexadecimal with big-endian enc     30 All values are hexadecimal with big-endian encoding (msb on the left). Beware,
 31 values inside packets are encoded using little     31 values inside packets are encoded using little-endian.  Bytes whose roles are
 32 unknown are marked ???  Information that needs     32 unknown are marked ???  Information that needs deeper inspection is marked (?)
 33                                                    33 
 34 General form of a packet                           34 General form of a packet
 35 ------------------------                           35 ------------------------
 36                                                    36 
 37 This is how packets look when the device uses      37 This is how packets look when the device uses the rs232 to communicate.
 38                                                    38 
 39 == == === ==== ==                                  39 == == === ==== ==
 40 2B OP LEN DATA CS                                  40 2B OP LEN DATA CS
 41 == == === ==== ==                                  41 == == === ==== ==
 42                                                    42 
 43 CS is the checksum. It is equal to the exclusi     43 CS is the checksum. It is equal to the exclusive or of all bytes.
 44                                                    44 
 45 When using USB:                                    45 When using USB:
 46                                                    46 
 47 == ====                                            47 == ====
 48 OP DATA                                            48 OP DATA
 49 == ====                                            49 == ====
 50                                                    50 
 51 The 2B, LEN and CS fields have disappeared, pr     51 The 2B, LEN and CS fields have disappeared, probably because USB handles
 52 frames and data corruption is handled or insig !!  52 frames and data corruption is handled or unsignificant.
 53                                                    53 
 54 First, I describe effects that are sent by the     54 First, I describe effects that are sent by the device to the computer
 55                                                    55 
 56 Device input state                                 56 Device input state
 57 ==================                                 57 ==================
 58                                                    58 
 59 This packet is used to indicate the state of e     59 This packet is used to indicate the state of each button and the value of each
 60 axis::                                             60 axis::
 61                                                    61 
 62     OP= 01 for a joystick, 03 for a wheel          62     OP= 01 for a joystick, 03 for a wheel
 63     LEN= Varies from device to device              63     LEN= Varies from device to device
 64     00 X-Axis lsb                                  64     00 X-Axis lsb
 65     01 X-Axis msb                                  65     01 X-Axis msb
 66     02 Y-Axis lsb, or gas pedal for a wheel        66     02 Y-Axis lsb, or gas pedal for a wheel
 67     03 Y-Axis msb, or brake pedal for a wheel      67     03 Y-Axis msb, or brake pedal for a wheel
 68     04 Throttle                                    68     04 Throttle
 69     05 Buttons                                     69     05 Buttons
 70     06 Lower 4 bits: Buttons                       70     06 Lower 4 bits: Buttons
 71        Upper 4 bits: Hat                           71        Upper 4 bits: Hat
 72     07 Rudder                                      72     07 Rudder
 73                                                    73 
 74 Device effects states                              74 Device effects states
 75 =====================                              75 =====================
 76                                                    76 
 77 ::                                                 77 ::
 78                                                    78 
 79     OP= 02                                         79     OP= 02
 80     LEN= Varies                                    80     LEN= Varies
 81     00 ? Bit 1 (Value 2) is the value of the d     81     00 ? Bit 1 (Value 2) is the value of the deadman switch
 82     01 Bit 8 is set if the effect is playing.      82     01 Bit 8 is set if the effect is playing. Bits 0 to 7 are the effect id.
 83     02 ??                                          83     02 ??
 84     03 Address of parameter block changed (lsb     84     03 Address of parameter block changed (lsb)
 85     04 Address of parameter block changed (msb     85     04 Address of parameter block changed (msb)
 86     05 Address of second parameter block chang     86     05 Address of second parameter block changed (lsb)
 87     ... depending on the number of parameter b     87     ... depending on the number of parameter blocks updated
 88                                                    88 
 89 Force effect                                       89 Force effect
 90 ------------                                       90 ------------
 91                                                    91 
 92 ::                                                 92 ::
 93                                                    93 
 94     OP=  01                                        94     OP=  01
 95     LEN= 0e                                        95     LEN= 0e
 96     00 Channel (when playing several effects a     96     00 Channel (when playing several effects at the same time, each must
 97                 be assigned a channel)             97                 be assigned a channel)
 98     01 Wave form                                   98     01 Wave form
 99             Val 00 Constant                        99             Val 00 Constant
100             Val 20 Square                         100             Val 20 Square
101             Val 21 Triangle                       101             Val 21 Triangle
102             Val 22 Sine                           102             Val 22 Sine
103             Val 23 Sawtooth up                    103             Val 23 Sawtooth up
104             Val 24 Sawtooth down                  104             Val 24 Sawtooth down
105             Val 40 Spring (Force = f(pos))        105             Val 40 Spring (Force = f(pos))
106             Val 41 Friction (Force = f(velocit    106             Val 41 Friction (Force = f(velocity)) and Inertia
107                    (Force = f(acceleration))      107                    (Force = f(acceleration))
108                                                   108 
109                                                   109 
110     02 Axes affected and trigger                  110     02 Axes affected and trigger
111             Bits 4-7: Val 2 = effect along one    111             Bits 4-7: Val 2 = effect along one axis. Byte 05 indicates direction
112                     Val 4 = X axis only. Byte     112                     Val 4 = X axis only. Byte 05 must contain 5a
113                     Val 8 = Y axis only. Byte     113                     Val 8 = Y axis only. Byte 05 must contain b4
114                     Val c = X and Y axes. Byte    114                     Val c = X and Y axes. Bytes 05 must contain 60
115             Bits 0-3: Val 0 = No trigger          115             Bits 0-3: Val 0 = No trigger
116                     Val x+1 = Button x trigger    116                     Val x+1 = Button x triggers the effect
117             When the whole byte is 0, cancel t    117             When the whole byte is 0, cancel the previously set trigger
118                                                   118 
119     03-04 Duration of effect (little endian en    119     03-04 Duration of effect (little endian encoding, in ms)
120                                                   120 
121     05 Direction of effect, if applicable. Els    121     05 Direction of effect, if applicable. Else, see 02 for value to assign.
122                                                   122 
123     06-07 Minimum time between triggering.        123     06-07 Minimum time between triggering.
124                                                   124 
125     08-09 Address of periodicity or magnitude     125     08-09 Address of periodicity or magnitude parameters
126     0a-0b Address of attack and fade parameter    126     0a-0b Address of attack and fade parameters, or ffff if none.
127     *or*                                          127     *or*
128     08-09 Address of interactive parameters fo    128     08-09 Address of interactive parameters for X-axis,
129           or ffff if not applicable               129           or ffff if not applicable
130     0a-0b Address of interactive parameters fo    130     0a-0b Address of interactive parameters for Y-axis,
131           or ffff if not applicable               131           or ffff if not applicable
132                                                   132 
133     0c-0d Delay before execution of effect (li    133     0c-0d Delay before execution of effect (little endian encoding, in ms)
134                                                   134 
135                                                   135 
136 Time based parameters                             136 Time based parameters
137 ---------------------                             137 ---------------------
138                                                   138 
139 Attack and fade                                   139 Attack and fade
140 ^^^^^^^^^^^^^^^                                   140 ^^^^^^^^^^^^^^^
141                                                   141 
142 ::                                                142 ::
143                                                   143 
144     OP=  02                                       144     OP=  02
145     LEN= 08                                       145     LEN= 08
146     00-01 Address where to store the parameter    146     00-01 Address where to store the parameters
147     02-03 Duration of attack (little endian en    147     02-03 Duration of attack (little endian encoding, in ms)
148     04 Level at end of attack. Signed byte.       148     04 Level at end of attack. Signed byte.
149     05-06 Duration of fade.                       149     05-06 Duration of fade.
150     07 Level at end of fade.                      150     07 Level at end of fade.
151                                                   151 
152 Magnitude                                         152 Magnitude
153 ^^^^^^^^^                                         153 ^^^^^^^^^
154                                                   154 
155 ::                                                155 ::
156                                                   156 
157     OP=  03                                       157     OP=  03
158     LEN= 03                                       158     LEN= 03
159     00-01 Address                                 159     00-01 Address
160     02 Level. Signed byte.                        160     02 Level. Signed byte.
161                                                   161 
162 Periodicity                                       162 Periodicity
163 ^^^^^^^^^^^                                       163 ^^^^^^^^^^^
164                                                   164 
165 ::                                                165 ::
166                                                   166 
167     OP=  04                                       167     OP=  04
168     LEN= 07                                       168     LEN= 07
169     00-01 Address                                 169     00-01 Address
170     02 Magnitude. Signed byte.                    170     02 Magnitude. Signed byte.
171     03 Offset. Signed byte.                       171     03 Offset. Signed byte.
172     04 Phase. Val 00 = 0 deg, Val 40 = 90 degs    172     04 Phase. Val 00 = 0 deg, Val 40 = 90 degs.
173     05-06 Period (little endian encoding, in m    173     05-06 Period (little endian encoding, in ms)
174                                                   174 
175 Interactive parameters                            175 Interactive parameters
176 ----------------------                            176 ----------------------
177                                                   177 
178 ::                                                178 ::
179                                                   179 
180     OP=  05                                       180     OP=  05
181     LEN= 0a                                       181     LEN= 0a
182     00-01 Address                                 182     00-01 Address
183     02 Positive Coeff                             183     02 Positive Coeff
184     03 Negative Coeff                             184     03 Negative Coeff
185     04+05 Offset (center)                         185     04+05 Offset (center)
186     06+07 Dead band (Val 01F4 = 5000 (decimal)    186     06+07 Dead band (Val 01F4 = 5000 (decimal))
187     08 Positive saturation (Val 0a = 1000 (dec    187     08 Positive saturation (Val 0a = 1000 (decimal) Val 64 = 10000 (decimal))
188     09 Negative saturation                        188     09 Negative saturation
189                                                   189 
190 The encoding is a bit funny here: For coeffs,     190 The encoding is a bit funny here: For coeffs, these are signed values. The
191 maximum value is 64 (100 decimal), the min is     191 maximum value is 64 (100 decimal), the min is 9c.
192 For the offset, the minimum value is FE0C, the    192 For the offset, the minimum value is FE0C, the maximum value is 01F4.
193 For the deadband, the minimum value is 0, the     193 For the deadband, the minimum value is 0, the max is 03E8.
194                                                   194 
195 Controls                                          195 Controls
196 --------                                          196 --------
197                                                   197 
198 ::                                                198 ::
199                                                   199 
200     OP=  41                                       200     OP=  41
201     LEN= 03                                       201     LEN= 03
202     00 Channel                                    202     00 Channel
203     01 Start/Stop                                 203     01 Start/Stop
204             Val 00: Stop                          204             Val 00: Stop
205             Val 01: Start and play once.          205             Val 01: Start and play once.
206             Val 41: Start and play n times (Se    206             Val 41: Start and play n times (See byte 02 below)
207     02 Number of iterations n.                    207     02 Number of iterations n.
208                                                   208 
209 Init                                              209 Init
210 ----                                              210 ----
211                                                   211 
212                                                   212 
213 Querying features                                 213 Querying features
214 ^^^^^^^^^^^^^^^^^                                 214 ^^^^^^^^^^^^^^^^^
215 ::                                                215 ::
216                                                   216 
217     OP=  ff                                       217     OP=  ff
218     Query command. Length varies according to     218     Query command. Length varies according to the query type.
219     The general format of this packet is:         219     The general format of this packet is:
220     ff 01 QUERY [INDEX] CHECKSUM                  220     ff 01 QUERY [INDEX] CHECKSUM
221     responses are of the same form:               221     responses are of the same form:
222     FF LEN QUERY VALUE_QUERIED CHECKSUM2          222     FF LEN QUERY VALUE_QUERIED CHECKSUM2
223     where LEN = 1 + length(VALUE_QUERIED)         223     where LEN = 1 + length(VALUE_QUERIED)
224                                                   224 
225 Query ram size                                    225 Query ram size
226 ~~~~~~~~~~~~~~                                    226 ~~~~~~~~~~~~~~
227                                                   227 
228 ::                                                228 ::
229                                                   229 
230     QUERY = 42 ('B'uffer size)                    230     QUERY = 42 ('B'uffer size)
231                                                   231 
232 The device should reply with the same packet p    232 The device should reply with the same packet plus two additional bytes
233 containing the size of the memory:                233 containing the size of the memory:
234 ff 03 42 03 e8 CS would mean that the device h    234 ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available.
235                                                   235 
236 Query number of effects                           236 Query number of effects
237 ~~~~~~~~~~~~~~~~~~~~~~~                           237 ~~~~~~~~~~~~~~~~~~~~~~~
238                                                   238 
239 ::                                                239 ::
240                                                   240 
241     QUERY = 4e ('N'umber of effects)              241     QUERY = 4e ('N'umber of effects)
242                                                   242 
243 The device should respond by sending the numbe    243 The device should respond by sending the number of effects that can be played
244 at the same time (one byte)                       244 at the same time (one byte)
245 ff 02 4e 14 CS would stand for 20 effects.        245 ff 02 4e 14 CS would stand for 20 effects.
246                                                   246 
247 Vendor's id                                       247 Vendor's id
248 ~~~~~~~~~~~                                       248 ~~~~~~~~~~~
249                                                   249 
250 ::                                                250 ::
251                                                   251 
252     QUERY = 4d ('M'anufacturer)                   252     QUERY = 4d ('M'anufacturer)
253                                                   253 
254 Query the vendors'id (2 bytes)                    254 Query the vendors'id (2 bytes)
255                                                   255 
256 Product id                                        256 Product id
257 ~~~~~~~~~~                                        257 ~~~~~~~~~~
258                                                   258 
259 ::                                                259 ::
260                                                   260 
261     QUERY = 50 ('P'roduct)                        261     QUERY = 50 ('P'roduct)
262                                                   262 
263 Query the product id (2 bytes)                    263 Query the product id (2 bytes)
264                                                   264 
265 Open device                                       265 Open device
266 ~~~~~~~~~~~                                       266 ~~~~~~~~~~~
267                                                   267 
268 ::                                                268 ::
269                                                   269 
270     QUERY = 4f ('O'pen)                           270     QUERY = 4f ('O'pen)
271                                                   271 
272 No data returned.                                 272 No data returned.
273                                                   273 
274 Close device                                      274 Close device
275 ~~~~~~~~~~~~                                      275 ~~~~~~~~~~~~
276                                                   276 
277 ::                                                277 ::
278                                                   278 
279     QUERY = 43 ('C')lose                          279     QUERY = 43 ('C')lose
280                                                   280 
281 No data returned.                                 281 No data returned.
282                                                   282 
283 Query effect                                      283 Query effect
284 ~~~~~~~~~~~~                                      284 ~~~~~~~~~~~~
285                                                   285 
286 ::                                                286 ::
287                                                   287 
288     QUERY = 45 ('E')                              288     QUERY = 45 ('E')
289                                                   289 
290 Send effect type.                                 290 Send effect type.
291 Returns nonzero if supported (2 bytes)            291 Returns nonzero if supported (2 bytes)
292                                                   292 
293 Firmware Version                                  293 Firmware Version
294 ~~~~~~~~~~~~~~~~                                  294 ~~~~~~~~~~~~~~~~
295                                                   295 
296 ::                                                296 ::
297                                                   297 
298     QUERY = 56 ('V'ersion)                        298     QUERY = 56 ('V'ersion)
299                                                   299 
300 Sends back 3 bytes - major, minor, subminor       300 Sends back 3 bytes - major, minor, subminor
301                                                   301 
302 Initialisation of the device                      302 Initialisation of the device
303 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^                      303 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
304                                                   304 
305 Set Control                                       305 Set Control
306 ~~~~~~~~~~~                                       306 ~~~~~~~~~~~
307                                                   307 
308 .. note::                                         308 .. note::
309     Device dependent, can be different on diff    309     Device dependent, can be different on different models!
310                                                   310 
311 ::                                                311 ::
312                                                   312 
313     OP=  40 <idx> <val> [<val>]                   313     OP=  40 <idx> <val> [<val>]
314     LEN= 2 or 3                                   314     LEN= 2 or 3
315     00 Idx                                        315     00 Idx
316        Idx 00 Set dead zone (0..2048)             316        Idx 00 Set dead zone (0..2048)
317        Idx 01 Ignore Deadman sensor (0..1)        317        Idx 01 Ignore Deadman sensor (0..1)
318        Idx 02 Enable comm watchdog (0..1)         318        Idx 02 Enable comm watchdog (0..1)
319        Idx 03 Set the strength of the spring (    319        Idx 03 Set the strength of the spring (0..100)
320        Idx 04 Enable or disable the spring (0/    320        Idx 04 Enable or disable the spring (0/1)
321        Idx 05 Set axis saturation threshold (0    321        Idx 05 Set axis saturation threshold (0..2048)
322                                                   322 
323 Set Effect State                                  323 Set Effect State
324 ~~~~~~~~~~~~~~~~                                  324 ~~~~~~~~~~~~~~~~
325                                                   325 
326 ::                                                326 ::
327                                                   327 
328     OP=  42 <val>                                 328     OP=  42 <val>
329     LEN= 1                                        329     LEN= 1
330     00 State                                      330     00 State
331        Bit 3 Pause force feedback                 331        Bit 3 Pause force feedback
332        Bit 2 Enable force feedback                332        Bit 2 Enable force feedback
333        Bit 0 Stop all effects                     333        Bit 0 Stop all effects
334                                                   334 
335 Set overall                                       335 Set overall
336 ~~~~~~~~~~~                                       336 ~~~~~~~~~~~
337                                                   337 
338 ::                                                338 ::
339                                                   339 
340     OP=  43 <val>                                 340     OP=  43 <val>
341     LEN= 1                                        341     LEN= 1
342     00 Gain                                       342     00 Gain
343        Val 00 = 0%                                343        Val 00 = 0%
344        Val 40 = 50%                               344        Val 40 = 50%
345        Val 80 = 100%                              345        Val 80 = 100%
346                                                   346 
347 Parameter memory                                  347 Parameter memory
348 ----------------                                  348 ----------------
349                                                   349 
350 Each device has a certain amount of memory to     350 Each device has a certain amount of memory to store parameters of effects.
351 The amount of RAM may vary, I encountered valu    351 The amount of RAM may vary, I encountered values from 200 to 1000 bytes. Below
352 is the amount of memory apparently needed for     352 is the amount of memory apparently needed for every set of parameters:
353                                                   353 
354  - period : 0c                                    354  - period : 0c
355  - magnitude : 02                                 355  - magnitude : 02
356  - attack and fade : 0e                           356  - attack and fade : 0e
357  - interactive : 08                               357  - interactive : 08
358                                                   358 
359 Appendix: How to study the protocol?              359 Appendix: How to study the protocol?
360 ====================================              360 ====================================
361                                                   361 
362 1. Generate effects using the force editor pro    362 1. Generate effects using the force editor provided with the DirectX SDK, or
363 use Immersion Studio (freely available at thei    363 use Immersion Studio (freely available at their web site in the developer section:
364 www.immersion.com)                                364 www.immersion.com)
365 2. Start a soft spying RS232 or USB (depending    365 2. Start a soft spying RS232 or USB (depending on where you connected your
366 joystick/wheel). I used ComPortSpy from fCoder    366 joystick/wheel). I used ComPortSpy from fCoder (alpha version!)
367 3. Play the effect, and watch what happens on     367 3. Play the effect, and watch what happens on the spy screen.
368                                                   368 
369 A few words about ComPortSpy:                     369 A few words about ComPortSpy:
370 At first glance, this software seems, hum, wel    370 At first glance, this software seems, hum, well... buggy. In fact, data appear with a
371 few seconds latency. Personally, I restart it     371 few seconds latency. Personally, I restart it every time I play an effect.
372 Remember it's free (as in free beer) and alpha    372 Remember it's free (as in free beer) and alpha!
373                                                   373 
374 URLS                                              374 URLS
375 ====                                              375 ====
376                                                   376 
377 Check http://www.immerse.com for Immersion Stu    377 Check http://www.immerse.com for Immersion Studio,
378 and http://www.fcoder.com for ComPortSpy.         378 and http://www.fcoder.com for ComPortSpy.
379                                                   379 
380                                                   380 
381 I-Force is trademark of Immersion Corp.           381 I-Force is trademark of Immersion Corp.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php