Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/joystick/SDL_gamepad.c
Original file line number Diff line number Diff line change
Expand Up @@ -1254,7 +1254,7 @@ static GamepadMapping_t *SDL_CreateMappingForHIDAPIGamepad(SDL_GUID guid)
SDL_strlcat(mapping_string, "paddle1:b11,paddle2:b12,", sizeof(mapping_string));
} else if (SDL_IsJoystickSteamTriton(vendor, product)) {
// Second generation Steam controllers have 4 back paddle buttons
SDL_strlcat(mapping_string, "misc1:b11,paddle1:b12,paddle2:b13,paddle3:b14,paddle4:b15", sizeof(mapping_string));
SDL_strlcat(mapping_string, "misc1:b11,paddle1:b12,paddle2:b13,paddle3:b14,paddle4:b15,touchpad:b16,misc2:b17,misc3:b18,misc4:b19,misc5:b20,misc6:b21", sizeof(mapping_string));
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Presumably a misc is being used as the second touchpad? Maybe work a comment.

} else if (SDL_IsJoystickNintendoSwitchPro(vendor, product) ||
SDL_IsJoystickNintendoSwitchProInputOnly(vendor, product)) {
// Nintendo Switch Pro controllers have a screenshot button
Expand Down
81 changes: 58 additions & 23 deletions src/joystick/hidapi/SDL_hidapi_steam_triton.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,17 @@

enum
{
SDL_GAMEPAD_BUTTON_STEAM_DECK_QAM = 11,
SDL_GAMEPAD_BUTTON_STEAM_DECK_RIGHT_PADDLE1,
SDL_GAMEPAD_BUTTON_STEAM_DECK_LEFT_PADDLE1,
SDL_GAMEPAD_BUTTON_STEAM_DECK_RIGHT_PADDLE2,
SDL_GAMEPAD_BUTTON_STEAM_DECK_LEFT_PADDLE2,
SDL_GAMEPAD_BUTTON_TRITON_QAM = 11,
SDL_GAMEPAD_BUTTON_TRITON_RIGHT_PADDLE1,
SDL_GAMEPAD_BUTTON_TRITON_LEFT_PADDLE1,
SDL_GAMEPAD_BUTTON_TRITON_RIGHT_PADDLE2,
SDL_GAMEPAD_BUTTON_TRITON_LEFT_PADDLE2,
SDL_GAMEPAD_BUTTON_TRITON_RIGHT_TOUCHPAD,
SDL_GAMEPAD_BUTTON_TRITON_LEFT_TOUCHPAD,
SDL_GAMEPAD_BUTTON_TRITON_RIGHT_JOYSTICK_TOUCH,
SDL_GAMEPAD_BUTTON_TRITON_LEFT_JOYSTICK_TOUCH,
SDL_GAMEPAD_BUTTON_TRITON_RIGHT_GRIP_TOUCH,
SDL_GAMEPAD_BUTTON_TRITON_LEFT_GRIP_TOUCH,
SDL_GAMEPAD_NUM_TRITON_BUTTONS,
};

Expand Down Expand Up @@ -73,19 +79,18 @@ typedef enum
TRITON_LBUTTON_L5 = 0x00040000,
TRITON_LBUTTON_L = 0x00080000,

/*
STEAM_RIGHTSTICK_FINGERDOWN_MASK, // Right Stick Touch 0x00100000
STEAM_RIGHTPAD_FINGERDOWN_MASK, // Right Pad Touch 0x00200000
STEAM_BUTTON_RIGHTPAD_CLICKED_MASK, // Right Pressure Click 0x00400000
STEAM_RIGHT_TRIGGER_MASK, // Right Trigger Click 0x00800000

STEAM_LEFTSTICK_FINGERDOWN_MASK, // Left Stick Touch 0x01000000
STEAM_LEFTPAD_FINGERDOWN_MASK, // Left Pad Touch 0x02000000
STEAM_BUTTON_LEFTPAD_CLICKED_MASK, // Left Pressure Click 0x04000000
STEAM_LEFT_TRIGGER_MASK, // Left Trigger Click 0x08000000
STEAM_RIGHT_AUX_MASK, // Right Pinky Touch 0x10000000
STEAM_LEFT_AUX_MASK, // Left Pinky Touch 0x20000000
*/
TRITON_RIGHT_JOYSTICK_TOUCH = 0x00100000,
TRITON_RIGHT_TOUCHPAD_TOUCH = 0x00200000,
TRITON_RIGHT_TOUCHPAD_CLICK = 0x00400000,
TRITON_RIGHT_TRIGGER_CLICK = 0x00800000,

TRITON_LEFT_JOYSTICK_TOUCH = 0x01000000,
TRITON_LEFT_TOUCHPAD_TOUCH = 0x02000000,
TRITON_LEFT_TOUCHPAD_CLICK = 0x04000000,
TRITON_LEFT_TRIGGER_CLICK = 0x08000000,

TRITON_RIGHT_GRIP_TOUCH = 0x10000000,
TRITON_LEFT_GRIP_TOUCH = 0x20000000,
} TritonButtons;

