testhaptic.c File Reference
`#include <stdlib.h>`
`#include <string.h>`
`#include <ctype.h>`
`#include "SDL.h"`
Include dependency graph for testhaptic.c:

Go to the source code of this file.

## Functions

static void | abort_execution (void)
static void | HapticPrintSupported (SDL_Haptic *haptic)
int | main (int argc, char **argv)
| The entry point of this force feedback demo. More...

## Variables

static SDL_Haptic * | haptic

## Function Documentation

static void abort_execution | ( | void |  | ) |

static

Definition at line 302 of file testhaptic.c.

References haptic, SDL_HapticClose, SDL_Log, and SDL_Quit.

Referenced by main().

{
SDL_Log("\nAborting program execution.\n");
SDL_HapticClose(haptic);
SDL_Quit();
exit(1);
}
SDL_HapticClose
#define SDL_HapticClose
Definition: SDL_dynapi_overrides.h:174
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64
haptic
static SDL_Haptic * haptic
Definition: testhaptic.c:25

static void HapticPrintSupported | ( | SDL_Haptic * | haptic | ) |

static

Definition at line 317 of file testhaptic.c.

References main(), SDL_HAPTIC_AUTOCENTER, SDL_HAPTIC_CONSTANT, SDL_HAPTIC_CUSTOM, SDL_HAPTIC_DAMPER, SDL_HAPTIC_FRICTION, SDL_HAPTIC_GAIN, SDL_HAPTIC_INERTIA, SDL_HAPTIC_LEFTRIGHT, SDL_HAPTIC_RAMP, SDL_HAPTIC_SAWTOOTHDOWN, SDL_HAPTIC_SAWTOOTHUP, SDL_HAPTIC_SINE, SDL_HAPTIC_SPRING, SDL_HAPTIC_STATUS, SDL_HAPTIC_TRIANGLE, SDL_HapticNumEffects, SDL_HapticNumEffectsPlaying, SDL_HapticQuery, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, and SDL_LogError.

Referenced by main().

