# HG changeset patch # User Edgar Simo # Date 1215546912 0 # Node ID 8ef1d0f4d0c19eb29b79f6b577401ee52639f133 # Parent ba8e99fe92c17e7c362a7513288c64abd1a76d43 Gain is set to max on haptic device open. Autocenter is disabled on haptic device open. Maximum gain can be set by SDL_HAPTIC_GAIN_MAX. diff -r ba8e99fe92c1 -r 8ef1d0f4d0c1 include/SDL_haptic.h --- a/include/SDL_haptic.h Tue Jul 08 19:35:10 2008 +0000 +++ b/include/SDL_haptic.h Tue Jul 08 19:55:12 2008 +0000 @@ -630,8 +630,9 @@ * \brief Opens a Haptic device for usage - the index passed as an * argument refers to the N'th Haptic device on this system. * - * This function returns a Haptic device identifier, or Null - * if an error occurred. + * When opening a haptic device, it's gain will be set to maximum and + * autocenter will be disabled. To modify these values use + * SDL_HapticSetGain and SDL_HapticSetAutocenter * * \param device_index Index of the device to open. * \return Device identifier or NULL on error. @@ -639,6 +640,8 @@ * \sa SDL_HapticIndex * \sa SDL_HapticOpenFromJoystick * \sa SDL_HapticClose + * \sa SDL_HapticSetGain + * \sa SDL_HapticSetAutocenter */ extern DECLSPEC SDL_Haptic * SDL_HapticOpen(int device_index); @@ -854,6 +857,11 @@ * * Device must support the SDL_HAPTIC_GAIN feature. * + * The user may specify the maxmimum gain by setting the environment variable + * SDL_HAPTIC_GAIN_MAX which should be between 0 and 100. All calls to + * SDL_HapticSetGain will scale linearly using SDL_HAPTIC_GAIN_MAX as the + * maximum. + * * \param haptic Haptic device to set the gain on. * \param gain Value to set the gain to, should be between 0 and 100. * \return 0 on success or -1 on error. diff -r ba8e99fe92c1 -r 8ef1d0f4d0c1 src/haptic/SDL_haptic.c --- a/src/haptic/SDL_haptic.c Tue Jul 08 19:35:10 2008 +0000 +++ b/src/haptic/SDL_haptic.c Tue Jul 08 19:55:12 2008 +0000 @@ -138,6 +138,12 @@ return NULL; } + /* Disable autocenter and set gain to max. */ + if (haptic->supported & SDL_HAPTIC_GAIN) + SDL_HapticSetGain(haptic,100); + if (haptic->supported & SDL_HAPTIC_AUTOCENTER) + SDL_HapticSetAutocenter(haptic,0); + /* Add haptic to list */ ++haptic->ref_count; for (i=0; SDL_haptics[i]; i++) @@ -494,6 +500,9 @@ int SDL_HapticSetGain(SDL_Haptic * haptic, int gain ) { + const char *env; + int real_gain, max_gain; + if (!ValidHaptic(&haptic)) { return -1; } @@ -508,7 +517,23 @@ return -1; } - if (SDL_SYS_HapticSetGain(haptic,gain) < 0) { + /* We use the envvar to get the maximum gain. */ + env = SDL_getenv("SDL_HAPTIC_GAIN_MAX"); + if (env != NULL) { + max_gain = SDL_atoi(env); + + /* Check for sanity. */ + if (max_gain < 0) max_gain = 0; + else if (max_gain > 100) max_gain = 100; + + /* We'll scale it linearly with SDL_HAPTIC_GAIN_MAX */ + real_gain = (gain * max_gain) / 100; + } + else { + real_gain = gain; + } + + if (SDL_SYS_HapticSetGain(haptic,real_gain) < 0) { return -1; }