Mercurial > sdl-ios-xcode
diff src/haptic/linux/SDL_syshaptic.c @ 2490:be9b206d44af gsoc2008_force_feedback
Some more error checking.
Implemented SDL_HapticOpenFromJoystick().
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Wed, 02 Jul 2008 09:52:44 +0000 |
parents | 96adc8025331 |
children | 10bc7aaf5114 |
line wrap: on
line diff
--- a/src/haptic/linux/SDL_syshaptic.c Wed Jul 02 08:24:35 2008 +0000 +++ b/src/haptic/linux/SDL_syshaptic.c Wed Jul 02 09:52:44 2008 +0000 @@ -88,7 +88,10 @@ ret = 0; - ioctl(fd, EVIOCGBIT(EV_FF, sizeof(unsigned long) * 4), features); + if (ioctl(fd, EVIOCGBIT(EV_FF, sizeof(unsigned long) * 4), features) < 0) { + SDL_SetError("Unable to get device's haptic abilities."); + return -1; + } EV_TEST(FF_CONSTANT, SDL_HAPTIC_CONSTANT); EV_TEST(FF_PERIODIC, SDL_HAPTIC_SINE | @@ -151,7 +154,7 @@ #endif /* see if it works */ - if (EV_IsHaptic(fd)!=0) { + if (EV_IsHaptic(fd) > 0) { SDL_hapticlist[numhaptics].fname = SDL_strdup(path); SDL_hapticlist[numhaptics].haptic = NULL; dev_nums[numhaptics] = sb.st_rdev; @@ -191,21 +194,11 @@ /* - * Opens a haptic device for usage. + * Opens the haptic device from the file descriptor. */ -int -SDL_SYS_HapticOpen(SDL_Haptic * haptic) +static int +SDL_SYS_HapticOpenFromFD(SDL_Haptic * haptic, int fd) { - int i; - int fd; - - /* Open the character device */ - fd = open(SDL_hapticlist[haptic->index].fname, O_RDWR, 0); - if (fd < 0) { - SDL_SetError("Unable to open %s\n", SDL_hapticlist[haptic->index]); - return -1; - } - /* Allocate the hwdata */ haptic->hwdata = (struct haptic_hwdata *) SDL_malloc(sizeof(*haptic->hwdata)); @@ -247,13 +240,43 @@ /* + * Opens a haptic device for usage. + */ +int +SDL_SYS_HapticOpen(SDL_Haptic * haptic) +{ + int fd; + + /* Open the character device */ + fd = open(SDL_hapticlist[haptic->index].fname, O_RDWR, 0); + if (fd < 0) { + SDL_SetError("Unable to open %s\n", SDL_hapticlist[haptic->index]); + return -1; + } + + return SDL_SYS_HapticOpenFromFD(haptic,fd); +} + + +/* * Checks to see if a joystick has haptic features. */ int SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick) { - if (EV_IsHaptic(joystick->hwdata->fd) > 0) + return EV_IsHaptic(joystick->hwdata->fd); +} + + +/* + * Checks to see if the haptic device and joystick and in reality the same. + */ +int +SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + if (SDL_strcmp(joystick->name,haptic->name)==0) { return 1; + } return 0; } @@ -264,6 +287,9 @@ int SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) { + int fd; + fd = open(joystick->hwdata->fname, O_RDWR, 0); + return SDL_SYS_HapticOpenFromFD(haptic,fd); }