Mercurial > sdl-ios-xcode
changeset 2483:9d52368ebcf5 gsoc2008_force_feedback
Setting effects memory to 0.
Added SDL_HapticSetGain().
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Tue, 01 Jul 2008 14:09:53 +0000 |
parents | b51ad78812d5 |
children | 666472fd4cb0 |
files | include/SDL_haptic.h src/haptic/SDL_haptic.c src/haptic/SDL_syshaptic.h src/haptic/linux/SDL_syshaptic.c |
diffstat | 4 files changed, 59 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/include/SDL_haptic.h Tue Jul 01 11:21:36 2008 +0000 +++ b/include/SDL_haptic.h Tue Jul 01 14:09:53 2008 +0000 @@ -232,11 +232,15 @@ /* * Creates a new haptic effect on the device. + * + * Returns the id of the effect on success, -1 on failure. */ extern DECLSPEC int SDL_HapticNewEffect(SDL_Haptic * haptic, SDL_HapticEffect * effect); /* * Runs the haptic effect on it's assosciated haptic device. + * + * Returns 0 on success or -1 on failure. */ extern DECLSPEC int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect); @@ -245,6 +249,13 @@ */ extern DECLSPEC void SDL_HapticDestroyEffect(SDL_Haptic * haptic, int effect); +/* + * Sets the global gain of the device. Gain should be between 0 and 100. + * + * Returns 0 on success or -1 on failure. + */ +extern DECLSPEC int SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus
--- a/src/haptic/SDL_haptic.c Tue Jul 01 11:21:36 2008 +0000 +++ b/src/haptic/SDL_haptic.c Tue Jul 01 14:09:53 2008 +0000 @@ -324,4 +324,26 @@ SDL_SYS_HapticDestroyEffect(haptic, &haptic->effects[effect]); } +/* + * Sets the global gain of the device. + */ +int +SDL_HapticSetGain(SDL_Haptic * haptic, int gain ) +{ + if (!ValidHaptic(&haptic)) { + return -1; + } + if ((gain < 0) || (gain > 100)) { + SDL_SetError("Haptic gain must be between 0 and 100."); + return -1; + } + + if (SDL_SYS_HapticSetGain(haptic,gain) < 0) { + return -1; + } + + return 0; +} + +
--- a/src/haptic/SDL_syshaptic.h Tue Jul 01 11:21:36 2008 +0000 +++ b/src/haptic/SDL_syshaptic.h Tue Jul 01 14:09:53 2008 +0000 @@ -58,5 +58,6 @@ struct haptic_effect * effect); extern void SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect * effect); +extern int SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain);
--- a/src/haptic/linux/SDL_syshaptic.c Tue Jul 01 11:21:36 2008 +0000 +++ b/src/haptic/linux/SDL_syshaptic.c Tue Jul 01 14:09:53 2008 +0000 @@ -35,7 +35,6 @@ #include <fcntl.h> #include <linux/limits.h> #include <string.h> -#include <errno.h> #define MAX_HAPTICS 32 @@ -222,6 +221,9 @@ SDL_OutOfMemory(); goto open_err; } + /* Clear the memory */ + SDL_memset(haptic->effects, 0, + sizeof(struct haptic_effect) * haptic->neffects); return 0; @@ -435,6 +437,7 @@ return 0; } + /* * Creates a new haptic effect. */ @@ -461,8 +464,7 @@ /* Upload the effect */ if (ioctl(haptic->hwdata->fd, EVIOCSFF, linux_effect) < 0) { - SDL_SetError("Error uploading effect to the haptic device: %s", - strerror(errno)); + SDL_SetError("Error uploading effect to the haptic device."); return -1; } @@ -506,4 +508,24 @@ } +/* + * Sets the gain. + */ +int +SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + struct input_event ie; + + ie.type = EV_FF; + ie.code = FF_GAIN; + ie.value = (0xFFFFUL * gain) / 100; + printf("%d\n",ie.value); + + if (write(haptic->hwdata->fd, &ie, sizeof(ie)) == -1) { + SDL_SetError("Error setting gain."); + } + +} + + #endif /* SDL_HAPTIC_LINUX */