summaryrefslogtreecommitdiffstats
path: root/Documentation/joystick.txt
blob: 163fece8c930d87450c98a4cdf9b0b190fad6951 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
		       Linux Joystick driver v1.2.15
	       (c) 1996-1999 Vojtech Pavlik <vojtech@suse.cz>
			     Sponsored by SuSE
----------------------------------------------------------------------------

0. Disclaimer
~~~~~~~~~~~~~
  This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.

  This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details.

  You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA

  Should you need to contact me, the author, you can do so either by e-mail
- mail your message to <vojtech@suse.cz>, or by paper mail: Vojtech Pavlik,
Ucitelska 1576, Prague 8, 182 00 Czech Republic

  For your convenience, the GNU General Public License version 2 is included
in the package: See the file COPYING.

1. Intro
~~~~~~~~
  The joystick driver for Linux provides support for a variety of joysticks
and similar devices.

  These currently include various analog joysticks and gamepads (both
variable resistor based and microswitch+resistor based), following IBM PC
joystick standard, with extensions like additional hats and buttons
compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button
gamepads.

  In addition to these it also supports some of the new PC joysticks that
use proprietary digital protocols to communicate over the gameport,
currently by FPGaming, Gravis, Logitech, MadCatz, Microsoft, Creative and
ThrustMaster. Saitek protocol support is still to be done.

  The driver also includes support for many gamepads and joysticks that were
used by various non-PC computers and game consoles. These include Multi
system joysticks (Atari, Amiga, Commodore, Amstrad), Sega gamepads (Master
System, Genesis, Saturn), Nintendo gamepads (NES, SNES, N64), Sony gamepads
(PSX).  Support for Atari Jaguar, Atari 2600, NES FourScore, SNES MultiTap
and others might be added later.

  Last, but not least there is also native Amiga joystick support for the
Amiga Linux port.

  Should you encounter any problems while using the driver, or joysticks
this driver can't make complete use of, I'm very interested in hearing about
them. Bug reports and success stories are also welcome.

  The joystick package is available at the following FTP sites:

	ftp://ftp.suse.cz/pub/development/joystick/
	ftp://atrey.karlin.mff.cuni.cz/pub/linux/joystick/
	ftp://ftp.gts.cz/pub/linux/joystick/

  And a homepage of the driver is at:

	http://www.suse.cz/development/joystick/
	http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/
	http://www.trylinux.com/projects/joystick/
	http://www.linuxgames.com/joystick/

  There is also a mailing list for the driver at:

	listproc@atrey.karlin.mff.cuni.cz

send "subscribe linux-joystick Your Name" to subscribe to it.

2. Usage
~~~~~~~~
  You could have obtained this driver in two different ways - either in the
joystick package or in the kernel. Because, for successful usage of the
joysticks, the utilities in the package are useful, maybe necessary, and
definitely recommended, I suggest you getting the package at some of the
above mentioned locations. The rest of this file assumes you have it.

2.1 Compiling the driver package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  To compile the utilities in the joystick package, and the driver itself,
as a standalone module, you first unpack the package, and then edit the
Makefile to meet your needs (namely whether are you using versioned
modules). You will also need an unpacked and configured

	make config

kernel in
	
	/usr/src/linux

Furthermore, if you're using versioned modules, you'll also need

	make dep

done on the kernel, to create some needed files.

After that, you compile the joystick driver

	make

  And after that you install it

	make install

  In case you have not used the driver before, you'll need to create the
joystick device files in /dev so that applications can use them:

	make devs

  For manual creation of the joystick devices, check the
Documentation/devices.txt file in the Linux source tree.

  Should you not want to mess with the kernel, and just use the driver
standalone, as modules, skip the next two sections, proceeding right to 2.4,
because all you need is already done.

2.2 Patching the kernel
~~~~~~~~~~~~~~~~~~~~~~~
  If you already have the most recent joystick driver in your kernel, skip
this section. If not, you need to patch the kernel, so that it contains the
current driver version.  You do that with a command: 

	patch -Esp1 < /usr/src/joystick-1.2.x/kernel-2.x.y.diff

