mirror of https://github.com/encounter/SDL.git
Ignore the PS4 packet CRC if it's not being set correctly
This fixes handling the 8BitDo SN30 Pro with the 2.00 firmware in PS4 mode Fixes https://github.com/libsdl-org/SDL/issues/7270 (cherry picked from commit 3951cae4a56fddcb42ce4141a6518c97fa9125cd) (cherry picked from commit 57ae9f466db41e32c67c5a9a03c28f7803ac02c9)
This commit is contained in:
parent
20e17559e5
commit
2fe5f3239c
|
@ -150,6 +150,7 @@ typedef struct {
|
|||
Uint8 led_blue;
|
||||
Uint16 last_timestamp;
|
||||
Uint64 timestamp;
|
||||
Uint16 valid_crc_packets; /* wrapping counter */
|
||||
PS4StatePacket_t last_state;
|
||||
} SDL_DriverPS4_Context;
|
||||
|
||||
|
@ -1046,7 +1047,18 @@ HIDAPI_DriverPS4_IsPacketValid(SDL_DriverPS4_Context *ctx, Uint8 *data, int size
|
|||
case k_EPS4ReportIdBluetoothState8:
|
||||
case k_EPS4ReportIdBluetoothState9:
|
||||
/* Bluetooth state packets have two additional bytes at the beginning, the first notes if HID data is present */
|
||||
if (size >= 78 && (data[1] & 0x80) && VerifyCRC(data, 78)) {
|
||||
if (size >= 78 && (data[1] & 0x80)) {
|
||||
if (VerifyCRC(data, 78)) {
|
||||
++ctx->valid_crc_packets;
|
||||
} else {
|
||||
if (ctx->valid_crc_packets > 0) {
|
||||
--ctx->valid_crc_packets;
|
||||
}
|
||||
if (ctx->valid_crc_packets >= 3) {
|
||||
/* We're generally getting valid CRC, but failed one */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
return SDL_TRUE;
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue