Mercurial > sdl-ios-xcode
comparison src/joystick/beos/SDL_bejoystick.cc @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 92947e3a18db |
children | 4da1ee79c9af |
comparison
equal
deleted
inserted
replaced
1661:281d3f4870e5 | 1662:782fd950bd46 |
---|---|
26 /* This is the system specific header for the SDL joystick API */ | 26 /* This is the system specific header for the SDL joystick API */ |
27 | 27 |
28 #include <be/support/String.h> | 28 #include <be/support/String.h> |
29 #include <be/device/Joystick.h> | 29 #include <be/device/Joystick.h> |
30 | 30 |
31 extern "C" { | 31 extern "C" |
32 { | |
32 | 33 |
33 #include "SDL_joystick.h" | 34 #include "SDL_joystick.h" |
34 #include "../SDL_sysjoystick.h" | 35 #include "../SDL_sysjoystick.h" |
35 #include "../SDL_joystick_c.h" | 36 #include "../SDL_joystick_c.h" |
36 | 37 |
37 | 38 |
38 /* The maximum number of joysticks we'll detect */ | 39 /* The maximum number of joysticks we'll detect */ |
39 #define MAX_JOYSTICKS 16 | 40 #define MAX_JOYSTICKS 16 |
40 | 41 |
41 /* A list of available joysticks */ | 42 /* A list of available joysticks */ |
42 static char *SDL_joyport[MAX_JOYSTICKS]; | 43 static char *SDL_joyport[MAX_JOYSTICKS]; |
43 static char *SDL_joyname[MAX_JOYSTICKS]; | 44 static char *SDL_joyname[MAX_JOYSTICKS]; |
44 | 45 |
45 /* The private structure used to keep track of a joystick */ | 46 /* The private structure used to keep track of a joystick */ |
46 struct joystick_hwdata { | 47 struct joystick_hwdata |
47 BJoystick *stick; | 48 { |
48 uint8 *new_hats; | 49 BJoystick *stick; |
49 int16 *new_axes; | 50 uint8 *new_hats; |
50 }; | 51 int16 *new_axes; |
52 }; | |
51 | 53 |
52 /* Function to scan the system for joysticks. | 54 /* Function to scan the system for joysticks. |
53 * This function should set SDL_numjoysticks to the number of available | 55 * This function should set SDL_numjoysticks to the number of available |
54 * joysticks. Joystick 0 should be the system default joystick. | 56 * joysticks. Joystick 0 should be the system default joystick. |
55 * It should return 0, or -1 on an unrecoverable fatal error. | 57 * It should return 0, or -1 on an unrecoverable fatal error. |
56 */ | 58 */ |
57 int SDL_SYS_JoystickInit(void) | 59 int SDL_SYS_JoystickInit (void) |
58 { | 60 { |
59 BJoystick joystick; | 61 BJoystick joystick; |
60 int numjoysticks; | 62 int numjoysticks; |
61 int i; | 63 int i; |
62 int32 nports; | 64 int32 nports; |
63 char name[B_OS_NAME_LENGTH]; | 65 char name[B_OS_NAME_LENGTH]; |
64 | 66 |
65 /* Search for attached joysticks */ | 67 /* Search for attached joysticks */ |
66 nports = joystick.CountDevices(); | 68 nports = joystick.CountDevices (); |
67 numjoysticks = 0; | 69 numjoysticks = 0; |
68 SDL_memset(SDL_joyport, 0, (sizeof SDL_joyport)); | 70 SDL_memset (SDL_joyport, 0, (sizeof SDL_joyport)); |
69 SDL_memset(SDL_joyname, 0, (sizeof SDL_joyname)); | 71 SDL_memset (SDL_joyname, 0, (sizeof SDL_joyname)); |
70 for ( i=0; (SDL_numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i ) { | 72 for (i = 0; (SDL_numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i) |
71 if ( joystick.GetDeviceName(i, name) == B_OK ) { | 73 { |
72 if ( joystick.Open(name) != B_ERROR ) { | 74 if (joystick.GetDeviceName (i, name) == B_OK) { |
73 BString stick_name; | 75 if (joystick.Open (name) != B_ERROR) { |
74 joystick.GetControllerName(&stick_name); | 76 BString stick_name; |
75 SDL_joyport[numjoysticks] = strdup(name); | 77 joystick.GetControllerName (&stick_name); |
76 SDL_joyname[numjoysticks] = | 78 SDL_joyport[numjoysticks] = strdup (name); |
77 strdup(stick_name.String()); | 79 SDL_joyname[numjoysticks] = |
78 numjoysticks++; | 80 strdup (stick_name.String ()); |
79 joystick.Close(); | 81 numjoysticks++; |
80 } | 82 joystick.Close (); |
81 } | 83 } |
82 } | 84 } |
83 return(numjoysticks); | 85 } |
84 } | 86 return (numjoysticks); |
87 } | |
85 | 88 |
86 /* Function to get the device-dependent name of a joystick */ | 89 /* Function to get the device-dependent name of a joystick */ |
87 const char *SDL_SYS_JoystickName(int index) | 90 const char *SDL_SYS_JoystickName (int index) |
88 { | 91 { |
89 return SDL_joyname[index]; | 92 return SDL_joyname[index]; |
90 } | 93 } |
91 | 94 |
92 /* Function to open a joystick for use. | 95 /* Function to open a joystick for use. |
93 The joystick to open is specified by the index field of the joystick. | 96 The joystick to open is specified by the index field of the joystick. |
94 This should fill the nbuttons and naxes fields of the joystick structure. | 97 This should fill the nbuttons and naxes fields of the joystick structure. |
95 It returns 0, or -1 if there is an error. | 98 It returns 0, or -1 if there is an error. |
96 */ | 99 */ |
97 int SDL_SYS_JoystickOpen(SDL_Joystick *joystick) | 100 int SDL_SYS_JoystickOpen (SDL_Joystick * joystick) |
98 { | 101 { |
99 BJoystick *stick; | 102 BJoystick *stick; |
100 | 103 |
101 /* Create the joystick data structure */ | 104 /* Create the joystick data structure */ |
102 joystick->hwdata = (struct joystick_hwdata *) | 105 joystick->hwdata = (struct joystick_hwdata *) |
103 SDL_malloc(sizeof(*joystick->hwdata)); | 106 SDL_malloc (sizeof (*joystick->hwdata)); |
104 if ( joystick->hwdata == NULL ) { | 107 if (joystick->hwdata == NULL) { |
105 SDL_OutOfMemory(); | 108 SDL_OutOfMemory (); |
106 return(-1); | 109 return (-1); |
107 } | 110 } |
108 SDL_memset(joystick->hwdata, 0, sizeof(*joystick->hwdata)); | 111 SDL_memset (joystick->hwdata, 0, sizeof (*joystick->hwdata)); |
109 stick = new BJoystick; | 112 stick = new BJoystick; |
110 joystick->hwdata->stick = stick; | 113 joystick->hwdata->stick = stick; |
111 | 114 |
112 /* Open the requested joystick for use */ | 115 /* Open the requested joystick for use */ |
113 if ( stick->Open(SDL_joyport[joystick->index]) == B_ERROR ) { | 116 if (stick->Open (SDL_joyport[joystick->index]) == B_ERROR) { |
114 SDL_SetError("Unable to open joystick"); | 117 SDL_SetError ("Unable to open joystick"); |
115 SDL_SYS_JoystickClose(joystick); | 118 SDL_SYS_JoystickClose (joystick); |
116 return(-1); | 119 return (-1); |
117 } | 120 } |
118 | 121 |
119 /* Set the joystick to calibrated mode */ | 122 /* Set the joystick to calibrated mode */ |
120 stick->EnableCalibration(); | 123 stick->EnableCalibration (); |
121 | 124 |
122 /* Get the number of buttons, hats, and axes on the joystick */ | 125 /* Get the number of buttons, hats, and axes on the joystick */ |
123 joystick->nbuttons = stick->CountButtons(); | 126 joystick->nbuttons = stick->CountButtons (); |
124 joystick->naxes = stick->CountAxes(); | 127 joystick->naxes = stick->CountAxes (); |
125 joystick->nhats = stick->CountHats(); | 128 joystick->nhats = stick->CountHats (); |
126 | 129 |
127 joystick->hwdata->new_axes = (int16 *) | 130 joystick->hwdata->new_axes = (int16 *) |
128 SDL_malloc(joystick->naxes*sizeof(int16)); | 131 SDL_malloc (joystick->naxes * sizeof (int16)); |
129 joystick->hwdata->new_hats = (uint8 *) | 132 joystick->hwdata->new_hats = (uint8 *) |
130 SDL_malloc(joystick->nhats*sizeof(uint8)); | 133 SDL_malloc (joystick->nhats * sizeof (uint8)); |
131 if ( ! joystick->hwdata->new_hats || ! joystick->hwdata->new_axes ) { | 134 if (!joystick->hwdata->new_hats || !joystick->hwdata->new_axes) { |
132 SDL_OutOfMemory(); | 135 SDL_OutOfMemory (); |
133 SDL_SYS_JoystickClose(joystick); | 136 SDL_SYS_JoystickClose (joystick); |
134 return(-1); | 137 return (-1); |
135 } | 138 } |
136 | 139 |
137 /* We're done! */ | 140 /* We're done! */ |
138 return(0); | 141 return (0); |
139 } | 142 } |
140 | 143 |
141 /* Function to update the state of a joystick - called as a device poll. | 144 /* Function to update the state of a joystick - called as a device poll. |
142 * This function shouldn't update the joystick structure directly, | 145 * This function shouldn't update the joystick structure directly, |
143 * but instead should call SDL_PrivateJoystick*() to deliver events | 146 * but instead should call SDL_PrivateJoystick*() to deliver events |
144 * and update joystick device state. | 147 * and update joystick device state. |
145 */ | 148 */ |
146 void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) | 149 void SDL_SYS_JoystickUpdate (SDL_Joystick * joystick) |
147 { | 150 { |
148 static const Uint8 hat_map[9] = { | 151 static const Uint8 hat_map[9] = { |
149 SDL_HAT_CENTERED, | 152 SDL_HAT_CENTERED, |
150 SDL_HAT_UP, | 153 SDL_HAT_UP, |
151 SDL_HAT_RIGHTUP, | 154 SDL_HAT_RIGHTUP, |
152 SDL_HAT_RIGHT, | 155 SDL_HAT_RIGHT, |
153 SDL_HAT_RIGHTDOWN, | 156 SDL_HAT_RIGHTDOWN, |
154 SDL_HAT_DOWN, | 157 SDL_HAT_DOWN, |
155 SDL_HAT_LEFTDOWN, | 158 SDL_HAT_LEFTDOWN, |
156 SDL_HAT_LEFT, | 159 SDL_HAT_LEFT, |
157 SDL_HAT_LEFTUP | 160 SDL_HAT_LEFTUP |
158 }; | 161 }; |
159 const int JITTER = (32768/10); /* 10% jitter threshold (ok?) */ | 162 const int JITTER = (32768 / 10); /* 10% jitter threshold (ok?) */ |
160 | 163 |
161 BJoystick *stick; | 164 BJoystick *stick; |
162 int i, change; | 165 int i, change; |
163 int16 *axes; | 166 int16 *axes; |
164 uint8 *hats; | 167 uint8 *hats; |
165 uint32 buttons; | 168 uint32 buttons; |
166 | 169 |
167 /* Set up data pointers */ | 170 /* Set up data pointers */ |
168 stick = joystick->hwdata->stick; | 171 stick = joystick->hwdata->stick; |
169 axes = joystick->hwdata->new_axes; | 172 axes = joystick->hwdata->new_axes; |
170 hats = joystick->hwdata->new_hats; | 173 hats = joystick->hwdata->new_hats; |
171 | 174 |
172 /* Get the new joystick state */ | 175 /* Get the new joystick state */ |
173 stick->Update(); | 176 stick->Update (); |
174 stick->GetAxisValues(axes); | 177 stick->GetAxisValues (axes); |
175 stick->GetHatValues(hats); | 178 stick->GetHatValues (hats); |
176 buttons = stick->ButtonValues(); | 179 buttons = stick->ButtonValues (); |
177 | 180 |
178 /* Generate axis motion events */ | 181 /* Generate axis motion events */ |
179 for ( i=0; i<joystick->naxes; ++i ) { | 182 for (i = 0; i < joystick->naxes; ++i) { |
180 change = ((int32)axes[i] - joystick->axes[i]); | 183 change = ((int32) axes[i] - joystick->axes[i]); |
181 if ( (change > JITTER) || (change < -JITTER) ) { | 184 if ((change > JITTER) || (change < -JITTER)) { |
182 SDL_PrivateJoystickAxis(joystick, i, axes[i]); | 185 SDL_PrivateJoystickAxis (joystick, i, axes[i]); |
183 } | 186 } |
184 } | 187 } |
185 | 188 |
186 /* Generate hat change events */ | 189 /* Generate hat change events */ |
187 for ( i=0; i<joystick->nhats; ++i ) { | 190 for (i = 0; i < joystick->nhats; ++i) { |
188 if ( hats[i] != joystick->hats[i] ) { | 191 if (hats[i] != joystick->hats[i]) { |
189 SDL_PrivateJoystickHat(joystick, i, hat_map[hats[i]]); | 192 SDL_PrivateJoystickHat (joystick, i, hat_map[hats[i]]); |
190 } | 193 } |
191 } | 194 } |
192 | 195 |
193 /* Generate button events */ | 196 /* Generate button events */ |
194 for ( i=0; i<joystick->nbuttons; ++i ) { | 197 for (i = 0; i < joystick->nbuttons; ++i) { |
195 if ( (buttons&0x01) != joystick->buttons[i] ) { | 198 if ((buttons & 0x01) != joystick->buttons[i]) { |
196 SDL_PrivateJoystickButton(joystick, i, (buttons&0x01)); | 199 SDL_PrivateJoystickButton (joystick, i, (buttons & 0x01)); |
197 } | 200 } |
198 buttons >>= 1; | 201 buttons >>= 1; |
199 } | 202 } |
200 } | 203 } |
201 | 204 |
202 /* Function to close a joystick after use */ | 205 /* Function to close a joystick after use */ |
203 void SDL_SYS_JoystickClose(SDL_Joystick *joystick) | 206 void SDL_SYS_JoystickClose (SDL_Joystick * joystick) |
204 { | 207 { |
205 if ( joystick->hwdata ) { | 208 if (joystick->hwdata) { |
206 joystick->hwdata->stick->Close(); | 209 joystick->hwdata->stick->Close (); |
207 delete joystick->hwdata->stick; | 210 delete joystick->hwdata->stick; |
208 if ( joystick->hwdata->new_hats ) { | 211 if (joystick->hwdata->new_hats) { |
209 SDL_free(joystick->hwdata->new_hats); | 212 SDL_free (joystick->hwdata->new_hats); |
210 } | 213 } |
211 if ( joystick->hwdata->new_axes ) { | 214 if (joystick->hwdata->new_axes) { |
212 SDL_free(joystick->hwdata->new_axes); | 215 SDL_free (joystick->hwdata->new_axes); |
213 } | 216 } |
214 SDL_free(joystick->hwdata); | 217 SDL_free (joystick->hwdata); |
215 joystick->hwdata = NULL; | 218 joystick->hwdata = NULL; |
216 } | 219 } |
217 } | 220 } |
218 | 221 |
219 /* Function to perform any system-specific joystick related cleanup */ | 222 /* Function to perform any system-specific joystick related cleanup */ |
220 void SDL_SYS_JoystickQuit(void) | 223 void SDL_SYS_JoystickQuit (void) |
221 { | 224 { |
222 int i; | 225 int i; |
223 | 226 |
224 for ( i=0; SDL_joyport[i]; ++i ) { | 227 for (i = 0; SDL_joyport[i]; ++i) { |
225 SDL_free(SDL_joyport[i]); | 228 SDL_free (SDL_joyport[i]); |
226 } | 229 } |
227 SDL_joyport[0] = NULL; | 230 SDL_joyport[0] = NULL; |
228 | 231 |
229 for ( i=0; SDL_joyname[i]; ++i ) { | 232 for (i = 0; SDL_joyname[i]; ++i) { |
230 SDL_free(SDL_joyname[i]); | 233 SDL_free (SDL_joyname[i]); |
231 } | 234 } |
232 SDL_joyname[0] = NULL; | 235 SDL_joyname[0] = NULL; |
233 } | 236 } |
234 | 237 |
235 }; // extern "C" | 238 }; // extern "C" |
236 | 239 |
237 #endif /* SDL_JOYSTICK_BEOS */ | 240 #endif /* SDL_JOYSTICK_BEOS */ |
241 /* vi: set ts=4 sw=4 expandtab: */ |