Properly quit the SDL_haptic subsystem. gsoc2008_force_feedback
authorEdgar Simo <bobbens@gmail.com>
Sun, 01 Jun 2008 18:46:51 +0000
branchgsoc2008_force_feedback
changeset 2474 3f80bf1528b4
parent 2473 20730743769d
child 2475 4b874e3a3a2c
Properly quit the SDL_haptic subsystem. Added SDL_Haptic dummy driver.
configure.in
src/haptic/SDL_haptic.c
src/haptic/SDL_haptic_c.h
src/haptic/dummy/SDL_syshaptic.c
src/haptic/linux/SDL_syshaptic.c
--- a/configure.in	Sun Jun 01 18:40:47 2008 +0000
+++ b/configure.in	Sun Jun 01 18:46:51 2008 +0000
@@ -2580,6 +2580,11 @@
     SOURCES="$SOURCES $srcdir/src/joystick/dummy/*.c"
   fi
 fi
+if test x$enable_haptic = xyes; then
+  if test x$have_haptic != xyes; then
+    SOURCES="$SOURCES $srcdir/src/haptic/dummy/*.c"
+  fi
+fi
 if test x$have_cdrom != xyes; then
     if test x$enable_cdrom = xyes; then
         AC_DEFINE(SDL_CDROM_DISABLED)
--- a/src/haptic/SDL_haptic.c	Sun Jun 01 18:40:47 2008 +0000
+++ b/src/haptic/SDL_haptic.c	Sun Jun 01 18:46:51 2008 +0000
@@ -125,3 +125,16 @@
    }
    return haptic;
 }
+
+
+void
+SDL_HapticQuit(void)
+{
+   SDL_numhaptics = 0;
+
+   SDL_SYS_HapticQuit();
+   if (SDL_haptics != NULL) {
+      SDL_free(SDL_haptics);
+      SDL_haptics = NULL;
+   }
+}
--- a/src/haptic/SDL_haptic_c.h	Sun Jun 01 18:40:47 2008 +0000
+++ b/src/haptic/SDL_haptic_c.h	Sun Jun 01 18:46:51 2008 +0000
@@ -31,3 +31,4 @@
 extern int SDL_HapticOpened(int device_index);
 extern int SDL_HapticIndex(struct _SDL_Haptic *haptic);
 extern void SDL_HapticClose(struct _SDL_Haptic *haptic);
+extern void SDL_HapticQuit(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/haptic/dummy/SDL_syshaptic.c	Sun Jun 01 18:46:51 2008 +0000
@@ -0,0 +1,69 @@
+/*
+    SDL - Simple DirectMedia Layer
+    Copyright (C) 2008 Edgar Simo
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+#include "SDL_config.h"
+
+#ifdef defined(SDL_HAPTIC_DUMMY) || defined(SDL_HAPTIC_DISABLED)
+
+#include "SDL_haptic.h"
+#include "../SDL_haptic_c.h"
+#include "../SDL_syshaptic.h"
+
+
+int
+SDL_SYS_HapticInit(void)
+{
+   SDL_numhaptics = 0;
+   return (0);
+}
+
+
+const char *
+SDL_SYS_HapticName(int index)
+{
+   SDL_SetError("Logic error: No haptic (force feedback) devices available");
+   return (NULL);
+}
+
+
+int
+SDL_SYS_HapticOpen(SDL_Haptic * haptic)
+{
+   SDL_SetError("Logic error: No joysticks available");
+   return (-1);
+}
+
+
+void
+SDL_SYS_HapticClose(SDL_Haptic * haptic)
+{
+   return;
+}
+
+
+void
+SDL_SYS_HapticQuit(void)
+{
+   return;
+}
+
+
+#endif /* SDL_HAPTIC_DUMMY || SDL_HAPTIC_DISABLED */
--- a/src/haptic/linux/SDL_syshaptic.c	Sun Jun 01 18:40:47 2008 +0000
+++ b/src/haptic/linux/SDL_syshaptic.c	Sun Jun 01 18:46:51 2008 +0000
@@ -182,4 +182,17 @@
 }
 
 
+/* Clean up after system specific haptic stuff */
+void
+SDL_SYS_HapticQuit(void)
+{
+   int i;
+
+   for (i=0; SDL_hapticlist[i].fname != NULL; i++) {
+      SDL_free(SDL_hapticlist[i].fname);
+   }
+   SDL_hapticlist[0].fname = NULL;
+}
+
+
 #endif /* SDL_HAPTIC_LINUX */