in

	/usr/src/linux

2.3 Compiling the kernel
~~~~~~~~~~~~~~~~~~~~~~~~
  To compile joystick support into the kernel, use the kernel configuration
scripts, and answer 'Y' to Joystick support and also to at least one of the
hardware specific options. After doing something like

	make bzlilo

  you are done with the driver installation. Just reboot and the driver
should find all the connected joysticks. Read the notes about the hardware
specific drivers later in this file, though.

  You can also compile the driver as modules, answering 'M' to all joystick
support you want to have modules for. It is possible to have the main
joystick driver compiled into the kernel and the hardware dependent drivers
as modules. After you compile the modules 

	make modules

  And install them

	make modules_install

 you're set, and can proceed to the next step.

2.4 Inserting the modules into the kernel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  After installing the modules you'll first need to insert the generic
joystick driver module into the kernel

	insmod joystick

  and then one or more of the hardware specific modules

	insmod joy-something

  where 'something' is the type of your joystick. See below for more precise
explanation.

  Alternately you can add the lines

	alias char-major-15 joy-something
	options joy-something js_xx=x,x,x,x,...

  to the /etc/conf.modules file, so that the joystick module will be loaded
automatically when the /dev/js devices are accessed.

2.5 Verifying that it works
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  For testing the joystick driver functionality, there is the jstest
program. You run it by typing:

	jstest /dev/js0

  And it should show a line with the joystick values, which update as you
move the stick, and press its buttons. The axes should all be zero when the
joystick is in the center position. They should not jitter by themselves to
other close values, and they also should be steady in any other position of
the stick. They should have the full range from -32767 to 32767. If all this
is met, then it's all fine, and you can play the games. :)

  If it's not, then there might be a problem. Try to calibrate the joystick,
and if it still doesn't work, read the drivers section of this file, the
troubleshooting section, and the FAQ.

2.6. Calibration
~~~~~~~~~~~~~~~~
  For most joysticks you won't need any manual calibration, since the
joystick should be autocalibrated by the driver automagically. However, with
some analog joysticks, that either do not use linear resistors, or if you
want better precision, you can use the jscal program

	jscal -c /dev/js0

 included in the joystick package to set better correction coefficients than
what the driver would choose itself.

  After calibrating the joystick you can verify if you like the new
calibration using the jstest command, and if you do, you then can save the
correction coefficients into a file

	jscal -p /dev/js0 > /etc/joystick.cal

  And add a line to your rc script executing that file

	source /etc/joystick.cal

  This way, after the next reboot your joystick will remain calibrated. You
can also add the jscal -p line to your shutdown script.


3. HW specific driver information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In this section each of the separate hardware specific drivers is described.

3.1 Analog joysticks
~~~~~~~~~~~~~~~~~~~~
  The joy-analog.c uses the standard analog inputs of the gameport, and thus
supports all standard joysticks and gamepads. It also supports extensions
like additional hats and buttons compatible with CH Flightstick Pro,
ThrustMaster FCS or 6 and 8 button gamepads. 

  However the only types that can be autodetected are:

* 2-axis, 4-button joystick
* 3-axis, 4-button joystick
* 4-axis, 4-button joystick

  For other joystick types (more/less axes, hats, and buttons) support
you'll need to specify the types either on the kernel command line or on the
module command line, when inserting joy-analog.o into the kernel. The
parameters are:

	js_an=p0,m0,n0,p1,m1,n1 ...

  Where 'p' is the port number, eg. 0x201, which is the standard address.
'm' and 'n' are joystick 0 and joystick 1 bitmasks for the specified
joystick port. The bits in the bitmasks mean:

	Bit |   2^n | Meaning
	----------------------------------
	 0  |     1 | Axis X1
	 1  |     2 | Axis Y1
	 2  |     4 | Axis X2
	 3  |     8 | Axis Y2
	 4  |    16 | Button A
	 5  |    32 | Button B
	 6  |    64 | Button C
	 7  |   128 | Button D
	 8  |   256 | CHF Buttons X and Y
	 9  |   512 | CHF Hat 1
	10  |  1024 | CHF Hat 2
	11  |  2048 | FCS Hat
	12  |  4096 | Pad Button X
	13  |  8192 | Pad Button Y
	14  | 16384 | Pad Button U
	15  | 32768 | Pad Button V

