# HG changeset patch # User Edgar Simo # Date 1214921393 0 # Node ID 9d52368ebcf5d024fd7cb08b6151b996c75e9fff # Parent b51ad78812d5f49b6377488843788f4a58e41366 Setting effects memory to 0. Added SDL_HapticSetGain(). diff -r b51ad78812d5 -r 9d52368ebcf5 include/SDL_haptic.h --- 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 diff -r b51ad78812d5 -r 9d52368ebcf5 src/haptic/SDL_haptic.c --- 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; +} + + diff -r b51ad78812d5 -r 9d52368ebcf5 src/haptic/SDL_syshaptic.h --- 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); diff -r b51ad78812d5 -r 9d52368ebcf5 src/haptic/linux/SDL_syshaptic.c --- 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 #include #include -#include #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 */