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

That will put the PS4 controller into enhanced mode, which breaks DirectInput games
main
Sam Lantinga 2023-07-07 15:55:40 -07:00
parent 785f57eb91
commit efed24850a
1 changed files with 16 additions and 7 deletions

View File

@ -643,16 +643,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]);
}
}
}