comparison src/haptic/linux/SDL_syshaptic.c @ 2477:97f75ea43a93 gsoc2008_force_feedback

Starting to add infrastructure to handle haptic effects.
author Edgar Simo <bobbens@gmail.com>
date Mon, 30 Jun 2008 16:48:16 +0000
parents 242d8a668ebb
children 4fd783e0f34b
comparison
equal deleted inserted replaced
2476:242d8a668ebb 2477:97f75ea43a93
54 * Haptic system hardware data. 54 * Haptic system hardware data.
55 */ 55 */
56 struct haptic_hwdata 56 struct haptic_hwdata
57 { 57 {
58 int fd; 58 int fd;
59 };
60
61
62 /*
63 * Haptic system effect data.
64 */
65 struct haptic_hweffect
66 {
67 int id;
59 }; 68 };
60 69
61 70
62 71
63 #define test_bit(nr, addr) \ 72 #define test_bit(nr, addr) \
178 * Opens a haptic device for usage. 187 * Opens a haptic device for usage.
179 */ 188 */
180 int 189 int
181 SDL_SYS_HapticOpen(SDL_Haptic * haptic) 190 SDL_SYS_HapticOpen(SDL_Haptic * haptic)
182 { 191 {
192 int i;
183 int fd; 193 int fd;
184 194
185 /* Open the character device */ 195 /* Open the character device */
186 fd = open(SDL_hapticlist[haptic->index].fname, O_RDWR, 0); 196 fd = open(SDL_hapticlist[haptic->index].fname, O_RDWR, 0);
187 if (fd < 0) { 197 if (fd < 0) {
188 SDL_SetError("Unable to open %s\n", SDL_hapticlist[haptic->index]); 198 SDL_SetError("Unable to open %s\n", SDL_hapticlist[haptic->index]);
189 return (-1); 199 return -1;
190 } 200 }
191 201
192 /* Allocate the hwdata */ 202 /* Allocate the hwdata */
193 haptic->hwdata = (struct haptic_hwdata *) 203 haptic->hwdata = (struct haptic_hwdata *)
194 SDL_malloc(sizeof(*haptic->hwdata)); 204 SDL_malloc(sizeof(*haptic->hwdata));
195 if (haptic->hwdata == NULL) { 205 if (haptic->hwdata == NULL) {
196 SDL_OutOfMemory(); 206 SDL_OutOfMemory();
197 close(fd); 207 goto open_err;
198 return (-1);
199 } 208 }
200 SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); 209 SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata));
201
202 /* Set the hwdata */ 210 /* Set the hwdata */
203 haptic->hwdata->fd = fd; 211 haptic->hwdata->fd = fd;
204 212
213 /* Set the effects */
214 if (ioctl(fd, EVIOCGEFFECTS, &haptic->neffects) < 0) {
215 SDL_SetError("Unable to query haptic device memory.");
216 goto open_err;
217 }
218 haptic->effects = (struct haptic_effect *)
219 SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects);
220 if (haptic->effects == NULL) {
221 SDL_OutOfMemory();
222 goto open_err;
223 }
224
205 return 0; 225 return 0;
226
227 /* Error handling */
228 open_err:
229 close(fd);
230 if (haptic->hwdata != NULL) {
231 free(haptic->hwdata);
232 haptic->hwdata = NULL;
233 }
234 return -1;
206 } 235 }
207 236
208 237
209 /* 238 /*
210 * Closes the haptic device. 239 * Closes the haptic device.
218 close(haptic->hwdata->fd); 247 close(haptic->hwdata->fd);
219 248
220 /* Free */ 249 /* Free */
221 SDL_free(haptic->hwdata); 250 SDL_free(haptic->hwdata);
222 haptic->hwdata = NULL; 251 haptic->hwdata = NULL;
223 252 SDL_free(haptic->effects);
224 } 253 haptic->neffects = 0;
225 } 254 }
226 255 }
227 256
228 /* Clean up after system specific haptic stuff */ 257
258 /*
259 * Clean up after system specific haptic stuff
260 */
229 void 261 void
230 SDL_SYS_HapticQuit(void) 262 SDL_SYS_HapticQuit(void)
231 { 263 {
232 int i; 264 int i;
233 265
235 SDL_free(SDL_hapticlist[i].fname); 267 SDL_free(SDL_hapticlist[i].fname);
236 } 268 }
237 SDL_hapticlist[0].fname = NULL; 269 SDL_hapticlist[0].fname = NULL;
238 } 270 }
239 271
272 /*
273 * Creates a new haptic effect.
274 */
275 int
276 SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect * effect)
277 {
278 return -1;
279 }
280
240 281
241 #endif /* SDL_HAPTIC_LINUX */ 282 #endif /* SDL_HAPTIC_LINUX */