mirror of https://github.com/encounter/SDL.git
Don't rumble Bluetooth PS4 controllers by default, as that switches the controller into extended input report mode, which breaks games that use DirectInput.
This commit is contained in:
parent
16ccff3c56
commit
207428b444
|
@ -487,6 +487,21 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
|
#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - extended reports are not enabled (the default)
|
||||||
|
* "1" - extended reports
|
||||||
|
*
|
||||||
|
* Extended input reports allow rumble on Bluetooth PS4 controllers, but
|
||||||
|
* break DirectInput handling for applications that don't use SDL.
|
||||||
|
*
|
||||||
|
* Once extended reports are enabled, they can not be disabled without
|
||||||
|
* power cycling the controller.
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used.
|
* \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used.
|
||||||
*
|
*
|
||||||
|
|
|
@ -107,6 +107,7 @@ typedef struct {
|
||||||
SDL_bool is_dongle;
|
SDL_bool is_dongle;
|
||||||
SDL_bool is_bluetooth;
|
SDL_bool is_bluetooth;
|
||||||
SDL_bool audio_supported;
|
SDL_bool audio_supported;
|
||||||
|
SDL_bool rumble_supported;
|
||||||
Uint8 volume;
|
Uint8 volume;
|
||||||
Uint32 last_volume_check;
|
Uint32 last_volume_check;
|
||||||
Uint32 rumble_expiration;
|
Uint32 rumble_expiration;
|
||||||
|
@ -297,6 +298,12 @@ HIDAPI_DriverPS4_Init(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id,
|
||||||
ctx->audio_supported = SDL_TRUE;
|
ctx->audio_supported = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->is_bluetooth) {
|
||||||
|
ctx->rumble_supported = SDL_GetHintBoolean(SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, SDL_FALSE);
|
||||||
|
} else {
|
||||||
|
ctx->rumble_supported = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize LED and effect state */
|
/* Initialize LED and effect state */
|
||||||
HIDAPI_DriverPS4_Rumble(joystick, dev, ctx, 0, 0, 0);
|
HIDAPI_DriverPS4_Rumble(joystick, dev, ctx, 0, 0, 0);
|
||||||
|
|
||||||
|
@ -316,6 +323,10 @@ HIDAPI_DriverPS4_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context,
|
||||||
Uint8 data[78];
|
Uint8 data[78];
|
||||||
int report_size, offset;
|
int report_size, offset;
|
||||||
|
|
||||||
|
if (!ctx->rumble_supported) {
|
||||||
|
return SDL_Unsupported();
|
||||||
|
}
|
||||||
|
|
||||||
/* In order to send rumble, we have to send a complete effect packet */
|
/* In order to send rumble, we have to send a complete effect packet */
|
||||||
SDL_memset(data, 0, sizeof(data));
|
SDL_memset(data, 0, sizeof(data));
|
||||||
|
|
||||||
|
@ -517,7 +528,7 @@ HIDAPI_DriverPS4_Update(SDL_Joystick *joystick, hid_device *dev, void *context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (size >= 0);
|
return (size >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue