This is new wiki software and old wiki content. It's a work in progress!
Here's the explanation.
Be gentle, report bugs, leave feedback on pages, or just edit them yourself! Thanks!

SDL Wiki

Force Feedback Support

Include File(s): SDL_haptic.h

Introduction

The SDL haptic subsystem allows you to control haptic (force feedback) devices.

The basic usage is as follows:

1. Initialize the subsystem (SDL_INIT_HAPTIC)
1. Open a haptic device
 a. SDL_HapticOpen() to open from index
 a. SDL_HapticOpenFromJoystick() to open from an existing joystick
1. Create an effect (SDL_HapticEffect)
1. Upload the effect with SDL_HapticNewEffect()
1. Run the effect with SDL_HapticRunEffect()
1. (optional) Free the effect with SDL_HapticDestroyEffect()
1. Close the haptic device with SDL_HapticClose()

Code Examples

Simple rumble example:

SDL_Haptic *haptic;

// Open the device
haptic = SDL_HapticOpen( 0 );
if (haptic == NULL)
   return -1;

// Initialize simple rumble
if (SDL_HapticRumbleInit( haptic ) != 0)
   return -1;

// Play effect at 50% strength for 2 seconds
if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0)
   return -1;
SDL_Delay( 2000 );

// Clean up
SDL_HapticClose( haptic );

Complete example:

int test_haptic( SDL_Joystick * joystick ) {
 SDL_Haptic *haptic;
 SDL_HapticEffect effect;
 int effect_id;

 // Open the device
 haptic = SDL_HapticOpenFromJoystick( joystick );
 if (haptic == NULL) return -1; // Most likely joystick isn't haptic

 // See if it can do sine waves
 if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) {
  SDL_HapticClose(haptic); // No sine effect
  return -1;
 }

 // Create the effect
 SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default
 effect.type = SDL_HAPTIC_SINE;
 effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates
 effect.periodic.direction.dir[0] = 18000; // Force comes from south
 effect.periodic.period = 1000; // 1000 ms
 effect.periodic.magnitude = 20000; // 20000/32767 strength
 effect.periodic.length = 5000; // 5 seconds long
 effect.periodic.attack_length = 1000; // Takes 1 second to get max strength
 effect.periodic.fade_length = 1000; // Takes 1 second to fade away

 // Upload the effect
 effect_id = SDL_HapticNewEffect( haptic, &effect );

 // Test the effect
 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
 SDL_HapticDestroyEffect( haptic, effect_id );

 // Close the device
 SDL_HapticClose(haptic);

 return 0; // Success
}

You can find more information in this blog by Edgar Simo Serra: SDL Haptic In Depth(Archive)

Structures

<<FullSearchCached(category:CategoryStruct CategoryForceFeedback -title:SGStructures)>>

Functions

<<FullSearchCached(category:CategoryForceFeedback -CategoryEnum -CategoryStruct -title:SGFunctions)>>


CategoryCategory


[ edit | delete | history | feedback | raw ]

[ front page | index | search | recent changes | git repo | offline html ]

All wiki content is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
Wiki powered by ghwikipp.