diff --git a/src/joystick/hidapi/SDL_hidapi_ps4.c b/src/joystick/hidapi/SDL_hidapi_ps4.c index f2de0efd7..f48f54eff 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps4.c +++ b/src/joystick/hidapi/SDL_hidapi_ps4.c @@ -328,7 +328,7 @@ HIDAPI_DriverPS4_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystic } /* In order to send rumble, we have to send a complete effect packet */ - SDL_memset(data, 0, sizeof(data)); + SDL_zero(data); if (ctx->is_bluetooth) { data[0] = k_EPS4ReportIdBluetoothEffects; diff --git a/src/joystick/hidapi/SDL_hidapi_ps5.c b/src/joystick/hidapi/SDL_hidapi_ps5.c index 3e9b7ac83..a2341dd97 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps5.c +++ b/src/joystick/hidapi/SDL_hidapi_ps5.c @@ -39,7 +39,7 @@ typedef enum { k_EPS5ReportIdState = 0x01, - k_EPS5ReportIDOutput = 0x02, + k_EPS5ReportIDOutput = 0x02, k_EPS5ReportIdBluetoothState = 0x31, } EPS5ReportId; @@ -87,22 +87,6 @@ typedef struct /* There's more unknown data at the end, and a 32-bit CRC on Bluetooth */ } PS5StatePacket_t; -typedef struct -{ - Uint8 ucReportID; - Uint8 ucHeader; - Uint8 ucEnableBits; - Uint8 ucRumbleRight; - Uint8 ucRumbleLeft; - Uint8 rgucUnknown[3]; - Uint8 ucUnknown; - Uint8 ucMuteLED; - Uint8 ucBits; - Uint8 rgucForceFeedbackRight[11]; - Uint8 rgucForceFeedbackLeft[11]; - Uint8 rgucUnknown2[3]; - Uint8 rgucUnknown3[13]; -} PS5OutputReportPacket_t; static void ReadFeatureReport(hid_device *dev, Uint8 report_id) { @@ -198,14 +182,16 @@ HIDAPI_DriverPS5_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick) static int HIDAPI_DriverPS5_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) { - PS5OutputReportPacket_t OutputReport; - SDL_memset( &OutputReport, 0, sizeof( OutputReport ) ); - OutputReport.ucReportID = k_EPS5ReportIDOutput; - OutputReport.ucHeader = 0x7; - OutputReport.ucRumbleLeft = high_frequency_rumble >> 8; - OutputReport.ucRumbleRight = low_frequency_rumble >> 8; + Uint8 data[6]; - if (SDL_HIDAPI_SendRumble(device, &OutputReport, sizeof(OutputReport)) != sizeof(OutputReport)) { + /* This works over USB, not over Bluetooth */ + SDL_zero(data); + data[0] = k_EPS5ReportIDOutput; + data[1] = 0x7; /* Magic value */ + data[3] = (high_frequency_rumble >> 8); + data[4] = (low_frequency_rumble >> 8); + + if (SDL_HIDAPI_SendRumble(device, data, sizeof(data)) != sizeof(data)) { return SDL_SetError("Couldn't send rumble packet"); } return 0;