Don't tickle Bluetooth PS5 controllers in simple mode with an effects packet

That will put the PS5 controller into enhanced mode, which breaks DirectInput games
main
Sam Lantinga 2023-07-17 16:42:58 -07:00
parent 75d4a91aaa
commit 2fef0be2f6
1 changed files with 16 additions and 7 deletions

View File

@ -738,6 +738,9 @@ static void HIDAPI_DriverPS5_CheckPendingLEDReset(SDL_HIDAPI_Device *device)
static void HIDAPI_DriverPS5_TickleBluetooth(SDL_HIDAPI_Device *device) static void HIDAPI_DriverPS5_TickleBluetooth(SDL_HIDAPI_Device *device)
{ {
SDL_DriverPS5_Context *ctx = (SDL_DriverPS5_Context *)device->context;
if (ctx->enhanced_mode) {
/* This is just a dummy packet that should have no effect, since we don't set the CRC */ /* This is just a dummy packet that should have no effect, since we don't set the CRC */
Uint8 data[78]; Uint8 data[78];
@ -749,6 +752,12 @@ static void HIDAPI_DriverPS5_TickleBluetooth(SDL_HIDAPI_Device *device)
if (SDL_HIDAPI_LockRumble() == 0) { if (SDL_HIDAPI_LockRumble() == 0) {
SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data)); SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data));
} }
} else {
/* We can't even send an invalid effects packet, or it will put the controller in enhanced mode */
if (device->num_joysticks > 0) {
HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
}
}
} }
static void HIDAPI_DriverPS5_SetEnhancedMode(SDL_HIDAPI_Device *device, SDL_Joystick *joystick) static void HIDAPI_DriverPS5_SetEnhancedMode(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)