(CHF = CH Flightstick Pro, FCS = ThrustMaster FCS)

  Following is a table of joysticks for which the 'm' values are known. If
you have any additions/corrections to it, e-mail me.

	Joystick				| 'm' value
	----------------------------------------------------
	Simple 2-button 2-axis joystick		| 0x0033
	Second simple joystick on Y-cable	| 0x00cc
	Genius Flight2000 F-12			| 0x00f3
	Genius Flight2000 F-21			| 0x08f7
	Genius Flight2000 F-22			| 0x02ff
	Genius GameHunter G-06			| 0xf0f3
	Genius MaxFire G-07			| 0xf0f3   
	Genius PowerStation			| 0xf0f3
	Laing #1 PC SuperPad			| 0xf0f3
	Logitech Wingman			| 0x003b
	Microsoft SideWinder Standard		| 0x003b
	QuickShot QS-201 SuperWarrior		| 0x00fb
	Saitek Megapad XII			| 0x30f3
	PC Powerpad Pro				| 0x30f3

  In case you have one of the joystick in the table below, and it doesn't
work with a specific driver in digital mode for some reason, you can use
them in analog mode with the joy-analog driver as well. However, digital
operation is always better.

	Joystick				| 'm' value
	----------------------------------------------------
	Gravis GamePad Pro - analog mode	| 0x00f3
	Genius Flight2000 F-23			| 0x02ff
	Microsoft SideWinder 3D Pro - CHF mode	| 0x02ff
	Microsoft SideWinder 3D Pro - FCS mode	| 0x08f7

  An example that would configure the driver to use two two axis, two button
joysticks connected to port 0x201, a single four button four axis joystick
connected to port 0x202, a four axis, six button and two hat CHF compatible
joystick on 0x203, and a two axis four button FCS compatible joystick with a
single hat on 0x207:

	js_an=0x201,0x33,0xcc,0x202,0xff,0,0x203,0x7ff,0,0x207,0x8f3,0

  If you can't sum bits into hex numbers in your head easily, you can simply
sum the values in the 2^n column decimally and use that number instead.
Using this method you'd get a command line:

	js_an=0x201,51,204,0x202,255,0,0x203,2047,0,0x207,2291,0

  And it would do the same as the above explained command line. Use
whichever way you like best.

3.2 Microsoft SideWinder joysticks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Microsoft 'Digital Overdrive' protocol is supported by the
joy-sidewinder.c module. All currently supported joysticks:

* SideWinder 3D Pro
* SideWinder Force Feedback Pro
* SideWinder Force Feedback Wheel
* SideWinder FreeStyle Pro
* SideWinder GamePad (up to four, chained together)
* SideWinder Precision Pro 

  are autodetected, and thus no module parameters are needed.

  There is one caveat with the 3D Pro. There are 9 buttons reported,
although the joystick has only 8. The 9th button is the mode switch on the
rear side of the joystick. However, moving it, you'll reset the joystick,
and make it unresponsive for about a one third of a second. Furthermore, the
joystick will also re-center itself, taking the position it was in during
this time as a new center position. Use it if you want, but think first.

  The SideWinder Standard is not a digital joystick, and thus is supported
by the analog driver described above. 

3.3 Logitech ADI devices
~~~~~~~~~~~~~~~~~~~~~~~~
  Logitech ADI protocol is supported by the joy-logitech.c module. It should
support any Logitech device using this protocol. This includes, but is not
limited to:

* Logitech CyberMan 2
* Logitech ThunderPad Digital
* Logitech WingMan Extreme Digital
* Logitech WingMan Formula
* Logitech WingMan Interceptor
* Logitech WingMan GamePad
* Logitech WingMan GamePad USB
* Logitech WingMan GamePad Extreme
* Logitech WingMan Extreme Digital 3D

  ADI devices are autodetected, and the driver supports up to two (any
combination of) devices on a single gameport, using an Y-cable or chained
together.

  Logitech WingMan Joystick, Logitech WingMan Attack, Logitech WingMan
