Made SDL_HapticEffect const in the API

Also added some additional parameter validation to haptic effect functions
This commit is contained in:
Sam Lantinga 2024-01-21 10:56:32 -08:00
parent fa5bfe577c
commit 052b958bf2
11 changed files with 61 additions and 49 deletions

View File

@ -1090,7 +1090,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumHapticAxes(SDL_Haptic *haptic);
* \sa SDL_CreateHapticEffect
* \sa SDL_GetHapticFeatures
*/
extern DECLSPEC SDL_bool SDLCALL SDL_HapticEffectSupported(SDL_Haptic *haptic, SDL_HapticEffect *effect);
extern DECLSPEC SDL_bool SDLCALL SDL_HapticEffectSupported(SDL_Haptic *haptic, const SDL_HapticEffect *effect);
/**
* Create a new haptic effect on a specified device.
@ -1107,7 +1107,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HapticEffectSupported(SDL_Haptic *haptic, S
* \sa SDL_RunHapticEffect
* \sa SDL_UpdateHapticEffect
*/
extern DECLSPEC int SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, SDL_HapticEffect *effect);
extern DECLSPEC int SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, const SDL_HapticEffect *effect);
/**
* Update the properties of an effect.
@ -1130,7 +1130,7 @@ extern DECLSPEC int SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, SDL_Hapti
* \sa SDL_CreateHapticEffect
* \sa SDL_RunHapticEffect
*/
extern DECLSPEC int SDLCALL SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, SDL_HapticEffect *data);
extern DECLSPEC int SDLCALL SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, const SDL_HapticEffect *data);
/**
* Run the haptic effect on its associated haptic device.

View File

@ -437,9 +437,9 @@ SDL_DYNAPI_PROC(SDL_YUV_CONVERSION_MODE,SDL_GetYUVConversionMode,(void),(),retur
SDL_DYNAPI_PROC(SDL_YUV_CONVERSION_MODE,SDL_GetYUVConversionModeForResolution,(int a, int b),(a,b),return)
SDL_DYNAPI_PROC(void,SDL_CloseHaptic,(SDL_Haptic *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyHapticEffect,(SDL_Haptic *a, int b),(a,b),)
SDL_DYNAPI_PROC(SDL_bool,SDL_HapticEffectSupported,(SDL_Haptic *a, SDL_HapticEffect *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_HapticEffectSupported,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetHapticEffectStatus,(SDL_Haptic *a, int b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_CreateHapticEffect,(SDL_Haptic *a, SDL_HapticEffect *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_CreateHapticEffect,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_GetNumHapticAxes,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffects,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_GetMaxHapticEffectsPlaying,(SDL_Haptic *a),(a),return)
@ -458,7 +458,7 @@ SDL_DYNAPI_PROC(int,SDL_SetHapticGain,(SDL_Haptic *a, int b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_StopHapticEffects,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_StopHapticEffect,(SDL_Haptic *a, int b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_ResumeHaptic,(SDL_Haptic *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_UpdateHapticEffect,(SDL_Haptic *a, int b, SDL_HapticEffect *c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_UpdateHapticEffect,(SDL_Haptic *a, int b, const SDL_HapticEffect *c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_HasARMSIMD,(void),(),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX,(void),(),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX2,(void),(),return)

View File

@ -380,22 +380,30 @@ int SDL_GetNumHapticAxes(SDL_Haptic *haptic)
return haptic->naxes;
}
SDL_bool SDL_HapticEffectSupported(SDL_Haptic *haptic, SDL_HapticEffect *effect)
SDL_bool SDL_HapticEffectSupported(SDL_Haptic *haptic, const SDL_HapticEffect *effect)
{
CHECK_HAPTIC_MAGIC(haptic, SDL_FALSE);
if (!effect) {
return SDL_FALSE;
}
if ((haptic->supported & effect->type) != 0) {
return SDL_TRUE;
}
return SDL_FALSE;
}
int SDL_CreateHapticEffect(SDL_Haptic *haptic, SDL_HapticEffect *effect)
int SDL_CreateHapticEffect(SDL_Haptic *haptic, const SDL_HapticEffect *effect)
{
int i;
CHECK_HAPTIC_MAGIC(haptic, -1);
if (!effect) {
return SDL_InvalidParamError("effect");
}
/* Check to see if effect is supported */
if (SDL_HapticEffectSupported(haptic, effect) == SDL_FALSE) {
return SDL_SetError("Haptic: Effect not supported by haptic device.");
@ -428,7 +436,7 @@ static int ValidEffect(SDL_Haptic *haptic, int effect)
return 1;
}
int SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, SDL_HapticEffect *data)
int SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, const SDL_HapticEffect *data)
{
CHECK_HAPTIC_MAGIC(haptic, -1);
@ -436,6 +444,10 @@ int SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, SDL_HapticEffect *dat
return -1;
}
if (!data) {
return SDL_InvalidParamError("data");
}
/* Can't change type dynamically. */
if (data->type != haptic->effects[effect].effect.type) {
return SDL_SetError("Haptic: Updating effect type is illegal.");

View File

@ -134,7 +134,7 @@ extern void SDL_SYS_HapticQuit(void);
*/
extern int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *base);
const SDL_HapticEffect *base);
/*
* Updates the haptic effect on the haptic device using data
@ -144,7 +144,7 @@ extern int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic,
*/
extern int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *data);
const SDL_HapticEffect *data);
/*
* Runs the effect on the haptic device.

View File

@ -201,14 +201,14 @@ void SDL_SYS_HapticQuit(void)
}
int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic,
struct haptic_effect *effect, SDL_HapticEffect *base)
struct haptic_effect *effect, const SDL_HapticEffect *base)
{
return 0;
}
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *data)
const SDL_HapticEffect *data)
{
return 0;
}

View File

@ -709,7 +709,7 @@ static DWORD FFGetTriggerButton(Uint16 button)
/*
* Sets the direction.
*/
static int SDL_SYS_SetDirection(FFEFFECT *effect, SDL_HapticDirection *dir, int naxes)
static int SDL_SYS_SetDirection(FFEFFECT *effect, const SDL_HapticDirection *dir, int naxes)
{
LONG *rglDir;
@ -770,7 +770,7 @@ static int SDL_SYS_SetDirection(FFEFFECT *effect, SDL_HapticDirection *dir, int
/*
* Creates the FFEFFECT from a SDL_HapticEffect.
*/
static int SDL_SYS_ToFFEFFECT(SDL_Haptic *haptic, FFEFFECT *dest, SDL_HapticEffect *src)
static int SDL_SYS_ToFFEFFECT(SDL_Haptic *haptic, FFEFFECT *dest, const SDL_HapticEffect *src)
{
int i;
FFCONSTANTFORCE *constant = NULL;
@ -779,11 +779,11 @@ static int SDL_SYS_ToFFEFFECT(SDL_Haptic *haptic, FFEFFECT *dest, SDL_HapticEffe
FFRAMPFORCE *ramp = NULL;
FFCUSTOMFORCE *custom = NULL;
FFENVELOPE *envelope = NULL;
SDL_HapticConstant *hap_constant = NULL;
SDL_HapticPeriodic *hap_periodic = NULL;
SDL_HapticCondition *hap_condition = NULL;
SDL_HapticRamp *hap_ramp = NULL;
SDL_HapticCustom *hap_custom = NULL;
const SDL_HapticConstant *hap_constant = NULL;
const SDL_HapticPeriodic *hap_periodic = NULL;
const SDL_HapticCondition *hap_condition = NULL;
const SDL_HapticRamp *hap_ramp = NULL;
const SDL_HapticCustom *hap_custom = NULL;
DWORD *axes = NULL;
/* Set global stuff. */
@ -1115,7 +1115,7 @@ SDL_SYS_HapticEffectType(Uint16 type)
* Creates a new haptic effect.
*/
int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect,
SDL_HapticEffect *base)
const SDL_HapticEffect *base)
{
HRESULT ret;
CFUUIDRef type;
@ -1162,7 +1162,7 @@ err_hweffect:
*/
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *data)
const SDL_HapticEffect *data)
{
HRESULT ret;
FFEffectParameterFlag flags;

View File

@ -87,14 +87,14 @@ void SDL_SYS_HapticQuit(void)
}
int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic,
struct haptic_effect *effect, SDL_HapticEffect *base)
struct haptic_effect *effect, const SDL_HapticEffect *base)
{
return SDL_SYS_LogicError();
}
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *data)
const SDL_HapticEffect *data)
{
return SDL_SYS_LogicError();
}

