Mercurial > sdl-ios-xcode
annotate src/joystick/linux/SDL_sysjoystick.c @ 914:bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
From: Chris Nelson
Subject: [SDL] [Patch] WiseGroup MP-8800 / MP-8866 (PS2 Joystick)
In the current cvs version, SDL doesn't handle these Playstation2
controller => USB adapters correctly, in linux.
It will always assume that the maximum number of joysticks (2 in the
case of the MP-8866, 4 in the case of the 8800) are plugged in. This is
bad not only because it allows SDL to exaggerate the number of logical
joysticks, but primarily because the joystick axes are mapped
incorrectly, all over the place, such that the devices are effectively
unusable unless you have the maximum number of joysticks plugged in.
My changes to src/joystick/linux/SDL_sysjoystick.c build on another's
previous work (which was a special case for this very joystick,
actually), and fix both of these problems, as well as making the current
code a little more general, to allow for others to more easily drop in
code for quirky joysticks such as these.
I've tested this code under 2.6.7 as well as 2.4.24... Both work as
advertised (provided you load the JOYDEV linux code as a module,
otherwise they won't work at all, new code or old, but that's another
issue entirely).
Though this sounds horribly formal, you have my permission to distribute
all of my work on this issue under the LGPL. So there.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 25 Jul 2004 18:31:50 +0000 |
parents | b56dc586a5ef |
children | cb5e1d0cad31 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
769
b8d311d90021
Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents:
589
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Library General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2 of the License, or (at your option) any later version. | |
9 | |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 Library General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Library General Public | |
16 License along with this library; if not, write to the Free | |
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
245
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #ifdef SAVE_RCSID | |
24 static char rcsid = | |
25 "@(#) $Id$"; | |
26 #endif | |
27 | |
28 /* This is the system specific header for the SDL joystick API */ | |
29 | |
30 #include <stdio.h> /* For the definition of NULL */ | |
31 #include <stdlib.h> /* For getenv() prototype */ | |
32 #include <string.h> | |
33 #include <sys/stat.h> | |
34 #include <unistd.h> | |
35 #include <fcntl.h> | |
36 #include <sys/ioctl.h> | |
37 #include <limits.h> /* For the definition of PATH_MAX */ | |
377
f6987c9f04e4
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
38 #ifdef __arm__ |
f6987c9f04e4
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
39 #include <linux/limits.h> /* Arm cross-compiler needs this */ |
f6987c9f04e4
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
40 #endif |
0 | 41 #include <linux/joystick.h> |
42 #ifdef USE_INPUT_EVENTS | |
43 #include <linux/input.h> | |
44 #endif | |
45 | |
46 #include "SDL_error.h" | |
47 #include "SDL_joystick.h" | |
48 #include "SDL_sysjoystick.h" | |
49 #include "SDL_joystick_c.h" | |
50 | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
51 /* Special joystick configurations */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
52 static struct { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
53 const char *name; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
54 int naxes; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
55 int nhats; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
56 int nballs; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
57 } special_joysticks[] = { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
58 { "MadCatz Panther XL", 3, 2, 1 }, /* We don't handle rudder (axis 8) */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
59 { "SideWinder Precision Pro", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
60 { "SideWinder 3D Pro", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
61 { "Microsoft SideWinder 3D Pro", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
62 { "Microsoft SideWinder Dual Strike USB version 1.0", 2, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
63 { "WingMan Interceptor", 3, 3, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
64 { "WingMan Extreme Digital 3D", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
65 { "Microsoft SideWinder Precision 2 Joystick", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
66 { "Logitech Inc. WingMan Extreme Digital 3D", 4, 1, 0 }, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
67 { "Saitek Saitek X45", 6, 1, 0 } |
0 | 68 }; |
69 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
70 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
71 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
72 /* |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
73 Some USB HIDs show up as a single joystick even though they actually |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
74 control 2 or more joysticks. |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
75 */ |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
76 /* |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
77 This code handles the MP-8800 (Quad) and MP-8866 (Dual), which can |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
78 be identified by their transparent blue design. It's quite trivial |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
79 to add other joysticks with similar quirky behavior. |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
80 -id |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
81 */ |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
82 |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
83 struct joystick_logical_mapping { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
84 int njoy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
85 int nthing; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
86 }; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
87 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
88 /* |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
89 {logical joy, logical axis}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
90 {logical joy, logical hat}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
91 {logical joy, logical ball}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
92 {logical joy, logical button} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
93 */ |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
94 |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
95 static struct joystick_logical_mapping mp88xx_1_logical_axismap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
96 {0,0},{0,1},{0,2},{0,3},{0,4},{0,5} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
97 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
98 static struct joystick_logical_mapping mp88xx_1_logical_buttonmap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
99 {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,11} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
100 }; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
101 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
102 static struct joystick_logical_mapping mp88xx_2_logical_axismap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
103 {0,0},{0,1},{0,2},{1,0},{1,1},{0,3}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
104 {1,2},{1,3},{0,4},{0,5},{1,4},{1,5} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
105 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
106 static struct joystick_logical_mapping mp88xx_2_logical_buttonmap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
107 {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,11}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
108 {1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
109 }; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
110 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
111 static struct joystick_logical_mapping mp88xx_3_logical_axismap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
112 {0,0},{0,1},{0,2},{1,0},{1,1},{0,3}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
113 {1,2},{1,3},{2,0},{2,1},{2,2},{2,3}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
114 {0,4},{0,5},{1,4},{1,5},{2,4},{2,5} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
115 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
116 static struct joystick_logical_mapping mp88xx_3_logical_buttonmap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
117 {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,11}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
118 {1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
119 {2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
120 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
121 |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
122 static struct joystick_logical_mapping mp88xx_4_logical_axismap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
123 {0,0},{0,1},{0,2},{1,0},{1,1},{0,3}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
124 {1,2},{1,3},{2,0},{2,1},{2,2},{2,3}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
125 {3,0},{3,1},{3,2},{3,3},{0,4},{0,5}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
126 {1,4},{1,5},{2,4},{2,5},{3,4},{3,5} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
127 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
128 static struct joystick_logical_mapping mp88xx_4_logical_buttonmap[] = { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
129 {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,11}, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
130 {1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
131 {2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
132 {3,0},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{3,7},{3,8},{3,9},{3,10},{3,11} |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
133 }; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
134 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
135 struct joystick_logical_layout { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
136 int naxes; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
137 int nhats; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
138 int nballs; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
139 int nbuttons; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
140 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
141 |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
142 static struct joystick_logical_layout mp88xx_1_logical_layout[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
143 {6, 0, 0, 12} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
144 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
145 static struct joystick_logical_layout mp88xx_2_logical_layout[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
146 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
147 {6, 0, 0, 12} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
148 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
149 static struct joystick_logical_layout mp88xx_3_logical_layout[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
150 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
151 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
152 {6, 0, 0, 12} |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
153 }; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
154 static struct joystick_logical_layout mp88xx_4_logical_layout[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
155 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
156 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
157 {6, 0, 0, 12}, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
158 {6, 0, 0, 12} |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
159 }; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
160 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
161 /* |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
162 This array sets up a means of mapping a single physical joystick to |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
163 multiple logical joysticks. (djm) |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
164 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
165 njoys |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
166 the number of logical joysticks |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
167 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
168 layouts |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
169 an array of layout structures, one to describe each logical joystick |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
170 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
171 axes, hats, balls, buttons |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
172 arrays that map a physical thingy to a logical thingy |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
173 */ |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
174 struct joystick_logicalmap { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
175 const char *name; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
176 int nbuttons; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
177 int njoys; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
178 struct joystick_logical_layout *layout; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
179 struct joystick_logical_mapping *axismap; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
180 struct joystick_logical_mapping *hatmap; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
181 struct joystick_logical_mapping *ballmap; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
182 struct joystick_logical_mapping *buttonmap; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
183 }; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
184 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
185 static struct joystick_logicalmap joystick_logicalmap[] = { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
186 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
187 "WiseGroup.,Ltd MP-8866 Dual USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
188 12, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
189 1, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
190 mp88xx_1_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
191 mp88xx_1_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
192 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
193 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
194 mp88xx_1_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
195 }, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
196 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
197 "WiseGroup.,Ltd MP-8866 Dual USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
198 24, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
199 2, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
200 mp88xx_2_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
201 mp88xx_2_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
202 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
203 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
204 mp88xx_2_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
205 }, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
206 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
207 "WiseGroup.,Ltd MP-8800 Quad USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
208 12, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
209 1, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
210 mp88xx_1_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
211 mp88xx_1_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
212 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
213 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
214 mp88xx_1_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
215 }, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
216 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
217 "WiseGroup.,Ltd MP-8800 Quad USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
218 24, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
219 2, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
220 mp88xx_2_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
221 mp88xx_2_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
222 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
223 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
224 mp88xx_2_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
225 }, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
226 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
227 "WiseGroup.,Ltd MP-8800 Quad USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
228 36, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
229 3, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
230 mp88xx_3_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
231 mp88xx_3_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
232 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
233 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
234 mp88xx_3_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
235 }, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
236 { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
237 "WiseGroup.,Ltd MP-8800 Quad USB Joypad", |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
238 48, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
239 4, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
240 mp88xx_4_logical_layout, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
241 mp88xx_4_logical_axismap, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
242 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
243 NULL, |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
244 mp88xx_4_logical_buttonmap |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
245 } |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
246 }; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
247 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
248 /* find the head of a linked list, given a point in it |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
249 */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
250 #define SDL_joylist_head(i, start)\ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
251 for(i = start; SDL_joylist[i].fname == NULL;) i = SDL_joylist[i].prev; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
252 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
253 #define SDL_logical_joydecl(d) d |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
254 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
255 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
256 #else |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
257 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
258 #define SDL_logical_joydecl(d) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
259 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
260 #endif /* USE_LOGICAL_JOYSTICKS */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
261 |
0 | 262 /* The maximum number of joysticks we'll detect */ |
263 #define MAX_JOYSTICKS 32 | |
264 | |
265 /* A list of available joysticks */ | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
266 static struct |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
267 { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
268 char* fname; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
269 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
270 SDL_Joystick* joy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
271 struct joystick_logicalmap* map; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
272 int prev; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
273 int next; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
274 int logicalno; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
275 #endif /* USE_LOGICAL_JOYSTICKS */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
276 } SDL_joylist[MAX_JOYSTICKS]; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
277 |
0 | 278 |
279 /* The private structure used to keep track of a joystick */ | |
280 struct joystick_hwdata { | |
281 int fd; | |
282 /* The current linux joystick driver maps hats to two axes */ | |
283 struct hwdata_hat { | |
284 int axis[2]; | |
285 } *hats; | |
286 /* The current linux joystick driver maps balls to two axes */ | |
287 struct hwdata_ball { | |
288 int axis[2]; | |
289 } *balls; | |
290 | |
291 /* Support for the Linux 2.4 unified input interface */ | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
292 #ifdef USE_INPUT_EVENTS |
0 | 293 SDL_bool is_hid; |
294 Uint8 key_map[KEY_MAX-BTN_MISC]; | |
295 Uint8 abs_map[ABS_MAX]; | |
296 struct axis_correct { | |
297 int used; | |
298 int coef[3]; | |
299 } abs_correct[ABS_MAX]; | |
300 #endif | |
301 }; | |
302 | |
303 static char *mystrdup(const char *string) | |
304 { | |
305 char *newstring; | |
306 | |
307 newstring = (char *)malloc(strlen(string)+1); | |
308 if ( newstring ) { | |
309 strcpy(newstring, string); | |
310 } | |
311 return(newstring); | |
312 } | |
313 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
314 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
315 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
316 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
317 static int CountLogicalJoysticks(int max) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
318 { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
319 register int i, j, k, ret, prev; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
320 const char* name; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
321 int nbuttons, fd; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
322 unsigned char n; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
323 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
324 ret = 0; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
325 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
326 for(i = 0; i < max; i++) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
327 name = SDL_SYS_JoystickName(i); |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
328 |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
329 fd = open(SDL_joylist[i].fname, O_RDONLY, 0); |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
330 if ( fd >= 0 ) { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
331 if ( ioctl(fd, JSIOCGBUTTONS, &n) < 0 ) { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
332 nbuttons = -1; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
333 } else { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
334 nbuttons = n; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
335 } |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
336 close(fd); |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
337 } |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
338 else { |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
339 nbuttons=-1; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
340 } |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
341 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
342 if (name) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
343 for(j = 0; j < SDL_TABLESIZE(joystick_logicalmap); j++) { |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
344 if (!strcmp(name, joystick_logicalmap[j].name) && (nbuttons==-1 || nbuttons==joystick_logicalmap[j].nbuttons)) { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
345 prev = i; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
346 SDL_joylist[prev].map = &(joystick_logicalmap[j]); |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
347 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
348 for(k = 1; k < joystick_logicalmap[j].njoys; k++) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
349 SDL_joylist[prev].next = max + ret; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
350 SDL_joylist[max+ret].prev = prev; |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
351 |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
352 prev = max + ret; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
353 SDL_joylist[prev].logicalno = k; |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
354 SDL_joylist[prev].map = &(joystick_logicalmap[j]); |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
355 ret++; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
356 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
357 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
358 break; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
359 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
360 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
361 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
362 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
363 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
364 return ret; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
365 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
366 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
367 static void LogicalSuffix(int logicalno, char* namebuf, int len) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
368 { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
369 register int slen; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
370 const static char suffixs[] = |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
371 "01020304050607080910111213141516171819" |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
372 "20212223242526272829303132"; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
373 const char* suffix; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
374 slen = strlen(namebuf); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
375 suffix = NULL; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
376 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
377 if (logicalno*2<sizeof(suffixs)) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
378 suffix = suffixs + (logicalno*2); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
379 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
380 if (slen + 4 < len && suffix) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
381 namebuf[slen++] = ' '; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
382 namebuf[slen++] = '#'; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
383 namebuf[slen++] = suffix[0]; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
384 namebuf[slen++] = suffix[1]; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
385 namebuf[slen++] = 0; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
386 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
387 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
388 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
389 #endif /* USE_LOGICAL_JOYSTICKS */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
390 |
0 | 391 #ifdef USE_INPUT_EVENTS |
392 #define test_bit(nr, addr) \ | |
393 (((1UL << ((nr) & 31)) & (((const unsigned int *) addr)[(nr) >> 5])) != 0) | |
394 | |
395 static int EV_IsJoystick(int fd) | |
396 { | |
397 unsigned long evbit[40]; | |
398 unsigned long keybit[40]; | |
399 unsigned long absbit[40]; | |
400 | |
401 if ( (ioctl(fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) || | |
402 (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) || | |
403 (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0) ) { | |
404 return(0); | |
405 } | |
406 if (!(test_bit(EV_KEY, evbit) && test_bit(EV_ABS, evbit) && | |
407 test_bit(ABS_X, absbit) && test_bit(ABS_Y, absbit) && | |
408 (test_bit(BTN_TRIGGER, keybit) || test_bit(BTN_A, keybit) || test_bit(BTN_1, keybit)))) return 0; | |
409 return(1); | |
410 } | |
411 | |
412 #endif /* USE_INPUT_EVENTS */ | |
413 | |
414 /* Function to scan the system for joysticks */ | |
415 int SDL_SYS_JoystickInit(void) | |
416 { | |
417 /* The base path of the joystick devices */ | |
245
ab781a7dd82f
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
221
diff
changeset
|
418 const char *joydev_pattern[] = { |
0 | 419 #ifdef USE_INPUT_EVENTS |
245
ab781a7dd82f
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
221
diff
changeset
|
420 "/dev/input/event%d", |
211
0cc95f442f3a
If we're looking at the /dev/input event devices, and we found
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
421 #endif |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
422 "/dev/input/js%d", |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
423 "/dev/js%d" |
0 | 424 }; |
425 int numjoysticks; | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
426 int i, j; |
0 | 427 int fd; |
428 char path[PATH_MAX]; | |
429 dev_t dev_nums[MAX_JOYSTICKS]; /* major/minor device numbers */ | |
430 struct stat sb; | |
431 int n, duplicate; | |
432 | |
433 numjoysticks = 0; | |
434 | |
435 /* First see if the user specified a joystick to use */ | |
436 if ( getenv("SDL_JOYSTICK_DEVICE") != NULL ) { | |
437 strncpy(path, getenv("SDL_JOYSTICK_DEVICE"), sizeof(path)); | |
438 path[sizeof(path)-1] = '\0'; | |
439 if ( stat(path, &sb) == 0 ) { | |
440 fd = open(path, O_RDONLY, 0); | |
441 if ( fd >= 0 ) { | |
442 /* Assume the user knows what they're doing. */ | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
443 SDL_joylist[numjoysticks].fname =mystrdup(path); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
444 if ( SDL_joylist[numjoysticks].fname ) { |
0 | 445 dev_nums[numjoysticks] = sb.st_rdev; |
446 ++numjoysticks; | |
447 } | |
448 close(fd); | |
449 } | |
450 } | |
451 } | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
452 |
0 | 453 for ( i=0; i<SDL_TABLESIZE(joydev_pattern); ++i ) { |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
454 for ( j=0; j < MAX_JOYSTICKS; ++j ) { |
0 | 455 sprintf(path, joydev_pattern[i], j); |
456 | |
457 /* rcg06302000 replaced access(F_OK) call with stat(). | |
458 * stat() will fail if the file doesn't exist, so it's | |
459 * equivalent behaviour. | |
460 */ | |
461 if ( stat(path, &sb) == 0 ) { | |
462 /* Check to make sure it's not already in list. | |
463 * This happens when we see a stick via symlink. | |
464 */ | |
465 duplicate = 0; | |
466 for (n=0; (n<numjoysticks) && !duplicate; ++n) { | |
467 if ( sb.st_rdev == dev_nums[n] ) { | |
468 duplicate = 1; | |
469 } | |
470 } | |
471 if (duplicate) { | |
472 continue; | |
473 } | |
474 | |
475 fd = open(path, O_RDONLY, 0); | |
476 if ( fd < 0 ) { | |
477 continue; | |
478 } | |
479 #ifdef USE_INPUT_EVENTS | |
480 #ifdef DEBUG_INPUT_EVENTS | |
481 printf("Checking %s\n", path); | |
482 #endif | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
483 if ( (i == 0) && ! EV_IsJoystick(fd) ) { |
0 | 484 close(fd); |
485 continue; | |
486 } | |
487 #endif | |
488 close(fd); | |
489 | |
490 /* We're fine, add this joystick */ | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
491 SDL_joylist[numjoysticks].fname =mystrdup(path); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
492 if ( SDL_joylist[numjoysticks].fname ) { |
0 | 493 dev_nums[numjoysticks] = sb.st_rdev; |
494 ++numjoysticks; | |
495 } | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
496 } else |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
497 break; |
0 | 498 } |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
499 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
500 #ifdef USE_INPUT_EVENTS |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
501 /* This is a special case... |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
502 If the event devices are valid then the joystick devices |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
503 will be duplicates but without extra information about their |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
504 hats or balls. Unfortunately, the event devices can't |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
505 currently be calibrated, so it's a win-lose situation. |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
506 So : /dev/input/eventX = /dev/input/jsY = /dev/jsY |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
507 */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
508 if ( (i == 0) && (numjoysticks > 0) ) |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
509 break; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
510 #endif |
0 | 511 } |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
512 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
513 numjoysticks += CountLogicalJoysticks(numjoysticks); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
514 #endif |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
515 |
0 | 516 return(numjoysticks); |
517 } | |
518 | |
519 /* Function to get the device-dependent name of a joystick */ | |
520 const char *SDL_SYS_JoystickName(int index) | |
521 { | |
522 int fd; | |
523 static char namebuf[128]; | |
524 char *name; | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
525 SDL_logical_joydecl(int oindex = index); |
0 | 526 |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
527 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
528 SDL_joylist_head(index, index); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
529 #endif |
0 | 530 name = NULL; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
531 fd = open(SDL_joylist[index].fname, O_RDONLY, 0); |
0 | 532 if ( fd >= 0 ) { |
533 if ( | |
534 #ifdef USE_INPUT_EVENTS | |
535 (ioctl(fd, EVIOCGNAME(sizeof(namebuf)), namebuf) <= 0) && | |
536 #endif | |
537 (ioctl(fd, JSIOCGNAME(sizeof(namebuf)), namebuf) <= 0) ) { | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
538 name = SDL_joylist[index].fname; |
0 | 539 } else { |
540 name = namebuf; | |
541 } | |
542 close(fd); | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
543 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
544 |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
545 #ifndef NO_LOGICAL_JOYSTICKS |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
546 if (SDL_joylist[oindex].prev || SDL_joylist[oindex].next || index!=oindex) |
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
547 { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
548 LogicalSuffix(SDL_joylist[oindex].logicalno, namebuf, 128); |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
549 } |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
550 #endif |
0 | 551 } |
552 return name; | |
553 } | |
554 | |
555 static int allocate_hatdata(SDL_Joystick *joystick) | |
556 { | |
557 int i; | |
558 | |
559 joystick->hwdata->hats = (struct hwdata_hat *)malloc( | |
560 joystick->nhats * sizeof(struct hwdata_hat)); | |
561 if ( joystick->hwdata->hats == NULL ) { | |
562 return(-1); | |
563 } | |
564 for ( i=0; i<joystick->nhats; ++i ) { | |
565 joystick->hwdata->hats[i].axis[0] = 1; | |
566 joystick->hwdata->hats[i].axis[1] = 1; | |
567 } | |
568 return(0); | |
569 } | |
570 | |
571 static int allocate_balldata(SDL_Joystick *joystick) | |
572 { | |
573 int i; | |
574 | |
575 joystick->hwdata->balls = (struct hwdata_ball *)malloc( | |
576 joystick->nballs * sizeof(struct hwdata_ball)); | |
577 if ( joystick->hwdata->balls == NULL ) { | |
578 return(-1); | |
579 } | |
580 for ( i=0; i<joystick->nballs; ++i ) { | |
581 joystick->hwdata->balls[i].axis[0] = 0; | |
582 joystick->hwdata->balls[i].axis[1] = 0; | |
583 } | |
584 return(0); | |
585 } | |
586 | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
587 static SDL_bool JS_ConfigJoystick(SDL_Joystick *joystick, int fd) |
0 | 588 { |
589 SDL_bool handled; | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
590 unsigned char n; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
591 int old_axes, tmp_naxes, tmp_nhats, tmp_nballs; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
592 const char *name; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
593 char *env, env_name[128]; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
594 int i; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
595 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
596 handled = SDL_FALSE; |
0 | 597 |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
598 /* Default joystick device settings */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
599 if ( ioctl(fd, JSIOCGAXES, &n) < 0 ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
600 joystick->naxes = 2; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
601 } else { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
602 joystick->naxes = n; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
603 } |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
604 if ( ioctl(fd, JSIOCGBUTTONS, &n) < 0 ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
605 joystick->nbuttons = 2; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
606 } else { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
607 joystick->nbuttons = n; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
608 } |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
609 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
610 name = SDL_SYS_JoystickName(joystick->index); |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
611 old_axes = joystick->naxes; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
612 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
613 /* Generic analog joystick support */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
614 if ( strstr(name, "Analog") == name && strstr(name, "-hat") ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
615 if ( sscanf(name,"Analog %d-axis %*d-button %d-hat", |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
616 &tmp_naxes, &tmp_nhats) == 2 ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
617 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
618 joystick->naxes = tmp_naxes; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
619 joystick->nhats = tmp_nhats; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
620 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
621 handled = SDL_TRUE; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
622 } |
0 | 623 } |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
624 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
625 /* Special joystick support */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
626 for ( i=0; i < SDL_TABLESIZE(special_joysticks); ++i ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
627 if ( strcmp(name, special_joysticks[i].name) == 0 ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
628 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
629 joystick->naxes = special_joysticks[i].naxes; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
630 joystick->nhats = special_joysticks[i].nhats; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
631 joystick->nballs = special_joysticks[i].nballs; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
632 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
633 handled = SDL_TRUE; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
634 break; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
635 } |
0 | 636 } |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
637 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
638 /* User environment joystick support */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
639 if ( (env = getenv("SDL_LINUX_JOYSTICK")) ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
640 strcpy(env_name, ""); |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
641 if ( *env == '\'' && sscanf(env, "'%[^']s'", env_name) == 1 ) |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
642 env += strlen(env_name)+2; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
643 else if ( sscanf(env, "%s", env_name) == 1 ) |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
644 env += strlen(env_name); |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
645 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
646 if ( strcmp(name, env_name) == 0 ) { |
0 | 647 |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
648 if ( sscanf(env, "%d %d %d", &tmp_naxes, &tmp_nhats, |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
649 &tmp_nballs) == 3 ) { |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
650 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
651 joystick->naxes = tmp_naxes; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
652 joystick->nhats = tmp_nhats; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
653 joystick->nballs = tmp_nballs; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
654 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
655 handled = SDL_TRUE; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
656 } |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
657 } |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
658 } |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
659 |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
660 /* Remap hats and balls */ |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
661 if (handled) { |
0 | 662 if ( joystick->nhats > 0 ) { |
589
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
663 if ( allocate_hatdata(joystick) < 0 ) { |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
664 joystick->nhats = 0; |
0 | 665 } |
666 } | |
667 if ( joystick->nballs > 0 ) { | |
668 if ( allocate_balldata(joystick) < 0 ) { | |
669 joystick->nballs = 0; | |
670 } | |
671 } | |
672 } | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
673 |
0 | 674 return(handled); |
675 } | |
676 | |
677 #ifdef USE_INPUT_EVENTS | |
678 | |
679 static SDL_bool EV_ConfigJoystick(SDL_Joystick *joystick, int fd) | |
680 { | |
871 | 681 int i, t; |
0 | 682 unsigned long keybit[40]; |
683 unsigned long absbit[40]; | |
684 unsigned long relbit[40]; | |
685 | |
686 /* See if this device uses the new unified event API */ | |
687 if ( (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) >= 0) && | |
688 (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) >= 0) && | |
689 (ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relbit)), relbit) >= 0) ) { | |
690 joystick->hwdata->is_hid = SDL_TRUE; | |
691 | |
692 /* Get the number of buttons, axes, and other thingamajigs */ | |
693 for ( i=BTN_JOYSTICK; i < KEY_MAX; ++i ) { | |
694 if ( test_bit(i, keybit) ) { | |
695 #ifdef DEBUG_INPUT_EVENTS | |
696 printf("Joystick has button: 0x%x\n", i); | |
697 #endif | |
698 joystick->hwdata->key_map[i-BTN_MISC] = | |
699 joystick->nbuttons; | |
700 ++joystick->nbuttons; | |
701 } | |
702 } | |
703 for ( i=BTN_MISC; i < BTN_JOYSTICK; ++i ) { | |
704 if ( test_bit(i, keybit) ) { | |
705 #ifdef DEBUG_INPUT_EVENTS | |
706 printf("Joystick has button: 0x%x\n", i); | |
707 #endif | |
708 joystick->hwdata->key_map[i-BTN_MISC] = | |
709 joystick->nbuttons; | |
710 ++joystick->nbuttons; | |
711 } | |
712 } | |
713 for ( i=0; i<ABS_MAX; ++i ) { | |
714 /* Skip hats */ | |
715 if ( i == ABS_HAT0X ) { | |
716 i = ABS_HAT3Y; | |
717 continue; | |
718 } | |
719 if ( test_bit(i, absbit) ) { | |
720 int values[5]; | |
721 | |
896
b56dc586a5ef
Date: Tue, 16 Mar 2004 12:40:33 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
892
diff
changeset
|
722 if ( ioctl(fd, EVIOCGABS(i), values) < 0 ) |
b56dc586a5ef
Date: Tue, 16 Mar 2004 12:40:33 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
892
diff
changeset
|
723 continue; |
0 | 724 #ifdef DEBUG_INPUT_EVENTS |
725 printf("Joystick has absolute axis: %x\n", i); | |
726 printf("Values = { %d, %d, %d, %d, %d }\n", | |
727 values[0], values[1], | |
728 values[2], values[3], values[4]); | |
729 #endif /* DEBUG_INPUT_EVENTS */ | |
730 joystick->hwdata->abs_map[i] = joystick->naxes; | |
731 if ( values[1] == values[2] ) { | |
732 joystick->hwdata->abs_correct[i].used = 0; | |
733 } else { | |
734 joystick->hwdata->abs_correct[i].used = 1; | |
872
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
735 joystick->hwdata->abs_correct[i].coef[0] = |
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
736 (values[2] + values[1]) / 2 - values[4]; |
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
737 joystick->hwdata->abs_correct[i].coef[1] = |
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
738 (values[2] + values[1]) / 2 + values[4]; |
871 | 739 t = ((values[2] - values[1]) / 2 - 2 * values[4]); |
740 if ( t != 0 ) { | |
741 joystick->hwdata->abs_correct[i].coef[2] = (1 << 29) / t; | |
872
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
742 } else { |
e7be95d758e8
Date: Fri, 05 Mar 2004 16:08:01 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
871
diff
changeset
|
743 joystick->hwdata->abs_correct[i].coef[2] = 0; |
871 | 744 } |
0 | 745 } |
746 ++joystick->naxes; | |
747 } | |
748 } | |
749 for ( i=ABS_HAT0X; i <= ABS_HAT3Y; i += 2 ) { | |
750 if ( test_bit(i, absbit) || test_bit(i+1, absbit) ) { | |
751 #ifdef DEBUG_INPUT_EVENTS | |
752 printf("Joystick has hat %d\n",(i-ABS_HAT0X)/2); | |
753 #endif | |
754 ++joystick->nhats; | |
755 } | |
756 } | |
757 if ( test_bit(REL_X, relbit) || test_bit(REL_Y, relbit) ) { | |
758 ++joystick->nballs; | |
759 } | |
760 | |
761 /* Allocate data to keep track of these thingamajigs */ | |
762 if ( joystick->nhats > 0 ) { | |
763 if ( allocate_hatdata(joystick) < 0 ) { | |
764 joystick->nhats = 0; | |
765 } | |
766 } | |
767 if ( joystick->nballs > 0 ) { | |
768 if ( allocate_balldata(joystick) < 0 ) { | |
769 joystick->nballs = 0; | |
770 } | |
771 } | |
772 } | |
773 return(joystick->hwdata->is_hid); | |
774 } | |
775 | |
776 #endif /* USE_INPUT_EVENTS */ | |
777 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
778 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
779 static void ConfigLogicalJoystick(SDL_Joystick *joystick) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
780 { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
781 struct joystick_logical_layout* layout; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
782 |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
783 layout = SDL_joylist[joystick->index].map->layout + |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
784 SDL_joylist[joystick->index].logicalno; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
785 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
786 joystick->nbuttons = layout->nbuttons; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
787 joystick->nhats = layout->nhats; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
788 joystick->naxes = layout->naxes; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
789 joystick->nballs = layout->nballs; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
790 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
791 #endif |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
792 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
793 |
0 | 794 /* Function to open a joystick for use. |
795 The joystick to open is specified by the index field of the joystick. | |
796 This should fill the nbuttons and naxes fields of the joystick structure. | |
797 It returns 0, or -1 if there is an error. | |
798 */ | |
799 int SDL_SYS_JoystickOpen(SDL_Joystick *joystick) | |
800 { | |
801 int fd; | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
802 SDL_logical_joydecl(int realindex); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
803 SDL_logical_joydecl(SDL_Joystick *realjoy = NULL); |
0 | 804 |
805 /* Open the joystick and set the joystick file descriptor */ | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
806 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
807 if (SDL_joylist[joystick->index].fname == NULL) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
808 SDL_joylist_head(realindex, joystick->index); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
809 realjoy = SDL_JoystickOpen(realindex); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
810 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
811 if (realjoy == NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
812 return(-1); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
813 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
814 fd = realjoy->hwdata->fd; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
815 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
816 } else { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
817 fd = open(SDL_joylist[joystick->index].fname, O_RDONLY, 0); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
818 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
819 SDL_joylist[joystick->index].joy = joystick; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
820 #else |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
821 fd = open(SDL_joylist[joystick->index].fname, O_RDONLY, 0); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
822 #endif |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
823 |
0 | 824 if ( fd < 0 ) { |
825 SDL_SetError("Unable to open %s\n", | |
826 SDL_joylist[joystick->index]); | |
827 return(-1); | |
828 } | |
829 joystick->hwdata = (struct joystick_hwdata *) | |
830 malloc(sizeof(*joystick->hwdata)); | |
831 if ( joystick->hwdata == NULL ) { | |
832 SDL_OutOfMemory(); | |
833 close(fd); | |
834 return(-1); | |
835 } | |
836 memset(joystick->hwdata, 0, sizeof(*joystick->hwdata)); | |
837 joystick->hwdata->fd = fd; | |
838 | |
839 /* Set the joystick to non-blocking read mode */ | |
840 fcntl(fd, F_SETFL, O_NONBLOCK); | |
841 | |
842 /* Get the number of buttons and axes on the joystick */ | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
843 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
844 if (realjoy) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
845 ConfigLogicalJoystick(joystick); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
846 else |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
847 #endif |
0 | 848 #ifdef USE_INPUT_EVENTS |
849 if ( ! EV_ConfigJoystick(joystick, fd) ) | |
850 #endif | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
851 JS_ConfigJoystick(joystick, fd); |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
852 |
0 | 853 return(0); |
854 } | |
855 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
856 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
857 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
858 static SDL_Joystick* FindLogicalJoystick( |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
859 SDL_Joystick *joystick, struct joystick_logical_mapping* v) |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
860 { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
861 SDL_Joystick *logicaljoy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
862 register int i; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
863 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
864 i = joystick->index; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
865 logicaljoy = NULL; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
866 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
867 /* get the fake joystick that will receive the event |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
868 */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
869 for(;;) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
870 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
871 if (SDL_joylist[i].logicalno == v->njoy) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
872 logicaljoy = SDL_joylist[i].joy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
873 break; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
874 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
875 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
876 if (SDL_joylist[i].next == 0) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
877 break; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
878 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
879 i = SDL_joylist[i].next; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
880 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
881 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
882 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
883 return logicaljoy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
884 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
885 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
886 static int LogicalJoystickButton( |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
887 SDL_Joystick *joystick, Uint8 button, Uint8 state){ |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
888 struct joystick_logical_mapping* buttons; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
889 SDL_Joystick *logicaljoy = NULL; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
890 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
891 /* if there's no map then this is just a regular joystick |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
892 */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
893 if (SDL_joylist[joystick->index].map == NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
894 return 0; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
895 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
896 /* get the logical joystick that will receive the event |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
897 */ |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
898 buttons = SDL_joylist[joystick->index].map->buttonmap+button; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
899 logicaljoy = FindLogicalJoystick(joystick, buttons); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
900 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
901 if (logicaljoy == NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
902 return 1; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
903 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
904 SDL_PrivateJoystickButton(logicaljoy, buttons->nthing, state); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
905 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
906 return 1; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
907 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
908 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
909 static int LogicalJoystickAxis( |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
910 SDL_Joystick *joystick, Uint8 axis, Sint16 value) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
911 { |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
912 struct joystick_logical_mapping* axes; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
913 SDL_Joystick *logicaljoy = NULL; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
914 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
915 /* if there's no map then this is just a regular joystick |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
916 */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
917 if (SDL_joylist[joystick->index].map == NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
918 return 0; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
919 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
920 /* get the logical joystick that will receive the event |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
921 */ |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
922 axes = SDL_joylist[joystick->index].map->axismap+axis; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
923 logicaljoy = FindLogicalJoystick(joystick, axes); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
924 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
925 if (logicaljoy == NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
926 return 1; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
927 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
928 SDL_PrivateJoystickAxis(logicaljoy, axes->nthing, value); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
929 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
930 return 1; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
931 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
932 #endif /* USE_LOGICAL_JOYSTICKS */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
933 |
0 | 934 static __inline__ |
935 void HandleHat(SDL_Joystick *stick, Uint8 hat, int axis, int value) | |
936 { | |
937 struct hwdata_hat *the_hat; | |
938 const Uint8 position_map[3][3] = { | |
939 { SDL_HAT_LEFTUP, SDL_HAT_UP, SDL_HAT_RIGHTUP }, | |
940 { SDL_HAT_LEFT, SDL_HAT_CENTERED, SDL_HAT_RIGHT }, | |
941 { SDL_HAT_LEFTDOWN, SDL_HAT_DOWN, SDL_HAT_RIGHTDOWN } | |
942 }; | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
943 SDL_logical_joydecl(SDL_Joystick *logicaljoy = NULL); |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
944 SDL_logical_joydecl(struct joystick_logical_mapping* hats = NULL); |
0 | 945 |
946 the_hat = &stick->hwdata->hats[hat]; | |
947 if ( value < 0 ) { | |
948 value = 0; | |
949 } else | |
950 if ( value == 0 ) { | |
951 value = 1; | |
952 } else | |
953 if ( value > 0 ) { | |
954 value = 2; | |
955 } | |
956 if ( value != the_hat->axis[axis] ) { | |
957 the_hat->axis[axis] = value; | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
958 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
959 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
960 /* if there's no map then this is just a regular joystick |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
961 */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
962 if (SDL_joylist[stick->index].map != NULL) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
963 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
964 /* get the fake joystick that will receive the event |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
965 */ |
914
bbf8dcc8aed6
Date: Wed, 23 Jun 2004 17:05:33 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
896
diff
changeset
|
966 hats = SDL_joylist[stick->index].map->hatmap+hat; |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
967 logicaljoy = FindLogicalJoystick(stick, hats); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
968 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
969 |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
970 if (logicaljoy) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
971 stick = logicaljoy; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
972 hat = hats->nthing; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
973 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
974 #endif /* USE_LOGICAL_JOYSTICKS */ |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
975 |
0 | 976 SDL_PrivateJoystickHat(stick, hat, |
977 position_map[the_hat->axis[1]][the_hat->axis[0]]); | |
978 } | |
979 } | |
980 | |
981 static __inline__ | |
982 void HandleBall(SDL_Joystick *stick, Uint8 ball, int axis, int value) | |
983 { | |
984 stick->hwdata->balls[ball].axis[axis] += value; | |
985 } | |
986 | |
987 /* Function to update the state of a joystick - called as a device poll. | |
988 * This function shouldn't update the joystick structure directly, | |
989 * but instead should call SDL_PrivateJoystick*() to deliver events | |
990 * and update joystick device state. | |
991 */ | |
992 static __inline__ void JS_HandleEvents(SDL_Joystick *joystick) | |
993 { | |
994 struct js_event events[32]; | |
995 int i, len; | |
996 Uint8 other_axis; | |
997 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
998 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
999 if (SDL_joylist[joystick->index].fname == NULL) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1000 SDL_joylist_head(i, joystick->index); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1001 return JS_HandleEvents(SDL_joylist[i].joy); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1002 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1003 #endif |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1004 |
0 | 1005 while ((len=read(joystick->hwdata->fd, events, (sizeof events))) > 0) { |
1006 len /= sizeof(events[0]); | |
1007 for ( i=0; i<len; ++i ) { | |
1008 switch (events[i].type & ~JS_EVENT_INIT) { | |
1009 case JS_EVENT_AXIS: | |
1010 if ( events[i].number < joystick->naxes ) { | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1011 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1012 if (!LogicalJoystickAxis(joystick, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1013 events[i].number, events[i].value)) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1014 #endif |
0 | 1015 SDL_PrivateJoystickAxis(joystick, |
1016 events[i].number, events[i].value); | |
1017 break; | |
1018 } | |
1019 events[i].number -= joystick->naxes; | |
589
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1020 other_axis = (events[i].number / 2); |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1021 if ( other_axis < joystick->nhats ) { |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1022 HandleHat(joystick, other_axis, |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1023 events[i].number%2, |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1024 events[i].value); |
2e58ece48b61
Removed obsolete Linux joystick code
Sam Lantinga <slouken@libsdl.org>
parents:
554
diff
changeset
|
1025 break; |
0 | 1026 } |
1027 events[i].number -= joystick->nhats*2; | |
1028 other_axis = (events[i].number / 2); | |
1029 if ( other_axis < joystick->nballs ) { | |
1030 HandleBall(joystick, other_axis, | |
1031 events[i].number%2, | |
1032 events[i].value); | |
1033 break; | |
1034 } | |
1035 break; | |
1036 case JS_EVENT_BUTTON: | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1037 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1038 if (!LogicalJoystickButton(joystick, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1039 events[i].number, events[i].value)) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1040 #endif |
0 | 1041 SDL_PrivateJoystickButton(joystick, |
1042 events[i].number, events[i].value); | |
1043 break; | |
1044 default: | |
1045 /* ?? */ | |
1046 break; | |
1047 } | |
1048 } | |
1049 } | |
1050 } | |
1051 #ifdef USE_INPUT_EVENTS | |
1052 static __inline__ int EV_AxisCorrect(SDL_Joystick *joystick, int which, int value) | |
1053 { | |
1054 struct axis_correct *correct; | |
1055 | |
1056 correct = &joystick->hwdata->abs_correct[which]; | |
1057 if ( correct->used ) { | |
1058 if ( value > correct->coef[0] ) { | |
1059 if ( value < correct->coef[1] ) { | |
1060 return 0; | |
1061 } | |
1062 value -= correct->coef[1]; | |
1063 } else { | |
1064 value -= correct->coef[0]; | |
1065 } | |
1066 value *= correct->coef[2]; | |
1067 value >>= 14; | |
1068 } | |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
1069 |
0 | 1070 /* Clamp and return */ |
554
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
1071 if ( value < -32767 ) return -32767; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
1072 if ( value > 32767 ) return 32767; |
38b1a98aeb11
Linux joystick cleanups from Alan Swanson
Sam Lantinga <slouken@libsdl.org>
parents:
408
diff
changeset
|
1073 |
0 | 1074 return value; |
1075 } | |
1076 | |
1077 static __inline__ void EV_HandleEvents(SDL_Joystick *joystick) | |
1078 { | |
1079 struct input_event events[32]; | |
1080 int i, len; | |
1081 int code; | |
1082 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1083 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1084 if (SDL_joylist[joystick->index].fname == NULL) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1085 SDL_joylist_head(i, joystick->index); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1086 return EV_HandleEvents(SDL_joylist[i].joy); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1087 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1088 #endif |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1089 |
0 | 1090 while ((len=read(joystick->hwdata->fd, events, (sizeof events))) > 0) { |
1091 len /= sizeof(events[0]); | |
1092 for ( i=0; i<len; ++i ) { | |
1093 code = events[i].code; | |
1094 switch (events[i].type) { | |
1095 case EV_KEY: | |
1096 if ( code >= BTN_MISC ) { | |
1097 code -= BTN_MISC; | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1098 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1099 if (!LogicalJoystickButton(joystick, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1100 joystick->hwdata->key_map[code], |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1101 events[i].value)) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1102 #endif |
0 | 1103 SDL_PrivateJoystickButton(joystick, |
1104 joystick->hwdata->key_map[code], | |
1105 events[i].value); | |
1106 } | |
1107 break; | |
1108 case EV_ABS: | |
1109 switch (code) { | |
1110 case ABS_HAT0X: | |
1111 case ABS_HAT0Y: | |
1112 case ABS_HAT1X: | |
1113 case ABS_HAT1Y: | |
1114 case ABS_HAT2X: | |
1115 case ABS_HAT2Y: | |
1116 case ABS_HAT3X: | |
1117 case ABS_HAT3Y: | |
1118 code -= ABS_HAT0X; | |
1119 HandleHat(joystick, code/2, code%2, | |
1120 events[i].value); | |
1121 break; | |
1122 default: | |
1123 events[i].value = EV_AxisCorrect(joystick, code, events[i].value); | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1124 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1125 if (!LogicalJoystickAxis(joystick, |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1126 joystick->hwdata->abs_map[code], |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1127 events[i].value)) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1128 #endif |
0 | 1129 SDL_PrivateJoystickAxis(joystick, |
1130 joystick->hwdata->abs_map[code], | |
1131 events[i].value); | |
1132 break; | |
1133 } | |
1134 break; | |
1135 case EV_REL: | |
1136 switch (code) { | |
1137 case REL_X: | |
1138 case REL_Y: | |
1139 code -= REL_X; | |
1140 HandleBall(joystick, code/2, code%2, | |
1141 events[i].value); | |
1142 break; | |
1143 default: | |
1144 break; | |
1145 } | |
1146 break; | |
1147 default: | |
1148 break; | |
1149 } | |
1150 } | |
1151 } | |
1152 } | |
1153 #endif /* USE_INPUT_EVENTS */ | |
1154 | |
1155 void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) | |
1156 { | |
1157 int i; | |
1158 | |
1159 #ifdef USE_INPUT_EVENTS | |
1160 if ( joystick->hwdata->is_hid ) | |
1161 EV_HandleEvents(joystick); | |
1162 else | |
1163 #endif | |
1164 JS_HandleEvents(joystick); | |
1165 | |
1166 /* Deliver ball motion updates */ | |
1167 for ( i=0; i<joystick->nballs; ++i ) { | |
1168 int xrel, yrel; | |
1169 | |
1170 xrel = joystick->hwdata->balls[i].axis[0]; | |
1171 yrel = joystick->hwdata->balls[i].axis[1]; | |
1172 if ( xrel || yrel ) { | |
1173 joystick->hwdata->balls[i].axis[0] = 0; | |
1174 joystick->hwdata->balls[i].axis[1] = 0; | |
1175 SDL_PrivateJoystickBall(joystick, (Uint8)i, xrel, yrel); | |
1176 } | |
1177 } | |
1178 } | |
1179 | |
1180 /* Function to close a joystick after use */ | |
1181 void SDL_SYS_JoystickClose(SDL_Joystick *joystick) | |
1182 { | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1183 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1184 register int i; |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1185 if (SDL_joylist[joystick->index].fname == NULL) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1186 SDL_joylist_head(i, joystick->index); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1187 SDL_JoystickClose(SDL_joylist[i].joy); |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1188 } |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1189 #endif |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1190 |
0 | 1191 if ( joystick->hwdata ) { |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1192 #ifndef NO_LOGICAL_JOYSTICKS |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1193 if (SDL_joylist[joystick->index].fname != NULL) |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1194 #endif |
0 | 1195 close(joystick->hwdata->fd); |
1196 if ( joystick->hwdata->hats ) { | |
1197 free(joystick->hwdata->hats); | |
1198 } | |
1199 if ( joystick->hwdata->balls ) { | |
1200 free(joystick->hwdata->balls); | |
1201 } | |
1202 free(joystick->hwdata); | |
1203 joystick->hwdata = NULL; | |
1204 } | |
1205 } | |
1206 | |
1207 /* Function to perform any system-specific joystick related cleanup */ | |
1208 void SDL_SYS_JoystickQuit(void) | |
1209 { | |
1210 int i; | |
1211 | |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1212 for ( i=0; SDL_joylist[i].fname; ++i ) { |
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1213 free(SDL_joylist[i].fname); |
0 | 1214 } |
892
dc29e5907694
Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
Sam Lantinga <slouken@libsdl.org>
parents:
872
diff
changeset
|
1215 SDL_joylist[0].fname = NULL; |
0 | 1216 } |
1217 |