Warn about using button triggers. gsoc2008_force_feedback
authorEdgar Simo <bobbens@gmail.com>
Wed, 30 Jul 2008 14:48:34 +0000
branchgsoc2008_force_feedback
changeset 2554 2681a04c2d3d
parent 2553 3f853f075bc0
child 2555 f5bcc926bac4
Warn about using button triggers.
include/SDL_haptic.h
src/haptic/darwin/SDL_syshaptic.c
--- a/include/SDL_haptic.h	Wed Jul 30 14:09:10 2008 +0000
+++ b/include/SDL_haptic.h	Wed Jul 30 14:48:34 2008 +0000
@@ -645,6 +645,10 @@
  * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of
  *  SDL_HAPTIC_INFINITY.
  *
+ * Button triggers may not be supported on all devices, it is advised to not
+ *  use them if possible.  Buttons start at index 1 instead of index 0 like
+ *  they joystick.
+ *
  * Common parts:
  * \code
  * // Replay - All effects have this
--- a/src/haptic/darwin/SDL_syshaptic.c	Wed Jul 30 14:09:10 2008 +0000
+++ b/src/haptic/darwin/SDL_syshaptic.c	Wed Jul 30 14:48:34 2008 +0000
@@ -309,8 +309,8 @@
    FF_TEST(FFCAP_ET_CUSTOMFORCE,   SDL_HAPTIC_CUSTOM);
 
    /* Check if supports gain. */
-   ret = FFDeviceGetForceFeedbackProperty(device, FFPROP_FFGAIN,
-                                          &val, sizeof(val));
+   ret = FFDeviceGetForceFeedbackProperty( device, FFPROP_FFGAIN,
+                                           &val, sizeof(val));
    if (ret == FF_OK) supported |= SDL_HAPTIC_GAIN;
    else if (ret != FFERR_UNSUPPORTED) {
       SDL_SetError("Haptic: Unable to get if device supports gain: %s.",
@@ -514,6 +514,23 @@
 
 
 /*
+ * Converts an SDL trigger button to an FFEFFECT trigger button.
+ */
+static DWORD
+FFGetTriggerButton( Uint16 button )
+{
+   DWORD dwTriggerButton;
+
+   dwTriggerButton = FFEB_NOTRIGGER;
+
+   if (hap_constant->button != 0)
+      dwTriggerButton = FFJOFS_BUTTON(hap_constant->button);
+
+   return dwTriggerButton;
+}
+
+
+/*
  * Sets the direction.
  */
 static int
@@ -634,7 +651,7 @@
 
          /* Generics */
          dest->dwDuration = hap_constant->length * 1000; /* In microseconds. */
-         dest->dwTriggerButton = FFJOFS_BUTTON(hap_constant->button);
+         dest->dwTriggerButton = FFGetTriggerButton(hap_constant->button);
          dest->dwTriggerRepeatInterval = hap_constant->interval;
          dest->dwStartDelay = hap_constant->delay * 1000; /* In microseconds. */
 
@@ -674,7 +691,7 @@
 
          /* Generics */
          dest->dwDuration = hap_periodic->length * 1000; /* In microseconds. */
-         dest->dwTriggerButton = FFJOFS_BUTTON(hap_periodic->button);
+         dest->dwTriggerButton = FFGetTriggerButton(hap_periodic->button);
          dest->dwTriggerRepeatInterval = hap_periodic->interval;
          dest->dwStartDelay = hap_periodic->delay * 1000; /* In microseconds. */
          
@@ -717,7 +734,7 @@
 
          /* Generics */
          dest->dwDuration = hap_condition->length * 1000; /* In microseconds. */
-         dest->dwTriggerButton = FFJOFS_BUTTON(hap_condition->button);
+         dest->dwTriggerButton = FFGetTriggerButton(hap_condition->button);
          dest->dwTriggerRepeatInterval = hap_condition->interval;
          dest->dwStartDelay = hap_condition->delay * 1000; /* In microseconds. */
 
@@ -753,7 +770,7 @@
 
          /* Generics */
          dest->dwDuration = hap_ramp->length * 1000; /* In microseconds. */
-         dest->dwTriggerButton = FFJOFS_BUTTON(hap_ramp->button);
+         dest->dwTriggerButton = FFGetTriggerButton(hap_ramp->button);
          dest->dwTriggerRepeatInterval = hap_ramp->interval;
          dest->dwStartDelay = hap_ramp->delay * 1000; /* In microseconds. */
 
@@ -792,7 +809,7 @@
 
          /* Generics */
          dest->dwDuration = hap_custom->length * 1000; /* In microseconds. */
-         dest->dwTriggerButton = FFJOFS_BUTTON(hap_custom->button);
+         dest->dwTriggerButton = FFGetTriggerButton(hap_custom->button);
          dest->dwTriggerRepeatInterval = hap_custom->interval;
          dest->dwStartDelay = hap_custom->delay * 1000; /* In microseconds. */