View File

@ -656,7 +656,7 @@ static Uint16 SDL_SYS_ToButton(Uint16 button)
/*
* Initializes the ff_effect usable direction from a SDL_HapticDirection.
*/
static int SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection *src)
static int SDL_SYS_ToDirection(Uint16 *dest, const SDL_HapticDirection *src)
{
Uint32 tmp;
@ -717,13 +717,13 @@ static int SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection *src)
* Initializes the Linux effect struct from a haptic_effect.
* Values above 32767 (for unsigned) are unspecified so we must clamp.
*/
static int SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect *src)
static int SDL_SYS_ToFFEffect(struct ff_effect *dest, const SDL_HapticEffect *src)
{
SDL_HapticConstant *constant;
SDL_HapticPeriodic *periodic;
SDL_HapticCondition *condition;
SDL_HapticRamp *ramp;
SDL_HapticLeftRight *leftright;
const SDL_HapticConstant *constant;
const SDL_HapticPeriodic *periodic;
const SDL_HapticCondition *condition;
const SDL_HapticRamp *ramp;
const SDL_HapticLeftRight *leftright;
/* Clear up */
SDL_memset(dest, 0, sizeof(struct ff_effect));
@ -917,7 +917,7 @@ static int SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect *src)
* Creates a new haptic effect.
*/
int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect,
SDL_HapticEffect *base)
const SDL_HapticEffect *base)
{
struct ff_effect *linux_effect;
@ -958,7 +958,7 @@ new_effect_err:
*/
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
struct haptic_effect *effect,
SDL_HapticEffect *data)
const SDL_HapticEffect *data)
{
struct ff_effect linux_effect;

View File

@ -524,7 +524,7 @@ static DWORD DIGetTriggerButton(Uint16 button)
/*
* Sets the direction.
*/
static int SDL_SYS_SetDirection(DIEFFECT *effect, SDL_HapticDirection *dir, int naxes)
static int SDL_SYS_SetDirection(DIEFFECT *effect, const SDL_HapticDirection *dir, int naxes)
{
LONG *rglDir;
@ -586,7 +586,7 @@ static int SDL_SYS_SetDirection(DIEFFECT *effect, SDL_HapticDirection *dir, int
* Creates the DIEFFECT from a SDL_HapticEffect.
*/
static int SDL_SYS_ToDIEFFECT(SDL_Haptic *haptic, DIEFFECT *dest,
SDL_HapticEffect *src)
const SDL_HapticEffect *src)
{
int i;
DICONSTANTFORCE *constant;
@ -595,11 +595,11 @@ static int SDL_SYS_ToDIEFFECT(SDL_Haptic *haptic, DIEFFECT *dest,
DIRAMPFORCE *ramp;
DICUSTOMFORCE *custom;
DIENVELOPE *envelope;
SDL_HapticConstant *hap_constant;
SDL_HapticPeriodic *hap_periodic;
SDL_HapticCondition *hap_condition;
SDL_HapticRamp *hap_ramp;
SDL_HapticCustom *hap_custom;
const SDL_HapticConstant *hap_constant;
const SDL_HapticPeriodic *hap_periodic;
const SDL_HapticCondition *hap_condition;
const SDL_HapticRamp *hap_ramp;
const SDL_HapticCustom *hap_custom;
DWORD *axes;
/* Set global stuff. */
@ -878,7 +878,7 @@ static void SDL_SYS_HapticFreeDIEFFECT(DIEFFECT *effect, int type)
* Gets the effect type from the generic SDL haptic effect wrapper.
*/
/* NOLINTNEXTLINE(readability-const-return-type): Can't fix Windows' headers */
static REFGUID SDL_SYS_HapticEffectType(SDL_HapticEffect *effect)
static REFGUID SDL_SYS_HapticEffectType(const SDL_HapticEffect *effect)
{
switch (effect->type) {
case SDL_HAPTIC_CONSTANT:
@ -921,7 +921,7 @@ static REFGUID SDL_SYS_HapticEffectType(SDL_HapticEffect *effect)
return NULL;
}
}
int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *base)
int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *base)
{
HRESULT ret;
REFGUID type = SDL_SYS_HapticEffectType(base);
@ -951,7 +951,7 @@ err_effectdone:
return -1;
}
int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *data)
int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *data)
{
HRESULT ret;
DWORD flags;
@ -1186,12 +1186,12 @@ void SDL_DINPUT_HapticQuit(void)
{
}
int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *base)
int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *base)
{
return SDL_Unsupported();
}
int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *data)
int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *data)
{
return SDL_Unsupported();
}

View File

@ -35,8 +35,8 @@ extern int SDL_DINPUT_JoystickSameHaptic(SDL_Haptic *haptic, SDL_Joystick *joyst
extern int SDL_DINPUT_HapticOpenFromJoystick(SDL_Haptic *haptic, SDL_Joystick *joystick);
extern void SDL_DINPUT_HapticClose(SDL_Haptic *haptic);
extern void SDL_DINPUT_HapticQuit(void);
extern int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *base);
extern int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *data);
extern int SDL_DINPUT_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *base);
extern int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *data);
extern int SDL_DINPUT_HapticRunEffect(SDL_Haptic *haptic, struct haptic_effect *effect, Uint32 iterations);
extern int SDL_DINPUT_HapticStopEffect(SDL_Haptic *haptic, struct haptic_effect *effect);
extern void SDL_DINPUT_HapticDestroyEffect(SDL_Haptic *haptic, struct haptic_effect *effect);

View File

@ -261,7 +261,7 @@ void SDL_SYS_HapticQuit(void)
* Creates a new haptic effect.
*/
int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect,
SDL_HapticEffect *base)
const SDL_HapticEffect *base)
{
int result;
@ -282,7 +282,7 @@ int SDL_SYS_HapticNewEffect(SDL_Haptic *haptic, struct haptic_effect *effect,
/*
* Updates an effect.
*/
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, SDL_HapticEffect *data)
int SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *effect, const SDL_HapticEffect *data)
{
return SDL_DINPUT_HapticUpdateEffect(haptic, effect, data);
}