#include #include #include "../../include/SDL.h" #include "../../include/SDL_haptic.h" int test_haptic( SDL_Joystick *joystick ) { SDL_Haptic *haptic; SDL_HapticEffect effect; int effect_id; // assert(joystick != NULL); // Open the device //haptic = SDL_HapticOpenFromJoystick( joystick ); haptic = SDL_HapticOpen( 0 ); 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 -2; } // Create the effect 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 } int main(void) { SDL_Init(SDL_INIT_JOYSTICK|SDL_INIT_HAPTIC); printf("N: %d\n", SDL_NumJoysticks()); printf("JS: %s\n", SDL_JoystickName(0)); SDL_Joystick *js;// = SDL_JoystickOpen(0); int rval = test_haptic(js); if (rval == -1) printf("Not haptic\n"); else if (rval == -2) printf("No sine\n"); printf("ERROR: %s\n", SDL_GetError()); return EXIT_SUCCESS; }