From 2fef0be2f646ae048e239aa6694e632081c85238 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 17 Jul 2023 16:42:58 -0700 Subject: [PATCH] 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 --- src/joystick/hidapi/SDL_hidapi_ps5.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/joystick/hidapi/SDL_hidapi_ps5.c b/src/joystick/hidapi/SDL_hidapi_ps5.c index ea8a3b89b5..ab2f6bf954 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps5.c +++ b/src/joystick/hidapi/SDL_hidapi_ps5.c @@ -738,16 +738,25 @@ static void HIDAPI_DriverPS5_CheckPendingLEDReset(SDL_HIDAPI_Device *device) static void HIDAPI_DriverPS5_TickleBluetooth(SDL_HIDAPI_Device *device) { - /* This is just a dummy packet that should have no effect, since we don't set the CRC */ - Uint8 data[78]; + SDL_DriverPS5_Context *ctx = (SDL_DriverPS5_Context *)device->context; - SDL_zeroa(data); + if (ctx->enhanced_mode) { + /* This is just a dummy packet that should have no effect, since we don't set the CRC */ + Uint8 data[78]; - data[0] = k_EPS5ReportIdBluetoothEffects; - data[1] = 0x02; /* Magic value */ + SDL_zeroa(data); - if (SDL_HIDAPI_LockRumble() == 0) { - SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data)); + data[0] = k_EPS5ReportIdBluetoothEffects; + data[1] = 0x02; /* Magic value */ + + if (SDL_HIDAPI_LockRumble() == 0) { + 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]); + } } }