# HG changeset patch # User Edgar Simo # Date 1214846914 0 # Node ID 4fd783e0f34b5edc210c9267662e4ba12e03a2f4 # Parent 97f75ea43a9311c4f6e696840ba9f600ab35cd05 Added query functions for haptic devices. diff -r 97f75ea43a93 -r 4fd783e0f34b include/SDL_haptic.h --- a/include/SDL_haptic.h Mon Jun 30 16:48:16 2008 +0000 +++ b/include/SDL_haptic.h Mon Jun 30 17:28:34 2008 +0000 @@ -100,6 +100,19 @@ extern DECLSPEC void SDL_HapticClose(SDL_Haptic * haptic); /* + * Returns the number of effects a haptic device can store. + */ +extern DECLSPEC int SDL_HapticNumEffects(SDL_Haptic * haptic); + +/* + * Returns the supported effects. Individual effects can be queried by + * bitwise operators. + * + * Example: (SDL_HapticQueryEffects(haptic) & SDL_HAPTIC_CONSTANT) + */ +extern DECLSPEC unsigned int SDL_HapticQueryEffects(SDL_Haptic * haptic); + +/* * Creates a new haptic effect on the device. */ extern DECLSPEC int SDL_HapticNewEffect(SDL_Haptic * haptic, SDL_HapticEffect * effect); diff -r 97f75ea43a93 -r 4fd783e0f34b src/haptic/SDL_haptic.c --- a/src/haptic/SDL_haptic.c Mon Jun 30 16:48:16 2008 +0000 +++ b/src/haptic/SDL_haptic.c Mon Jun 30 17:28:34 2008 +0000 @@ -197,6 +197,43 @@ } } +/* + * Returns the number of effects a haptic device has. + */ +int +SDL_HapticNumEffects(SDL_Haptic * haptic) +{ + if (!ValidHaptic(&haptic)) { + return -1; + } + + return haptic->neffects; +} + +/* + * Returns supported effects by the device. + */ +unsigned int +SDL_HapticQueryEffects(SDL_Haptic * haptic) +{ + if (!ValidHaptic(&haptic)) { + return -1; + } + + return haptic->supported; +} + +int +SDL_HapticEffectSupported(SDL_Haptic * haptic, SDL_HapticEffect * effect) +{ + if (!ValidHaptic(&haptic)) { + return -1; + } + + if ((haptic->supported & effect->type) != 0) + return SDL_TRUE; + return SDL_FALSE; +} /* * Creates a new haptic effect. diff -r 97f75ea43a93 -r 4fd783e0f34b src/haptic/linux/SDL_syshaptic.c --- a/src/haptic/linux/SDL_syshaptic.c Mon Jun 30 16:48:16 2008 +0000 +++ b/src/haptic/linux/SDL_syshaptic.c Mon Jun 30 17:28:34 2008 +0000 @@ -207,8 +207,9 @@ goto open_err; } SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); - /* Set the hwdata */ + /* Set the data */ haptic->hwdata->fd = fd; + haptic->supported = EV_IsHaptic(fd); /* Set the effects */ if (ioctl(fd, EVIOCGEFFECTS, &haptic->neffects) < 0) {