Commit 3154d92473651bd72ea39456d567a0876b55a47a

Sam Lantinga 2020-03-30T14:26:21

SDL: plumb previously unused digital trigger bits for PS4 controllers. Victrix fight stick only sets these bits and doesn't send the analog values CR: SamL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
diff --git a/src/joystick/hidapi/SDL_hidapi_ps4.c b/src/joystick/hidapi/SDL_hidapi_ps4.c
index fe21ac0..24d1aa8 100644
--- a/src/joystick/hidapi/SDL_hidapi_ps4.c
+++ b/src/joystick/hidapi/SDL_hidapi_ps4.c
@@ -423,6 +423,15 @@ HIDAPI_DriverPS4_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_
         SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data & 0x80) ? SDL_PRESSED : SDL_RELEASED);
     }
 
+	/* Some fightsticks, ex: Victrix FS Pro will only this these digital trigger bits and not the analog values so this needs to run whenever the
+	   trigger is evaluated
+	*/
+	if ((packet->rgucButtonsHatAndCounter[1] & 0x0C) != 0) {
+		Uint8 data = packet->rgucButtonsHatAndCounter[1];
+		packet->ucTriggerLeft = (data & 0x04) ? 255 : packet->ucTriggerLeft;
+		packet->ucTriggerRight = (data & 0x08) ? 255 : packet->ucTriggerRight;
+	}
+
     if (ctx->last_state.rgucButtonsHatAndCounter[2] != packet->rgucButtonsHatAndCounter[2]) {
         Uint8 data = (packet->rgucButtonsHatAndCounter[2] & 0x03);