src/haptic/SDL_syshaptic.h
author Sam Lantinga <slouken@libsdl.org>
Sun, 20 Feb 2011 10:54:44 -0800
changeset 5360 220d3af9121f
parent 2713 0906692aa6a4
child 5535 96594ac5fd1a
permissions -rw-r--r--
Simple rumble API for haptic

Edgar Simo 2011-02-20 10:27:52 PST

Adding patch that adds a simplified API for the haptic subsystem built ontop of
the "real one" for those who want simple rumble without jumping through hoops.

Adds 4 functions:

- extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic);
- extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic);
- extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float
strength, Uint32 length );
- extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic);

Also provided is test/testrumble.c which does test this.

This has all been tested on linux and has worked, but due to being built ontop
of the other haptic API it should work on all OS the same.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 2008 Edgar Simo
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 #include "SDL_config.h"
    24 
    25 #include "SDL_haptic.h"
    26 
    27 
    28 /*
    29  * Number of haptic devices on the system.
    30  */
    31 extern Uint8 SDL_numhaptics;
    32 
    33 
    34 struct haptic_effect
    35 {
    36     SDL_HapticEffect effect;    /* The current event */
    37     struct haptic_hweffect *hweffect;   /* The hardware behind the event */
    38 };
    39 
    40 /*
    41  * The real SDL_Haptic struct.
    42  */
    43 struct _SDL_Haptic
    44 {
    45     Uint8 index;                /* Stores index it is attached to */
    46 
    47     struct haptic_effect *effects;      /* Allocated effects */
    48     int neffects;               /* Maximum amount of effects */
    49     int nplaying;               /* Maximum amount of effects to play at the same time */
    50     unsigned int supported;     /* Supported effects */
    51     int naxes;                  /* Number of axes on the device. */
    52 
    53     struct haptic_hwdata *hwdata;       /* Driver dependent */
    54     int ref_count;              /* Count for multiple opens */
    55 
    56     int rumble_id;              /* ID of rumble effect for simple rumble API. */
    57     SDL_HapticEffect rumble_effect; /* Rumble effect. */
    58 };
    59 
    60 /* 
    61  * Scans the system for haptic devices.
    62  *
    63  * Returns 0 on success, -1 on error.
    64  */
    65 extern int SDL_SYS_HapticInit(void);
    66 
    67 /*
    68  * Gets the device dependent name of the haptic device
    69  */
    70 extern const char *SDL_SYS_HapticName(int index);
    71 
    72 /*
    73  * Opens the haptic device for usage.  The haptic device should have
    74  * the index value set previously.
    75  *
    76  * Returns 0 on success, -1 on error.
    77  */
    78 extern int SDL_SYS_HapticOpen(SDL_Haptic * haptic);
    79 
    80 /*
    81  * Returns the index of the haptic core pointer or -1 if none is found.
    82  */
    83 int SDL_SYS_HapticMouse(void);
    84 
    85 /*
    86  * Checks to see if the joystick has haptic capabilities.
    87  *
    88  * Returns >0 if haptic capabilities are detected, 0 if haptic
    89  * capabilities aren't detected and -1 on error.
    90  */
    91 extern int SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick);
    92 
    93 /*
    94  * Opens the haptic device for usage using the same device as
    95  * the joystick.
    96  *
    97  * Returns 0 on success, -1 on error.
    98  */
    99 extern int SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic,
   100                                           SDL_Joystick * joystick);
   101 /*
   102  * Checks to see if haptic device and joystick device are the same.
   103  *
   104  * Returns 1 if they are the same, 0 if they aren't.
   105  */
   106 extern int SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic,
   107                                       SDL_Joystick * joystick);
   108 
   109 /*
   110  * Closes a haptic device after usage.
   111  */
   112 extern void SDL_SYS_HapticClose(SDL_Haptic * haptic);
   113 
   114 /*
   115  * Performs a cleanup on the haptic subsystem.
   116  */
   117 extern void SDL_SYS_HapticQuit(void);
   118 
   119 /*
   120  * Creates a new haptic effect on the haptic device using base
   121  * as a template for the effect.
   122  *
   123  * Returns 0 on success, -1 on error.
   124  */
   125 extern int SDL_SYS_HapticNewEffect(SDL_Haptic * haptic,
   126                                    struct haptic_effect *effect,
   127                                    SDL_HapticEffect * base);
   128 
   129 /*
   130  * Updates the haptic effect on the haptic device using data
   131  * as a template.
   132  *
   133  * Returns 0 on success, -1 on error.
   134  */
   135 extern int SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic,
   136                                       struct haptic_effect *effect,
   137                                       SDL_HapticEffect * data);
   138 
   139 /*
   140  * Runs the effect on the haptic device.
   141  *
   142  * Returns 0 on success, -1 on error.
   143  */
   144 extern int SDL_SYS_HapticRunEffect(SDL_Haptic * haptic,
   145                                    struct haptic_effect *effect,
   146                                    Uint32 iterations);
   147 
   148 /*
   149  * Stops the effect on the haptic device.
   150  *
   151  * Returns 0 on success, -1 on error.
   152  */
   153 extern int SDL_SYS_HapticStopEffect(SDL_Haptic * haptic,
   154                                     struct haptic_effect *effect);
   155 
   156 /*
   157  * Cleanups up the effect on the haptic device.
   158  */
   159 extern void SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic,
   160                                         struct haptic_effect *effect);
   161 
   162 /*
   163  * Queries the device for the status of effect.
   164  *
   165  * Returns 0 if device is stopped, >0 if device is playing and
   166  * -1 on error.
   167  */
   168 extern int SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic,
   169                                          struct haptic_effect *effect);
   170 
   171 /*
   172  * Sets the global gain of the haptic device.
   173  *
   174  * Returns 0 on success, -1 on error.
   175  */
   176 extern int SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain);
   177 
   178 /*
   179  * Sets the autocenter feature of the haptic device.
   180  *
   181  * Returns 0 on success, -1 on error.
   182  */
   183 extern int SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter);
   184 
   185 /*
   186  * Pauses the haptic device.
   187  *
   188  * Returns 0 on success, -1 on error.
   189  */
   190 extern int SDL_SYS_HapticPause(SDL_Haptic * haptic);
   191 
   192 /*
   193  * Unpauses the haptic device.
   194  *
   195  * Returns 0 on success, -1 on error.
   196  */
   197 extern int SDL_SYS_HapticUnpause(SDL_Haptic * haptic);
   198 
   199 /*
   200  * Stops all the currently playing haptic effects on the device.
   201  *
   202  * Returns 0 on success, -1 on error.
   203  */
   204 extern int SDL_SYS_HapticStopAll(SDL_Haptic * haptic);