{
unsigned int supported;
supported = SDL_HapticQuery(haptic);
SDL_Log(" Supported effects [%d effects, %d playing]:\n",
SDL_HapticNumEffects(haptic), SDL_HapticNumEffectsPlaying(haptic));
if (supported & SDL_HAPTIC_CONSTANT)
SDL_Log(" constant\n");
if (supported & SDL_HAPTIC_SINE)
SDL_Log(" sine\n");
/* !!! FIXME: put this back when we have more bits in 2.1 */
/* if (supported & SDL_HAPTIC_SQUARE)
SDL_Log(" square\n"); */
if (supported & SDL_HAPTIC_TRIANGLE)
SDL_Log(" triangle\n");
if (supported & SDL_HAPTIC_SAWTOOTHUP)
SDL_Log(" sawtoothup\n");
if (supported & SDL_HAPTIC_SAWTOOTHDOWN)
SDL_Log(" sawtoothdown\n");
if (supported & SDL_HAPTIC_RAMP)
SDL_Log(" ramp\n");
if (supported & SDL_HAPTIC_FRICTION)
SDL_Log(" friction\n");
if (supported & SDL_HAPTIC_SPRING)
SDL_Log(" spring\n");
if (supported & SDL_HAPTIC_DAMPER)
SDL_Log(" damper\n");
if (supported & SDL_HAPTIC_INERTIA)
SDL_Log(" inertia\n");
if (supported & SDL_HAPTIC_CUSTOM)
SDL_Log(" custom\n");
if (supported & SDL_HAPTIC_LEFTRIGHT)
SDL_Log(" left/right\n");
SDL_Log(" Supported capabilities:\n");
if (supported & SDL_HAPTIC_GAIN)
SDL_Log(" gain\n");
if (supported & SDL_HAPTIC_AUTOCENTER)
SDL_Log(" autocenter\n");
if (supported & SDL_HAPTIC_STATUS)
SDL_Log(" status\n");
}
SDL_HAPTIC_AUTOCENTER
#define SDL_HAPTIC_AUTOCENTER
Device can set autocenter.
Definition: SDL_haptic.h:280
SDL_HAPTIC_GAIN
#define SDL_HAPTIC_GAIN
Device can set global gain.
Definition: SDL_haptic.h:271
SDL_HAPTIC_CUSTOM
#define SDL_HAPTIC_CUSTOM
Custom effect is supported.
Definition: SDL_haptic.h:258
SDL_HAPTIC_TRIANGLE
#define SDL_HAPTIC_TRIANGLE
Triangle wave effect supported.
Definition: SDL_haptic.h:184
SDL_HAPTIC_INERTIA
#define SDL_HAPTIC_INERTIA
Inertia effect supported - uses axes acceleration.
Definition: SDL_haptic.h:241
SDL_HAPTIC_SINE
#define SDL_HAPTIC_SINE
Sine wave effect supported.
Definition: SDL_haptic.h:161
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
SDL_HAPTIC_CONSTANT
#define SDL_HAPTIC_CONSTANT
Constant effect supported.
Definition: SDL_haptic.h:152
haptic
static SDL_Haptic * haptic
Definition: testhaptic.c:25
SDL_HAPTIC_STATUS
#define SDL_HAPTIC_STATUS
Device can be queried for effect status.
Definition: SDL_haptic.h:289
SDL_HapticNumEffectsPlaying
#define SDL_HapticNumEffectsPlaying
Definition: SDL_dynapi_overrides.h:176
SDL_HAPTIC_RAMP
#define SDL_HAPTIC_RAMP
Ramp effect supported.
Definition: SDL_haptic.h:211
SDL_HAPTIC_SPRING
#define SDL_HAPTIC_SPRING
Spring effect supported - uses axes position.
Definition: SDL_haptic.h:221
SDL_HAPTIC_SAWTOOTHUP
#define SDL_HAPTIC_SAWTOOTHUP
Sawtoothup wave effect supported.
Definition: SDL_haptic.h:193
SDL_HapticNumEffects
#define SDL_HapticNumEffects
Definition: SDL_dynapi_overrides.h:175
SDL_HAPTIC_LEFTRIGHT
#define SDL_HAPTIC_LEFTRIGHT
Left/Right effect supported.
Definition: SDL_haptic.h:172
SDL_HAPTIC_FRICTION
#define SDL_HAPTIC_FRICTION
Friction effect supported - uses axes movement.
Definition: SDL_haptic.h:251
SDL_HAPTIC_SAWTOOTHDOWN
#define SDL_HAPTIC_SAWTOOTHDOWN
Sawtoothdown wave effect supported.
Definition: SDL_haptic.h:202
SDL_HapticQuery
#define SDL_HapticQuery
Definition: SDL_dynapi_overrides.h:177
SDL_HAPTIC_DAMPER
#define SDL_HAPTIC_DAMPER
Damper effect supported - uses axes velocity.
Definition: SDL_haptic.h:231

int main | ( | int | argc,
|  | char ** | argv
| ) |  |

The entry point of this force feedback demo.

Parameters

  [in] | argc | Number of arguments.
  [in] | argv | Array of argc arguments.

Definition at line 41 of file testhaptic.c.

References abort_execution(), SDL_HapticConstant::attack_length, SDL_HapticPeriodic::attack_length, SDL_HapticRamp::attack_length, SDL_HapticCondition::center, SDL_HapticEffect::condition, SDL_HapticEffect::constant, SDL_HapticCondition::deadband, SDL_HapticDirection::dir, SDL_HapticConstant::direction, SDL_HapticRamp::direction, SDL_HapticRamp::end, SDL_HapticConstant::fade_length, SDL_HapticPeriodic::fade_length, SDL_HapticRamp::fade_length, haptic, HapticPrintSupported(), i, SDL_HapticLeftRight::large_magnitude, SDL_HapticCondition::left_coeff, SDL_HapticCondition::left_sat, SDL_HapticEffect::leftright, SDL_HapticConstant::length, SDL_HapticPeriodic::length, SDL_HapticCondition::length, SDL_HapticRamp::length, SDL_HapticLeftRight::length, SDL_HapticConstant::level, SDL_HapticPeriodic::magnitude, memset, NULL, SDL_HapticPeriodic::period, SDL_HapticEffect::periodic, SDL_HapticPeriodic::phase, SDL_HapticEffect::ramp, SDL_HapticCondition::right_coeff, SDL_HapticCondition::right_sat, SDL_ClearError, SDL_Delay, SDL_GetError, SDL_HAPTIC_CARTESIAN, SDL_HAPTIC_CONSTANT, SDL_HAPTIC_DAMPER, SDL_HAPTIC_FRICTION, SDL_HAPTIC_INERTIA, SDL_HAPTIC_LEFTRIGHT, SDL_HAPTIC_POLAR, SDL_HAPTIC_RAMP, SDL_HAPTIC_SAWTOOTHUP, SDL_HAPTIC_SINE, SDL_HAPTIC_SPRING, SDL_HapticClose, SDL_HapticName, SDL_HapticNewEffect, SDL_HapticNumAxes, SDL_HapticOpen, SDL_HapticQuery, SDL_HapticRunEffect, SDL_Init, SDL_INIT_HAPTIC, SDL_INIT_JOYSTICK, SDL_INIT_TIMER, SDL_INIT_VIDEO, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_NumHaptics, SDL_Quit, SDL_HapticLeftRight::small_magnitude, SDL_HapticRamp::start, SDL_HapticDirection::type, and SDL_HapticEffect::type.