Extreme and Logitech WingMan ThunderPad are not digital joysticks and are
handled by the analog driver described above. Logitech WingMan Warrior and
Logitech Magellan are supported by serial drivers described below. Logitech
CyberMan, Logitech WingMan Force and Logitech WingMan Formula Force are not
supported yet.

3.4 Gravis GrIP
~~~~~~~~~~~~~~~
  Gravis GrIP protocol is supported by the joy-gravis.c module. It
currently supports:

* Gravis GamePad Pro
* Gravis Xterminator
* Gravis BlackHawk Digital

  All these devices are autodetected, and you can even use any combination
of up to two of these pads either chained together or using an Y-cable on a
single gameport.

GrIP MultiPort and Gravis Xterminator DualControl aren't supported yet.
Gravis Stinger is a serial device and hopefully will be supported in the
future. Other Gravis joysticks are supported by the joy-analog driver.

3.5 FPGaming A3D and MadCatz A3D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The Assassin 3D protocol created by FPGaming, is used both by FPGaming
themselves and is licensed to MadCatz. A3D devices are supported by the
joy-assassin.c module. It currently supports:

* FPGaming Assassin 3D
* MadCatz Panther
* MadCatz Panther XL

  All these devices are autodetected. Because the Assassin 3D and the Panther
allow connecting analog joysticks to them, these are supported in this
driver, too. The driver uses the js_as parameter for the analog joysticks,
which has the same syntax as js_an for the analog driver.

  The trackball support is far from perfect at this stage of development,
but should be well usable.

3.6 ThrustMaster DirectConnect (BSP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The TM DirectConnect (BSP) protocol is supported by the joy-thrustmaster.c
module. This includes, but is not limited to:

* ThrustMaster Millenium 3D Inceptor
* ThrustMaster 3D Rage Pad
* ThrustMaster Fusion Digital Game Pad

  Devices not directly supported, but hopefully working are:

* ThrustMaster FragMaster
* ThrustMaster Attack Throttle

  If you have one of these, contact me.

  BSP devices are autodetected, and thus no parameters to the module
are needed.

3.7 Creative Labs Blaster
~~~~~~~~~~~~~~~~~~~~~~~~~
  The Blaster protocol is supported by the joy-creative.c module. It
currently supports only the:

* Creative Blaster GamePad Cobra

  Up to two of these can be used on a single gameport, using an Y-cable.

3.8 PDPI Lightning 4 gamecards
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  PDPI Lightning 4 gamecards are supported by the joy-lightning.c module.
This driver is only for analog joysticks connected to the card - if you want
to use some of the digital devices, you need to use its specific driver. The
card will work in legacy mode with them, though.

  Since all features of analog joysticks can't be detected, this driver
needs a command line:

	js_l4=p0,m0,n0,p1,m1,n1,....

  As you can see, it's very similar to the analog drivers command line.
Actually it is the same except for the meaning of p0. p0 in this case is the
port the joystick is attached to:

	  p  | Port
	----------------------------
	  0  | Primary card, port 1
	  1  | Primary card, port 2
	  2  | Primary card, port 3
	  3  | Primary card, port 4
	  4  | Secondary card, port 1
	  5  | Secondary card, port 2
	  6  | Secondary card, port 3
	  7  | Secondary card, port 4

  Two cards maximum are allowed in one system, because of the card's design.

  See the description of analog joystick driver for explanations of m0 and
n0 values.

3.9 Trident 4DWave / Aureal Vortex
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Soundcards with a Trident 4DWave DX/NX or Aureal Vortex chipset provide an
"Enhanced Game Port" mode where the soundcard handles polling the joystick.
This mode is supported by the joy-pci module.

  If no module parameters are given, the joy-pci module will set all the
soundcards it finds to "enhanced" mode, and will try to autodetect the type
of attached joystick. It can only detect the same types of joysticks that
the joy-analog module can.

  This module accepts parameters in the form:

	js_pci=t0,i0,m0,n0,t1,i1,m1,n1,....

  The "t" value specifies the type of card, as follows:

	  t  | Card Type
	----------------------------
	  0  | Trident 4DWave DX
	  1  | Trident 4DWave NX
	  2  | Aureal Vortex1 (Au8820 chipset)
	  3  | Aureal Vortex2 (Au8830 chipset)

  If you have more than one card of the same type, the "i" parameter lets
you choose which card to apply the "m" and "n" values to. It counts from
"0". (The driver detects cards in the order listed in the above table.)

  The "m" and "n" values have the same meaning as for the analog module,
with the exception that the value m=0, n=0 indicates that joy-pci should
completely ignore that port. This can be useful to reserve a certain port
for purely MIDI operation.

  For example, let's say you have 3 sound cards - a 4Dwave DX, a 4DWave NX,
and a Vortex 2. You have a three-axis, four-button, one-hat CHF- compatible
joystick on the DX. You use the NX to interface to an external MIDI device.
Finally, you have two two-axis, two-button joysticks on the Vortex. Your
command line might look like:

	js_pci=0,0,0x207,0,1,1,0,0,3,0,0x33,0xcc

3.10 Amiga
~~~~~~~~~~
  Amiga joysticks, connected to an Amiga, are supported by the joy-amiga.c
driver. Since they can't be autodetected, the driver has a command line.

	js_am=a,b

  a and b define the joysticks connected to the JOY0DAT and JOY1DAT ports of
the Amiga.

	Value | Joystick type
	---------------------
	  0   | None
	  1   | 1-button digital joystick

  No more joystick types are supported now, but that should change in the
future if I get an Amiga in the reach of my fingers.

3.11 Game console and 8-bit pads and joysticks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
See joystick-parport.txt for more info.

3.12 SpaceTec/LabTec devices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  SpaceTec serial devices communicate using the SpaceWare protocol. It is
supported by the joy-spaceorb and joy-spaceball drivers. The devices currently
supported by joy-spaceorb are:

* SpaceTec SpaceBall Avenger
* SpaceTec SpaceOrb 360

Devices currently supported by joy-spaceball are:

* SpaceTec SpaceBall 4000 FLX

  In addition to having the joy-spaceorb/spaceball module in the kernel, you
also need to attach a serial port to it. to do that, run the jsattach
program:

	jsattach --spaceorb /dev/ttySx &
or
	jsattach --sball4 /dev/ttySx &

where /dev/ttySx is the serial port which the device is connected to. After
doing this, the device will be reported and will start working.

  There is one caveat with the SpaceOrb. The button #6, the on the bottom
side of the orb, although reported as an ordinary button, causes internal
recentering of the spaceorb, moving the zero point to the position in which
the ball is at the moment of pressing the button. So, think first before
you bind it to some other function.

SpaceTec SpaceBall 2003 FLX and 3003 FLX are not supported yet. 

3.13 Logitech SWIFT devices
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The SWIFT serial protocol is supported by the joy-warrior module. It
currently supports only the:

* Logitech WingMan Warrior

but in the future, Logitech CyberMan (the original one, not CM2) could be
supported as well. To use the module, you need to run jsattach after you
insert/compile the module into your kernel:

	jsattach --warrior /dev/ttySx &

ttySx is the serial port your Warrior is attached to.

3.14 Magellan / Space Mouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The Magellan (or Space Mouse), manufactured by LogiCad3d (formerly Space
Systems), for many other companies (Logitech, HP, ...) is supported by the
joy-magellan module. It currently supports only the:

* Magellan 3D
* Space Mouse

models, the additional buttons on the 'Plus' versions are not supported yet.

  To use it, you need to attach the serial port to the driver using the

	jsattach --magellan /dev/ttySx &

command. After that the Magellan will be detected, initialized, will beep,
and the /dev/jsX device should become useable.

4. Troubleshooting
~~~~~~~~~~~~~~~~~~
  There is quite a high probability that you run into some problems. For
testing whether the driver works, if in doubt, use the jstest utility in
some of its modes. The most useful modes are "normal" - for the 1.x
interface, and "old" for the "0.x" interface. You run it by typing:

	jstest --normal /dev/js0
	jstest --old    /dev/js0

  If your trouble stems from the fact the drivers can't detect the joystick
attached to your gameport, and you decide you need my help (which I will
gladly provide), please use the joydump utility first. It's created just by
typing

	make joydump.o

  in the directory where you unpacked the joystick package. It is run then
by typing

	insmod joydump.o

  in the same directory. It will return a 'device busy' or 'initialization
failed' error. This is perfectly okay. It has already done it's job. The
results can be found in the system log or in the output of the

	dmesg

command. Please send me the results along with your problem report.

  Oh, and read the FAQ! :)

5. FAQ
~~~~~~
Q: The driver doesn't find any joysticks connected to my soundcard with the
   message "joy-something: no joysticks found" and "joy-something.o:
   init_module: Device or resource busy." or "Initialization of joy-something
   failed"  What could be the cause?
A: The most common cause is that the joystick port on your soundcard is
   not enabled. If it is an ISA PnP card, you'll need isapnptools to configure
   the gameport. Non-PnP cards usually use some option to the sound driver -
   see the sound driver docs and source and enable the port. Note that in case
   of a PnP card you have to load the joystick driver as a module after running
   the isapnp command, it will not work in the opposite order.

Q: Any access to the joystick devices gives me "Operation not supported by
   device". What am I doing wrong?
A: You're running a 2.0 kernel and you forgot to insmod the hardware
   specific module. You not only need the joystick.o, but also one of the other
   joy-*.o files (most usually joy-analog.o), as described in this document,
   section 2. If you are not using modules, then you didn't say 'Y' to any of
   the hardware-specific questions. Again, see section 2. If you did select
   the specific support, and you still get this message, check that you
   selected the right one, and if it still doesn't work, go to the previous
   FAQ.

Q: Everything is fine, except I get "No such device" error when I try to
   do anything with /dev/js0. What's the cause?
A: You're running a 2.1 or 2.2. kernel and you want to read the previous FAQ.

Q: Upon 'insmod joystick.o' I get a LOT of unresolved symbols, including
   'printk' and others. Why?
A: You either don't have your kernel compiled with module support. If
   that's the cause, re-compile your kernel with module support switched on.
   Or, you use versioned symbols, and don't have -DMODVERSIONS in the joystick
   driver Makefile, or vice versa. Correct the situation by either removing or
   adding -DMODVERSIONS to the Makefile.

Q: Upon 'insmod joy-something' I get a bunch of unresolved symbols, like
   'js_register_port, js_unregister device' and others. What's wrong?
A: You need to 'insmod joystick.o' first.

Q: Running 'jstest 1' or 'jscal 1' doesn't work, and returns with "File
   not found" error. What is the problem?
A: The command line interface for these tools is different from what
   version 0.8.0 used. You have to specify the whole device name, eg. 'jstest
   /dev/js0'.

Q: Running 'jstest /dev/js0' results in "File not found" error. What's the
   cause?
A: The device files don't exist. Run 'make devs'.

Q: Is it possible to connect my old Atari/Commodore/Amiga/console joystick
   or pad that uses a 9-pin D-type cannon connector to the serial port of my
   PC?
A: Yes, it is possible, but it'll burn your serial port or the pad. It
   won't work, of course.

Q: My joystick doesn't work with Quake / Quake 2. What's the cause?
A: Quake / Quake 2 don't support joystick. Use joy2key to simulate keypresses
   for them.

6. Programming Interface
~~~~~~~~~~~~~~~~~~~~~~~~
  The 1.0 driver uses a new, event based approach to the joystick driver.
Instead of the user program polling for the joystick values, the joystick
driver now reports only any changes of its state. See joystick-api.txt,
joystick.h and jstest.c included in the joystick package for more
information. The joystick device can be used in either blocking or
nonblocking mode and supports select() calls.

  For backward compatibility the old (v0.x) interface is still included.
Any call to the joystick driver using the old interface will return values
that are compatible to the old interface.  This interface is still limited
to 2 axes, and applications using it usually decode only 2 buttons, although
the driver provides up to 32.