typedef struct
Expand Down Expand Up @@ -154,23 +159,38 @@ static void HIDAPI_DriverSteamTriton_HandleState(SDL_HIDAPI_Device *device,
((pTritonReport->buttons & TRITON_LBUTTON_VIEW) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GUIDE,
((pTritonReport->buttons & TRITON_LBUTTON_STEAM) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_STEAM_DECK_QAM,
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_QAM,
((pTritonReport->buttons & TRITON_HBUTTON_QAM) != 0));

SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_LEFT_STICK,
((pTritonReport->buttons & TRITON_LBUTTON_L3) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_RIGHT_STICK,
((pTritonReport->buttons & TRITON_LBUTTON_R3) != 0));

SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_STEAM_DECK_RIGHT_PADDLE1,
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_RIGHT_PADDLE1,
((pTritonReport->buttons & TRITON_HBUTTON_R4) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_STEAM_DECK_LEFT_PADDLE1,
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_LEFT_PADDLE1,
((pTritonReport->buttons & TRITON_HBUTTON_L4) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_STEAM_DECK_RIGHT_PADDLE2,
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_RIGHT_PADDLE2,
((pTritonReport->buttons & TRITON_LBUTTON_R5) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_STEAM_DECK_LEFT_PADDLE2,
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_LEFT_PADDLE2,
((pTritonReport->buttons & TRITON_LBUTTON_L5) != 0));

SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_RIGHT_TOUCHPAD,
((pTritonReport->buttons & TRITON_RIGHT_TOUCHPAD_CLICK) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_LEFT_TOUCHPAD,
((pTritonReport->buttons & TRITON_LEFT_TOUCHPAD_CLICK) != 0));

SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_RIGHT_JOYSTICK_TOUCH,
((pTritonReport->buttons & TRITON_RIGHT_JOYSTICK_TOUCH) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_LEFT_JOYSTICK_TOUCH,
((pTritonReport->buttons & TRITON_LEFT_JOYSTICK_TOUCH) != 0));

SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_RIGHT_GRIP_TOUCH,
((pTritonReport->buttons & TRITON_RIGHT_GRIP_TOUCH) != 0));
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_TRITON_LEFT_GRIP_TOUCH,
((pTritonReport->buttons & TRITON_LEFT_GRIP_TOUCH) != 0));

if (pTritonReport->buttons & TRITON_LBUTTON_DPAD_UP) {
hat |= SDL_HAT_UP;
}
Expand Down Expand Up @@ -220,6 +240,18 @@ static void HIDAPI_DriverSteamTriton_HandleState(SDL_HIDAPI_Device *device,

ctx->last_sensor_tick = pTritonReport->imu.timestamp;
}

SDL_SendJoystickTouchpad(timestamp, joystick, 0, 0,
pTritonReport->sPressureLeft > 0,
pTritonReport->sLeftPadX / 65536.0f + 0.5f,
-(float)pTritonReport->sLeftPadY / 65536.0f + 0.5f,
pTritonReport->sPressureLeft / 32768.0f);

SDL_SendJoystickTouchpad(timestamp, joystick, 1, 0,
pTritonReport->sPressureRight > 0,
pTritonReport->sRightPadX / 65536.0f + 0.5f,
-(float)pTritonReport->sRightPadY / 65536.0f + 0.5f,
pTritonReport->sPressureRight / 32768.0f);
}

static void HIDAPI_DriverSteamTriton_HandleBatteryStatus(SDL_HIDAPI_Device *device,
Expand Down Expand Up @@ -431,6 +463,9 @@ static bool HIDAPI_DriverSteamTriton_OpenJoystick(SDL_HIDAPI_Device *device, SDL
SDL_PrivateJoystickAddSensor(joystick, SDL_SENSOR_GYRO, update_rate_in_hz);
SDL_PrivateJoystickAddSensor(joystick, SDL_SENSOR_ACCEL, update_rate_in_hz);

SDL_PrivateJoystickAddTouchpad(joystick, 1);
SDL_PrivateJoystickAddTouchpad(joystick, 1);

return true;
}

Expand Down
8 changes: 4 additions & 4 deletions src/joystick/hidapi/steam/controller_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -607,11 +607,11 @@ typedef struct

short sLeftPadX;
short sLeftPadY;
unsigned short ucPressureLeft;
unsigned short sPressureLeft;

short sRightPadX;
short sRightPadY;
unsigned short ucPressureRight;
unsigned short sPressureRight;
TritonMTUIMU_t imu;
} TritonMTUFull_t;

Expand All @@ -628,11 +628,11 @@ typedef struct {

short sLeftPadX;
short sLeftPadY;
unsigned short ucPressureLeft;
unsigned short sPressureLeft;

short sRightPadX;
short sRightPadY;
unsigned short ucPressureRight;
unsigned short sPressureRight;
TritonMTUIMUNoQuat_t imu;
} TritonMTUNoQuat_t;

Expand Down
Loading