Update gamepad sensor rate
SDL_HINT_JOYSTICK_HIDAPI_PS4_REPORT_INTERVAL allows to change sensor rate. Make SDL_GetGamepadSensorDataRate() returns the updated value.
This commit is contained in:
parent
e5101ebae6
commit
4c9a91b62e
3 changed files with 20 additions and 2 deletions
|
@ -2023,6 +2023,18 @@ void SDL_PrivateJoystickAddSensor(SDL_Joystick *joystick, SDL_SensorType type, f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SDL_PrivateJoystickSensorRate(SDL_Joystick *joystick, SDL_SensorType type, float rate)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
SDL_AssertJoysticksLocked();
|
||||||
|
|
||||||
|
for (i = 0; i < joystick->nsensors; ++i) {
|
||||||
|
if (joystick->sensors[i].type == type) {
|
||||||
|
joystick->sensors[i].rate = rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id)
|
void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id)
|
||||||
{
|
{
|
||||||
SDL_JoystickDriver *driver;
|
SDL_JoystickDriver *driver;
|
||||||
|
|
|
@ -156,6 +156,7 @@ extern SDL_bool SDL_ShouldIgnoreJoystick(const char *name, SDL_JoystickGUID guid
|
||||||
/* Internal event queueing functions */
|
/* Internal event queueing functions */
|
||||||
extern void SDL_PrivateJoystickAddTouchpad(SDL_Joystick *joystick, int nfingers);
|
extern void SDL_PrivateJoystickAddTouchpad(SDL_Joystick *joystick, int nfingers);
|
||||||
extern void SDL_PrivateJoystickAddSensor(SDL_Joystick *joystick, SDL_SensorType type, float rate);
|
extern void SDL_PrivateJoystickAddSensor(SDL_Joystick *joystick, SDL_SensorType type, float rate);
|
||||||
|
extern void SDL_PrivateJoystickSensorRate(SDL_Joystick *joystick, SDL_SensorType type, float rate);
|
||||||
extern void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id);
|
extern void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id);
|
||||||
extern SDL_bool SDL_IsJoystickBeingAdded(void);
|
extern SDL_bool SDL_IsJoystickBeingAdded(void);
|
||||||
extern void SDL_PrivateJoystickRemoved(SDL_JoystickID instance_id);
|
extern void SDL_PrivateJoystickRemoved(SDL_JoystickID instance_id);
|
||||||
|
|
|
@ -717,8 +717,8 @@ static void HIDAPI_DriverPS4_SetEnhancedModeAvailable(SDL_DriverPS4_Context *ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->sensors_supported) {
|
if (ctx->sensors_supported) {
|
||||||
SDL_PrivateJoystickAddSensor(ctx->joystick, SDL_SENSOR_GYRO, 250.0f);
|
SDL_PrivateJoystickAddSensor(ctx->joystick, SDL_SENSOR_GYRO, (float)(1000 / ctx->report_interval));
|
||||||
SDL_PrivateJoystickAddSensor(ctx->joystick, SDL_SENSOR_ACCEL, 250.0f);
|
SDL_PrivateJoystickAddSensor(ctx->joystick, SDL_SENSOR_ACCEL, (float)(1000 / ctx->report_interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->official_controller) {
|
if (ctx->official_controller) {
|
||||||
|
@ -818,6 +818,10 @@ static void SDLCALL SDL_PS4ReportIntervalHintChanged(void *userdata, const char
|
||||||
ctx->report_interval = (Uint8)new_report_interval;
|
ctx->report_interval = (Uint8)new_report_interval;
|
||||||
|
|
||||||
HIDAPI_DriverPS4_UpdateEffects(ctx, SDL_FALSE);
|
HIDAPI_DriverPS4_UpdateEffects(ctx, SDL_FALSE);
|
||||||
|
SDL_LockJoysticks();
|
||||||
|
SDL_PrivateJoystickSensorRate(ctx->joystick, SDL_SENSOR_GYRO, (float)(1000 / ctx->report_interval));
|
||||||
|
SDL_PrivateJoystickSensorRate(ctx->joystick, SDL_SENSOR_ACCEL, (float)(1000 / ctx->report_interval));
|
||||||
|
SDL_UnlockJoysticks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -849,6 +853,7 @@ static SDL_bool HIDAPI_DriverPS4_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joy
|
||||||
ctx->rumble_left = 0;
|
ctx->rumble_left = 0;
|
||||||
ctx->rumble_right = 0;
|
ctx->rumble_right = 0;
|
||||||
ctx->color_set = SDL_FALSE;
|
ctx->color_set = SDL_FALSE;
|
||||||
|
ctx->report_interval = 4;
|
||||||
SDL_zero(ctx->last_state);
|
SDL_zero(ctx->last_state);
|
||||||
|
|
||||||
/* Initialize player index (needed for setting LEDs) */
|
/* Initialize player index (needed for setting LEDs) */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue