changeset 2517:37c13c12c878 gsoc2008_force_feedback

Broke API by introducing iterations to SDL_HapticRunEffects(). Fixed minor issues.
author Edgar Simo <bobbens@gmail.com>
date Thu, 10 Jul 2008 17:54:08 +0000
parents 6da022b18314
children 07a5b225b9c9
files include/SDL_haptic.h src/haptic/SDL_haptic.c src/haptic/SDL_syshaptic.h src/haptic/dummy/SDL_syshaptic.c src/haptic/linux/SDL_syshaptic.c
diffstat 5 files changed, 31 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/include/SDL_haptic.h	Thu Jul 10 17:52:57 2008 +0000
+++ b/include/SDL_haptic.h	Thu Jul 10 17:54:08 2008 +0000
@@ -70,7 +70,7 @@
  *    effect_id = SDL_HapticNewEffect( haptic, &effect );
  *
  *    // Test the effect
- *    SDL_HapticRunEffect( haptic, effect_id );
+ *    SDL_HapticRunEffect( haptic, effect_id, 1 );
  *    SDL_Delay( 5000); // Wait for the effect to finish
  *
  *    // We destroy the effect, although closing the device also does this
@@ -263,6 +263,19 @@
 #define SDL_HAPTIC_CARTESIAN  1
 
 
+/*
+ * Misc defines.
+ */
+/**
+ * \def SDL_HAPTIC_INFINITY
+ *
+ * \brief Used to play a device an infinite number of times.
+ *
+ * \sa SDL_HapticRunEffect
+ */
+#define SDL_HAPTIC_INFINITY   -1
+
+
 /**
  * \struct SDL_HapticDirection
  *
@@ -681,7 +694,7 @@
  *
  * \sa SDL_HapticOpenFromMouse
  */
-extern DECLSPEC SDL_MouseIsHaptic(void);
+extern DECLSPEC int SDL_MouseIsHaptic(void);
 
 /**
  * \fn SDL_Haptic * SDL_HapticOpenFromMouse(void)
@@ -830,19 +843,21 @@
 extern DECLSPEC int SDL_HapticUpdateEffect(SDL_Haptic * haptic, int effect, SDL_HapticEffect * data);
 
 /**
- * \fn int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect)
+ * \fn int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, int iterations)
  *
  * \brief Runs the haptic effect on it's assosciated haptic device.
  *
  *    \param haptic Haptic device to run the effect on.
  *    \param effect Identifier of the haptic effect to run.
+ *    \param iterations Number of iterations to run the effect. Use
+ *           SDL_HAPTIC_INFINITY for infinity.
  *    \return 0 on success or -1 on error.
  *
  * \sa SDL_HapticStopEffect
  * \sa SDL_HapticDestroyEffect
  * \sa SDL_HapticGetEffectStatus
  */
-extern DECLSPEC int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect);
+extern DECLSPEC int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, int iterations);
 
 /**
  * \fn int SDL_HapticStopEffect(SDL_Haptic * haptic, int effect)
--- a/src/haptic/SDL_haptic.c	Thu Jul 10 17:52:57 2008 +0000
+++ b/src/haptic/SDL_haptic.c	Thu Jul 10 17:54:08 2008 +0000
@@ -470,14 +470,14 @@
  * Runs the haptic effect on the device.
  */
 int
-SDL_HapticRunEffect(SDL_Haptic * haptic, int effect)
+SDL_HapticRunEffect(SDL_Haptic * haptic, int effect, int iterations)
 {
    if (!ValidHaptic(&haptic) || !ValidEffect(haptic,effect)) {
       return -1;
    }
 
    /* Run the effect */
-   if (SDL_SYS_HapticRunEffect(haptic,&haptic->effects[effect]) < 0) {
+   if (SDL_SYS_HapticRunEffect(haptic,&haptic->effects[effect], iterations) < 0) {
       return -1;
    }
 
--- a/src/haptic/SDL_syshaptic.h	Thu Jul 10 17:52:57 2008 +0000
+++ b/src/haptic/SDL_syshaptic.h	Thu Jul 10 17:54:08 2008 +0000
@@ -38,7 +38,7 @@
 };
 
 /*
- * The real SDL_Haptic event.
+ * The real SDL_Haptic struct.
  */
 struct _SDL_Haptic
 {  
@@ -139,7 +139,8 @@
  * Returns 0 on success, -1 on error.
  */
 extern int SDL_SYS_HapticRunEffect(SDL_Haptic * haptic,
-                                   struct haptic_effect * effect);
+                                   struct haptic_effect * effect,
+                                   int iterations);
 
 /*
  * Stops the effect on the haptic device.
--- a/src/haptic/dummy/SDL_syshaptic.c	Thu Jul 10 17:52:57 2008 +0000
+++ b/src/haptic/dummy/SDL_syshaptic.c	Thu Jul 10 17:54:08 2008 +0000
@@ -114,7 +114,7 @@
 
 
 int
-SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect * effect)
+SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect * effect, int iterations)
 {
    SDL_SetError("Logic error: No haptic devices available.");
    return -1;
--- a/src/haptic/linux/SDL_syshaptic.c	Thu Jul 10 17:52:57 2008 +0000
+++ b/src/haptic/linux/SDL_syshaptic.c	Thu Jul 10 17:54:08 2008 +0000
@@ -36,6 +36,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <linux/limits.h>
+#include <limits.h> /* INT_MAX */
 #include <string.h>
 #include <errno.h>
 #include <math.h>
@@ -672,14 +673,17 @@
  * Runs an effect.
  */
 int
-SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect * effect)
+SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect * effect, int iterations)
 {
    struct input_event run;
 
    /* Prepare to run the effect */
    run.type = EV_FF;
    run.code = effect->hweffect->effect.id;
-   run.value = 1;
+   if (iterations == SDL_HAPTIC_INFINITY)
+      run.value = INT_MAX;
+   else
+      run.value = iterations;
 
    if (write(haptic->hwdata->fd, (const void*) &run, sizeof(run)) < 0) {
       SDL_SetError("Haptic: Unable to run the effect: %s", strerror(errno));