7. Credits
~~~~~~~~~~
  Thanks to the following people who contributed code, ideas or specifications
to the joystick driver development:

	Arthur C. Smith		<asmith@cbnewsd.att.com>
	Eyal Lebedinsky		<eyal@eyal.emu.id.au>
	Jeff Tranter		<tranter@software.mitel.com>
	Carlos Puchol		<cpg@cs.utexas.edu>
	Matt Rhoten		<mrhoten@oz.net>
	Dan Fandrich		<dan@fch.wimsey.bc.ca>
	Sverker Wilberg		<sverkerw@manila.docs.uu.se>
	Hal Maney		<maney@norden.com>
	Bernd Schmidt		<crux@pool.informatik.rwth-aachen.de>
	Alan Cox		<alan@lxorguk.ukuu.org.uk>
	John Markus Bjorndalen	<johnm@cs.uit.no>
	Boris Muehmer		<mhs@cybernet-ag.de>
	Robert W. Grubbs	<rwgrubbs@vt.edu>
	Pete Chown		<pete.chown@skygate.co.uk>
	Benji York		<benji@cookeville.com>
	Leslie F. Donaldson	<donaldlf@cs.rose-hulman.edu>
	Eng-Jon Ong		<ongej@dcs.qmw.ac.uk>
	Ragnar Hojland Espinosa	<ragnar@lightside.ddns.org>
	Brian Gerst		<bgerst@quark.vpplus.com>
	Andree Borrmann		<a.borrmann@tu-bs.de>
	Martin Giguere		<zefrench@hotmail.com>
	David Thompson		<dcthomp@mail.utexas.edu>
	Justin Wake		<spectre@telefragged.com>
	Benoit Triquet		<benoit@adsl-216-100-248-201.dsl.pacbell.net>
	John Dahlstrom		<jodaman@bradley.edu>
	Dan Gohman		<gohmandj@mrs.umn.edu>
	Joe Krahn		<krahn@niehs.nih.gov>
	David Kuder		<alphagod@penguinpowered.com>
	Raymond Ingles		<sorceror@tir.com>

  If you think you should be in this list and are not, it's possible that
I forgot to include you - contact me and I'll correct the error. :)

  Thanks to KYE Systems Europe, who provided me with driver sources for the
Genius Flight2000 Digital F-23, which happens to be identical (in software)
to Microsoft SideWinder 3D Pro.

  Thanks to ThrustMaster Inc. who provided me with docs for their digital
protocol specifications, and to Trystan A Larey-Williams <axe@mail.wsu.edu>,
who wrote an attempt of a driver for them.

  Thanks to Creative Labs Europe, and Ifor Powell <ipowell@cle.creaf.com>,
who provided me with docs for their first generation Blaster GamePad.

  Special thanks go to FP-Gaming, Inc. and James C Barnes <james@fpgaming.com>,
who provided me with help and detailed information about the Assassin 3D
protocol and devices, and even sent me a Panther and Panther XL for testing,
along with cool T-shirts.

  Special thanks to PDPI, Mike Pelkey <pdpi@email.msn.com> and Brand Kvavle
<BrandK@blackdiamond.com>, for providing me with documentation and example
code for their L4 gamecard, and sending me the card to test my driver with
it.

  Thanks to LogiCad3D for their support, for having the specifications
online and for the nice music on their telephone.

  Special thanks to Logitech, Jerry de Raad <Jerry_de_Raad@logitech.com>,
Thomas Burgel <Thomas_Burgel@logitech.com>, Avinash Shinde
<Avinash_Shinde@logitech.com> for providing me with a lot of documentation
for their devices, and also for a big box, containing a CyberMan2, Wingman
Extreme, Magellan, Wingman Warrior, two MouseMan mice, and a NewTouch
keyboard.

  Thanks to everyone else who helped me develop this package of drivers!

  No thanks to Microsoft and Gravis, who don't release a word about their
hardware .... :(

8. ChangeLog
~~~~~~~~~~~~
  See the ChangeLog file for the log of changes.

9. To do
~~~~~~~~
  See the TODO file for the list of things planned.