Referenced by HapticPrintSupported().

{
int i;
char *name;
int index;
SDL_HapticEffect efx[9];
int id[9];
int nefx;
unsigned int supported;
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
name = NULL;
index = -1;
if (argc > 1) {
name = argv[1];
if ((strcmp(name, "--help") == 0) || (strcmp(name, "-h") == 0)) {
SDL_Log("USAGE: %s [device]\n"
"If device is a two-digit number it'll use it as an index, otherwise\n"
"it'll use it as if it were part of the device's name.\n",
argv[0]);
return 0;
}
i = strlen(name);
if ((i < 3) && isdigit(name[0]) && ((i == 1) || isdigit(name[1]))) {
index = atoi(name);
name = NULL;
}
}
/* Initialize the force feedbackness */
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK |
SDL_INIT_HAPTIC);
SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics());
if (SDL_NumHaptics() > 0) {
/* We'll just use index or the first force feedback device found */
if (name == NULL) {
i = (index != -1) ? index : 0;
}
/* Try to find matching device */
else {
for (i = 0; i < SDL_NumHaptics(); i++) {
if (strstr(SDL_HapticName(i), name) != NULL)
break;
}
if (i >= SDL_NumHaptics()) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n",
name);
return 1;
}
}
haptic = SDL_HapticOpen(i);
if (haptic == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n",
SDL_GetError());
return 1;
}
SDL_Log("Device: %s\n", SDL_HapticName(i));
HapticPrintSupported(haptic);
} else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n");
return 1;
}
/* We only want force feedback errors. */
SDL_ClearError();
/* Create effects. */
memset(&efx, 0, sizeof(efx));
nefx = 0;
supported = SDL_HapticQuery(haptic);
SDL_Log("\nUploading effects\n");
/* First we'll try a SINE effect. */
if (supported & SDL_HAPTIC_SINE) {
SDL_Log(" effect %d: Sine Wave\n", nefx);
efx[nefx].type = SDL_HAPTIC_SINE;
efx[nefx].periodic.period = 1000;
efx[nefx].periodic.magnitude = -0x2000; /* Negative magnitude and ... */
efx[nefx].periodic.phase = 18000; /* ... 180 degrees phase shift => cancel eachother */
efx[nefx].periodic.length = 5000;
efx[nefx].periodic.attack_length = 1000;
efx[nefx].periodic.fade_length = 1000;
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* Now we'll try a SAWTOOTHUP */
if (supported & SDL_HAPTIC_SAWTOOTHUP) {
SDL_Log(" effect %d: Sawtooth Up\n", nefx);
efx[nefx].type = SDL_HAPTIC_SAWTOOTHUP;
efx[nefx].periodic.period = 500;
efx[nefx].periodic.magnitude = 0x5000;
efx[nefx].periodic.length = 5000;
efx[nefx].periodic.attack_length = 1000;
efx[nefx].periodic.fade_length = 1000;
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* Now the classical constant effect. */
if (supported & SDL_HAPTIC_CONSTANT) {
SDL_Log(" effect %d: Constant Force\n", nefx);
efx[nefx].type = SDL_HAPTIC_CONSTANT;
efx[nefx].constant.direction.type = SDL_HAPTIC_POLAR;
efx[nefx].constant.direction.dir[0] = 20000; /* Force comes from the south-west. */
efx[nefx].constant.length = 5000;
efx[nefx].constant.level = 0x6000;
efx[nefx].constant.attack_length = 1000;
efx[nefx].constant.fade_length = 1000;
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* The cute spring effect. */
if (supported & SDL_HAPTIC_SPRING) {
SDL_Log(" effect %d: Condition Spring\n", nefx);
efx[nefx].type = SDL_HAPTIC_SPRING;
efx[nefx].condition.length = 5000;
for (i = 0; i < SDL_HapticNumAxes(haptic); i++) {
efx[nefx].condition.right_sat[i] = 0xFFFF;
efx[nefx].condition.left_sat[i] = 0xFFFF;
efx[nefx].condition.right_coeff[i] = 0x2000;
efx[nefx].condition.left_coeff[i] = 0x2000;
efx[nefx].condition.center[i] = 0x1000; /* Displace the center for it to move. */
}
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* The interesting damper effect. */
if (supported & SDL_HAPTIC_DAMPER) {
SDL_Log(" effect %d: Condition Damper\n", nefx);
efx[nefx].type = SDL_HAPTIC_DAMPER;
efx[nefx].condition.length = 5000;
for (i = 0; i < SDL_HapticNumAxes(haptic); i++) {
efx[nefx].condition.right_sat[i] = 0xFFFF;
efx[nefx].condition.left_sat[i] = 0xFFFF;
efx[nefx].condition.right_coeff[i] = 0x2000;
efx[nefx].condition.left_coeff[i] = 0x2000;
}
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* The pretty awesome inertia effect. */
if (supported & SDL_HAPTIC_INERTIA) {
SDL_Log(" effect %d: Condition Inertia\n", nefx);
efx[nefx].type = SDL_HAPTIC_INERTIA;
efx[nefx].condition.length = 5000;
for (i = 0; i < SDL_HapticNumAxes(haptic); i++) {
efx[nefx].condition.right_sat[i] = 0xFFFF;
efx[nefx].condition.left_sat[i] = 0xFFFF;
efx[nefx].condition.right_coeff[i] = 0x2000;
efx[nefx].condition.left_coeff[i] = 0x2000;
efx[nefx].condition.deadband[i] = 0x1000; /* 1/16th of axis-range around the center is 'dead'. */
}
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* The hot friction effect. */
if (supported & SDL_HAPTIC_FRICTION) {
SDL_Log(" effect %d: Condition Friction\n", nefx);
efx[nefx].type = SDL_HAPTIC_FRICTION;
efx[nefx].condition.length = 5000;
for (i = 0; i < SDL_HapticNumAxes(haptic); i++) {
efx[nefx].condition.right_sat[i] = 0xFFFF;
efx[nefx].condition.left_sat[i] = 0xFFFF;
efx[nefx].condition.right_coeff[i] = 0x2000;
efx[nefx].condition.left_coeff[i] = 0x2000;
}
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* Now we'll try a ramp effect */
if (supported & SDL_HAPTIC_RAMP) {
SDL_Log(" effect %d: Ramp\n", nefx);
efx[nefx].type = SDL_HAPTIC_RAMP;
efx[nefx].ramp.direction.type = SDL_HAPTIC_CARTESIAN;
efx[nefx].ramp.direction.dir[0] = 1; /* Force comes from */
efx[nefx].ramp.direction.dir[1] = -1; /* the north-east. */
efx[nefx].ramp.length = 5000;
efx[nefx].ramp.start = 0x4000;
efx[nefx].ramp.end = -0x4000;
efx[nefx].ramp.attack_length = 1000;
efx[nefx].ramp.fade_length = 1000;
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
/* Finally we'll try a left/right effect. */
if (supported & SDL_HAPTIC_LEFTRIGHT) {
SDL_Log(" effect %d: Left/Right\n", nefx);
efx[nefx].type = SDL_HAPTIC_LEFTRIGHT;
efx[nefx].leftright.length = 5000;
efx[nefx].leftright.large_magnitude = 0x3000;
efx[nefx].leftright.small_magnitude = 0xFFFF;
id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]);
if (id[nefx] < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError());
abort_execution();
}
nefx++;
}
SDL_Log
("\nNow playing effects for 5 seconds each with 1 second delay between\n");
for (i = 0; i < nefx; i++) {
SDL_Log(" Playing effect %d\n", i);
SDL_HapticRunEffect(haptic, id[i], 1);
SDL_Delay(6000); /* Effects only have length 5000 */
}
/* Quit */
if (haptic != NULL)
SDL_HapticClose(haptic);
SDL_Quit();
return 0;
}
SDL_HapticPeriodic::period
Uint16 period
Definition: SDL_haptic.h:553
SDL_HapticCondition::deadband
Uint16 deadband[3]
Definition: SDL_haptic.h:609
SDL_ClearError
#define SDL_ClearError
Definition: SDL_dynapi_overrides.h:120
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:119
SDL_HapticNewEffect
#define SDL_HapticNewEffect
Definition: SDL_dynapi_overrides.h:180
SDL_INIT_JOYSTICK
#define SDL_INIT_JOYSTICK
Definition: SDL.h:78
SDL_HapticPeriodic::length
Uint32 length
Definition: SDL_haptic.h:545
HapticPrintSupported
static void HapticPrintSupported(SDL_Haptic *haptic)
Definition: testhaptic.c:317
SDL_HapticRamp::end
Sint16 end
Definition: SDL_haptic.h:642
SDL_HAPTIC_INERTIA
#define SDL_HAPTIC_INERTIA
Inertia effect supported - uses axes acceleration.
Definition: SDL_haptic.h:241
SDL_HapticEffect::ramp
SDL_HapticRamp ramp
Definition: SDL_haptic.h:792
SDL_HapticOpen
#define SDL_HapticOpen
Definition: SDL_dynapi_overrides.h:167
memset
#define memset
Definition: SDL_malloc.c:639
SDL_HapticConstant::attack_length
Uint16 attack_length
Definition: SDL_haptic.h:473
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_HapticCondition::left_coeff
Sint16 left_coeff[3]
Definition: SDL_haptic.h:608
SDL_HapticLeftRight::small_magnitude
Uint16 small_magnitude
Definition: SDL_haptic.h:673
SDL_HapticCondition::right_sat
Uint16 right_sat[3]
Definition: SDL_haptic.h:605
SDL_HapticCondition::right_coeff
Sint16 right_coeff[3]
Definition: SDL_haptic.h:607
SDL_HapticDirection::type
Uint8 type
Definition: SDL_haptic.h:439
SDL_HAPTIC_SINE
#define SDL_HAPTIC_SINE
Sine wave effect supported.
Definition: SDL_haptic.h:161
SDL_HapticClose
#define SDL_HapticClose
Definition: SDL_dynapi_overrides.h:174
SDL_HapticRunEffect
#define SDL_HapticRunEffect
Definition: SDL_dynapi_overrides.h:182
SDL_HapticRamp::length
Uint32 length
Definition: SDL_haptic.h:633
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:42
SDL_HAPTIC_CARTESIAN
#define SDL_HAPTIC_CARTESIAN
Uses cartesian coordinates for the direction.
Definition: SDL_haptic.h:317
SDL_HapticPeriodic::fade_length
Uint16 fade_length
Definition: SDL_haptic.h:561
SDL_HapticEffect::condition
SDL_HapticCondition condition
Definition: SDL_haptic.h:791
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
SDL_HapticConstant::level
Sint16 level
Definition: SDL_haptic.h:470
SDL_HapticEffect
The generic template for any haptic effect.
Definition: SDL_haptic.h:785
SDL_HAPTIC_CONSTANT
#define SDL_HAPTIC_CONSTANT
Constant effect supported.
Definition: SDL_haptic.h:152
SDL_HapticName
#define SDL_HapticName
Definition: SDL_dynapi_overrides.h:166
SDL_HapticCondition::length
Uint32 length
Definition: SDL_haptic.h:597
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64
SDL_HAPTIC_POLAR
#define SDL_HAPTIC_POLAR
Uses polar coordinates for the direction.
Definition: SDL_haptic.h:310
SDL_HapticEffect::constant
SDL_HapticConstant constant
Definition: SDL_haptic.h:789
abort_execution
static void abort_execution(void)
Definition: testhaptic.c:302
SDL_HapticDirection::dir
Sint32 dir[3]
Definition: SDL_haptic.h:440
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
SDL_HapticConstant::length
Uint32 length
Definition: SDL_haptic.h:462
SDL_HapticRamp::direction
SDL_HapticDirection direction
Definition: SDL_haptic.h:630
SDL_HapticEffect::type
Uint16 type
Definition: SDL_haptic.h:788
SDL_HapticNumAxes
#define SDL_HapticNumAxes
Definition: SDL_dynapi_overrides.h:178
index
GLuint index
Definition: SDL_opengl_glext.h:660
SDL_Delay
#define SDL_Delay
Definition: SDL_dynapi_overrides.h:490
SDL_HapticRamp::attack_length
Uint16 attack_length
Definition: SDL_haptic.h:645
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:242
SDL_HapticRamp::fade_length
Uint16 fade_length
Definition: SDL_haptic.h:647
NULL
#define NULL
Definition: begin_code.h:143
haptic
static SDL_Haptic * haptic
Definition: testhaptic.c:25
SDL_INIT_TIMER
#define SDL_INIT_TIMER
Definition: SDL.h:75
SDL_HapticEffect::leftright
SDL_HapticLeftRight leftright
Definition: SDL_haptic.h:793
SDL_HapticPeriodic::magnitude
Sint16 magnitude
Definition: SDL_haptic.h:554
SDL_HAPTIC_RAMP
#define SDL_HAPTIC_RAMP
Ramp effect supported.
Definition: SDL_haptic.h:211
SDL_HAPTIC_SPRING
#define SDL_HAPTIC_SPRING
Spring effect supported - uses axes position.
Definition: SDL_haptic.h:221
SDL_HapticPeriodic::attack_length
Uint16 attack_length
Definition: SDL_haptic.h:559
SDL_HapticRamp::start
Sint16 start
Definition: SDL_haptic.h:641
SDL_NumHaptics
#define SDL_NumHaptics
Definition: SDL_dynapi_overrides.h:165
SDL_Init
#define SDL_Init
Definition: SDL_dynapi_overrides.h:60
SDL_HapticCondition::center
Sint16 center[3]
Definition: SDL_haptic.h:610
SDL_HAPTIC_SAWTOOTHUP
#define SDL_HAPTIC_SAWTOOTHUP
Sawtoothup wave effect supported.
Definition: SDL_haptic.h:193
SDL_INIT_HAPTIC
#define SDL_INIT_HAPTIC
Definition: SDL.h:79
SDL_HapticLeftRight::large_magnitude
Uint16 large_magnitude
Definition: SDL_haptic.h:672
SDL_HAPTIC_LEFTRIGHT
#define SDL_HAPTIC_LEFTRIGHT
Left/Right effect supported.
Definition: SDL_haptic.h:172
SDL_HapticEffect::periodic
SDL_HapticPeriodic periodic
Definition: SDL_haptic.h:790
SDL_HapticLeftRight::length
Uint32 length
Definition: SDL_haptic.h:669
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_HAPTIC_FRICTION
#define SDL_HAPTIC_FRICTION
Friction effect supported - uses axes movement.
Definition: SDL_haptic.h:251
SDL_HapticQuery
#define SDL_HapticQuery
Definition: SDL_dynapi_overrides.h:177
SDL_INIT_VIDEO
#define SDL_INIT_VIDEO
Definition: SDL.h:77
SDL_HapticPeriodic::phase
Uint16 phase
Definition: SDL_haptic.h:556
SDL_HapticConstant::fade_length
Uint16 fade_length
Definition: SDL_haptic.h:475
SDL_HapticConstant::direction
SDL_HapticDirection direction
Definition: SDL_haptic.h:459
SDL_HAPTIC_DAMPER
#define SDL_HAPTIC_DAMPER
Damper effect supported - uses axes velocity.
Definition: SDL_haptic.h:231
SDL_HapticCondition::left_sat
Uint16 left_sat[3]
Definition: SDL_haptic.h:606

## Variable Documentation

SDL_Haptic* haptic

static

Definition at line 25 of file testhaptic.c.

Referenced by abort_execution(), main(), SDL_HapticOpen(), and SDL_HapticOpenFromJoystick().