Added SDL_HapticStopEffect(). gsoc2008_force_feedback
authorEdgar Simo <bobbens@gmail.com>
Tue, 01 Jul 2008 14:31:04 +0000
branchgsoc2008_force_feedback
changeset 2485 67978eea6d10
parent 2484 666472fd4cb0
child 2486 24dd8b8669fa
Added SDL_HapticStopEffect().
include/SDL_haptic.h
src/haptic/SDL_haptic.c
src/haptic/SDL_syshaptic.h
src/haptic/linux/SDL_syshaptic.c
--- a/include/SDL_haptic.h	Tue Jul 01 14:21:09 2008 +0000
+++ b/include/SDL_haptic.h	Tue Jul 01 14:31:04 2008 +0000
@@ -245,7 +245,15 @@
 extern DECLSPEC int SDL_HapticRunEffect(SDL_Haptic * haptic, int effect);
 
 /*
- * Destroys a haptic effect on the device.
+ * Stops the haptic effect on it's assosciated haptic device.
+ *
+ * Returns 0 on success or -1 on failure.
+ */
+extern DECLSPEC int SDL_HapticStopEffect(SDL_Haptic * haptic, int effect);
+
+/*
+ * Destroys a haptic effect on the device.  This will stop the effect if it's
+ * running.
  */
 extern DECLSPEC void SDL_HapticDestroyEffect(SDL_Haptic * haptic, int effect);
 
--- a/src/haptic/SDL_haptic.c	Tue Jul 01 14:21:09 2008 +0000
+++ b/src/haptic/SDL_haptic.c	Tue Jul 01 14:31:04 2008 +0000
@@ -307,6 +307,24 @@
 }
 
 /*
+ * Stops the haptic effect on the device.
+ */
+int
+SDL_HapticStopEffect(SDL_Haptic * haptic, int effect)
+{
+   if (!ValidHaptic(&haptic) || !ValidEffect(haptic,effect)) {
+      return -1;
+   }
+
+   /* Stop the effect */
+   if (SDL_SYS_HapticStopEffect(haptic,&haptic->effects[effect]) < 0) {
+      return -1;
+   }
+
+   return 0;
+}
+
+/*
  * Gets rid of a haptic effect.
  */
 void
--- a/src/haptic/SDL_syshaptic.h	Tue Jul 01 14:21:09 2008 +0000
+++ b/src/haptic/SDL_syshaptic.h	Tue Jul 01 14:31:04 2008 +0000
@@ -56,6 +56,8 @@
       struct haptic_effect * effect, SDL_HapticEffect * base);
 extern int SDL_SYS_HapticRunEffect(SDL_Haptic * haptic,
       struct haptic_effect * effect);
+extern int SDL_SYS_HapticStopEffect(SDL_Haptic * haptic,
+      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 14:21:09 2008 +0000
+++ b/src/haptic/linux/SDL_syshaptic.c	Tue Jul 01 14:31:04 2008 +0000
@@ -495,6 +495,27 @@
 
 
 /*
+ * Stops an effect.
+ */
+int
+SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect * effect)
+{
+   struct input_event stop;
+
+   stop.type = EV_FF;
+   stop.code = effect->hweffect->effect.id;
+   stop.value = 0;
+
+   if (write(haptic->hwdata->fd, (const void*) &stop, sizeof(stop)) < 0) {
+      SDL_SetError("Unable to stop the haptic effect.");
+      return -1;
+   }
+
+   return 0;
+}
+
+
+/*
  * Frees the effect
  */
 void