mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-23 06:15:35 +00:00
Fixed potential clobbering of packets of different types using SDL_HIDAPI_SendRumble()
This commit is contained in:
parent
e45cb5b1e2
commit
38af459dd9
|
@ -615,7 +615,9 @@ HIDAPI_DriverPS4_TickleBluetooth(SDL_HIDAPI_Device *device)
|
|||
data[0] = k_EPS4ReportIdBluetoothEffects;
|
||||
data[1] = 0xC0; /* Magic value HID + CRC */
|
||||
|
||||
SDL_HIDAPI_SendRumble(device, data, sizeof(data));
|
||||
if (SDL_HIDAPI_LockRumble() == 0) {
|
||||
SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -746,7 +746,9 @@ HIDAPI_DriverPS5_TickleBluetooth(SDL_HIDAPI_Device *device)
|
|||
data[0] = k_EPS5ReportIdBluetoothEffects;
|
||||
data[1] = 0x02; /* Magic value */
|
||||
|
||||
SDL_HIDAPI_SendRumble(device, data, sizeof(data));
|
||||
if (SDL_HIDAPI_LockRumble() == 0) {
|
||||
SDL_HIDAPI_SendRumbleAndUnlock(device, data, sizeof(data));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -240,19 +240,18 @@ int SDL_HIDAPI_SendRumble(SDL_HIDAPI_Device *device, const Uint8 *data, int size
|
|||
int *pending_size;
|
||||
int maximum_size;
|
||||
|
||||
if (size <= 0) {
|
||||
return SDL_SetError("Tried to send rumble with invalid size");
|
||||
}
|
||||
|
||||
if (SDL_HIDAPI_LockRumble() < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* check if there is a pending request for the device and update it */
|
||||
if (SDL_HIDAPI_GetPendingRumbleLocked(device, &pending_data, &pending_size, &maximum_size)) {
|
||||
if (size > maximum_size) {
|
||||
SDL_HIDAPI_UnlockRumble();
|
||||
return SDL_SetError("Couldn't send rumble, size %d is greater than %d", size, maximum_size);
|
||||
}
|
||||
|
||||
if (SDL_HIDAPI_GetPendingRumbleLocked(device, &pending_data, &pending_size, &maximum_size) &&
|
||||
size == *pending_size && data[0] == pending_data[0]) {
|
||||
SDL_memcpy(pending_data, data, size);
|
||||
*pending_size = size;
|
||||
SDL_HIDAPI_UnlockRumble();
|
||||
return size;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue