Mercurial > sdl-ios-xcode
diff src/haptic/darwin/SDL_syshaptic.c @ 2522:0877146be013 gsoc2008_force_feedback
Now compiles cleanly (has yet to work though).
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Tue, 15 Jul 2008 17:35:06 +0000 |
parents | 7aa91c21ce5f |
children | 924a32719b6f |
line wrap: on
line diff
--- a/src/haptic/darwin/SDL_syshaptic.c Tue Jul 15 17:03:34 2008 +0000 +++ b/src/haptic/darwin/SDL_syshaptic.c Tue Jul 15 17:35:06 2008 +0000 @@ -29,7 +29,8 @@ #include "../../joystick/SDL_sysjoystick.h" /* For the real SDL_Joystick */ /*#include "../../joystick/dawrin/SDL_sysjoystick_c.h"*/ /* For joystick hwdata */ -#include <IOKit/IOTypes.h> +#include <IOKit/IOKitLib.h> +#include <IOKit/hid/IOHIDKeys.h> #include <ForceFeedback/ForceFeedback.h> #include <ForceFeedback/ForceFeedbackConstants.h> @@ -165,7 +166,7 @@ /* Check if supports gain. */ ret = FFDeviceGetForceFeedbackProperty(device, FFPROP_FFGAIN, - val, sizeof(val)); + &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."); @@ -174,7 +175,7 @@ /* Checks if supports autocenter. */ ret = FFDeviceGetForceFeedbackProperty(device, FFPROP_AUTOCENTER, - val, sizeof(val)); + &val, sizeof(val)); if (ret == FF_OK) supported |= SDL_HAPTIC_AUTOCENTER; else if (ret != FFERR_UNSUPPORTED) { SDL_SetError("Haptic: Unable to get if device supports autocenter."); @@ -203,7 +204,7 @@ SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); /* Open the device */ - if (FFCreateDevice( &service, &haptic->hwdata->device ) != FF_OK) { + if (FFCreateDevice( service, &haptic->hwdata->device ) != FF_OK) { SDL_SetError("Haptic: Unable to create device from service."); goto creat_err; } @@ -246,7 +247,7 @@ SDL_SYS_HapticOpen(SDL_Haptic * haptic) { return SDL_SYS_HapticOpenFromService(haptic, - SDL_hapticlist[haptic->index].device); + SDL_hapticlist[haptic->index].dev); } @@ -355,13 +356,13 @@ rglDir[0] = dir->dir[0]; return 0; case SDL_HAPTIC_CARTESIAN: - effects->dwFlags |= FFEFF_CARTESIAN; + effect->dwFlags |= FFEFF_CARTESIAN; rglDir[0] = dir->dir[0]; rglDir[1] = dir->dir[1]; rglDir[2] = dir->dir[2]; return 0; case SDL_HAPTIC_SPHERICAL: - effects->dwFlags |= FFEFF_SPHERICAL; + effect->dwFlags |= FFEFF_SPHERICAL; rglDir[0] = dir->dir[0]; rglDir[1] = dir->dir[1]; rglDir[2] = dir->dir[2]; @@ -385,6 +386,7 @@ FFCONDITION *condition; FFRAMPFORCE *ramp; FFCUSTOMFORCE *custom; + FFENVELOPE *envelope; SDL_HapticConstant *hap_constant; SDL_HapticPeriodic *hap_periodic; SDL_HapticCondition *hap_condition; @@ -395,7 +397,16 @@ dest->dwSize = sizeof(FFEFFECT); /* Set the structure size. */ dest->dwSamplePeriod = 0; /* Not used by us. */ dest->dwGain = 10000; /* Gain is set globally, not locally. */ - dest->lpEnvelope.dwSize = sizeof(FFENVELOPE); /* Always should be this. */ + + /* Envelope. */ + envelope = SDL_malloc( sizeof(FFENVELOPE) ); + if (envelope == NULL) { + SDL_OutOfMemory(); + return -1; + } + SDL_memset(envelope, 0, sizeof(FFENVELOPE)); + dest->lpEnvelope = envelope; + envelope->dwSize = sizeof(FFENVELOPE); /* Always should be this. */ switch (src->type) { case SDL_HAPTIC_CONSTANT: @@ -418,15 +429,15 @@ dest->rgdwAxes = 0; /* Direction. */ - if (SDL_SYS_SetDirection(dest, hap_constant->direction, dest->cAxes) < 0) { + if (SDL_SYS_SetDirection(dest, &hap_constant->direction, dest->cAxes) < 0) { return -1; } /* Envelope */ - dest->lpEnvelope.dwAttackLevel = CONVERT(hap_constant->attack_level); - dest->lpEnvelope.dwAttackTime = hap_constant->attack_length * 1000; - dest->lpEnvelope.dwFadeLevel = CONVERT(hap_constant->fade_level); - dest->lpEnvelope.dwFadeTime = hap_constant->fade_length * 1000; + envelope->dwAttackLevel = CONVERT(hap_constant->attack_level); + envelope->dwAttackTime = hap_constant->attack_length * 1000; + envelope->dwFadeLevel = CONVERT(hap_constant->fade_level); + envelope->dwFadeTime = hap_constant->fade_length * 1000; break; @@ -437,7 +448,7 @@ case SDL_HAPTIC_TRIANGLE: case SDL_HAPTIC_SAWTOOTHUP: case SDL_HAPTIC_SAWTOOTHDOWN: - periodic = &src->periodic; + hap_periodic = &src->periodic; break; @@ -445,12 +456,12 @@ case SDL_HAPTIC_DAMPER: case SDL_HAPTIC_INERTIA: case SDL_HAPTIC_FRICTION: - condition = &src->condition; + hap_condition = &src->condition; break; case SDL_HAPTIC_RAMP: - ramp = &src->ramp; + hap_ramp = &src->ramp; break;