diff --git a/src/joystick/hidapi/SDL_hidapi_ps4.c b/src/joystick/hidapi/SDL_hidapi_ps4.c index 96a364dc7c..67ab4c9287 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps4.c +++ b/src/joystick/hidapi/SDL_hidapi_ps4.c @@ -661,16 +661,25 @@ static int HIDAPI_DriverPS4_UpdateEffects(SDL_HIDAPI_Device *device) static void HIDAPI_DriverPS4_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_DriverPS4_Context *ctx = (SDL_DriverPS4_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_EPS4ReportIdBluetoothEffects; - data[1] = 0xC0; /* Magic value HID + CRC */ + SDL_zeroa(data); - if (SDL_HIDAPI_LockRumble() == 0) { - SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data)); + data[0] = k_EPS4ReportIdBluetoothEffects; + data[1] = 0xC0; /* Magic value HID + CRC */ + + 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]); + } } }