Commit c3c34ea3 authored by Matt Reynolds's avatar Matt Reynolds Committed by Commit Bot

[gamepad] Add DualSense mapping functions

This CL adds standard mapping functions for Sony DualSense Wireless
Controller on Mac, Windows, Linux, and Chrome OS. (No Android
support is included.)

The device has advanced haptics features that are not yet supported.

BUG=1144906

Change-Id: Id2985d18fe426db93e870fcc55351347cb9de78f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515099Reviewed-by: default avatarJames Hollyer <jameshollyer@chromium.org>
Commit-Queue: Matt Reynolds <mattreynolds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824118}
parent 25075bd4
...@@ -139,6 +139,7 @@ constexpr struct GamepadInfo { ...@@ -139,6 +139,7 @@ constexpr struct GamepadInfo {
{0x054c, 0x05c5, kXInputTypeNone}, {0x054c, 0x05c5, kXInputTypeNone},
{0x054c, 0x09cc, kXInputTypeNone}, {0x054c, 0x09cc, kXInputTypeNone},
{0x054c, 0x0ba0, kXInputTypeNone}, {0x054c, 0x0ba0, kXInputTypeNone},
{0x054c, 0x0ce6, kXInputTypeNone},
// Elecom Co., Ltd // Elecom Co., Ltd
{0x056e, 0x2003, kXInputTypeNone}, {0x056e, 0x2003, kXInputTypeNone},
{0x056e, 0x2004, kXInputTypeXbox360}, {0x056e, 0x2004, kXInputTypeXbox360},
......
...@@ -88,6 +88,7 @@ enum class GamepadId : uint32_t { ...@@ -88,6 +88,7 @@ enum class GamepadId : uint32_t {
kSonyProduct05c4 = 0x054c05c4, kSonyProduct05c4 = 0x054c05c4,
kSonyProduct09cc = 0x054c09cc, kSonyProduct09cc = 0x054c09cc,
kSonyProduct0ba0 = 0x054c0ba0, kSonyProduct0ba0 = 0x054c0ba0,
kSonyProduct0ce6 = 0x054c0ce6,
kSteelSeriesBtProduct1419 = 0x01111419, kSteelSeriesBtProduct1419 = 0x01111419,
kSteelSeriesProduct1412 = 0x10381412, kSteelSeriesProduct1412 = 0x10381412,
kSteelSeriesProduct1418 = 0x10381418, kSteelSeriesProduct1418 = 0x10381418,
......
...@@ -298,6 +298,39 @@ void MapperDualshock4New(const Gamepad& input, Gamepad* mapped) { ...@@ -298,6 +298,39 @@ void MapperDualshock4New(const Gamepad& input, Gamepad* mapped) {
mapped->axes_length = AXIS_INDEX_COUNT; mapped->axes_length = AXIS_INDEX_COUNT;
} }
void MapperDualSense(const Gamepad& input, Gamepad* mapped) {
enum DualSenseButtons {
DUAL_SENSE_BUTTON_TOUCHPAD = BUTTON_INDEX_COUNT,
DUAL_SENSE_BUTTON_COUNT
};
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
mapped->buttons[BUTTON_INDEX_SECONDARY] = input.buttons[2];
mapped->buttons[BUTTON_INDEX_TERTIARY] = input.buttons[0];
mapped->buttons[BUTTON_INDEX_QUATERNARY] = input.buttons[3];
mapped->buttons[BUTTON_INDEX_LEFT_SHOULDER] = input.buttons[4];
mapped->buttons[BUTTON_INDEX_RIGHT_SHOULDER] = input.buttons[5];
mapped->buttons[BUTTON_INDEX_LEFT_TRIGGER] = AxisToButton(input.axes[3]);
mapped->buttons[BUTTON_INDEX_RIGHT_TRIGGER] = AxisToButton(input.axes[4]);
mapped->buttons[BUTTON_INDEX_BACK_SELECT] = input.buttons[8];
mapped->buttons[BUTTON_INDEX_START] = input.buttons[9];
mapped->buttons[BUTTON_INDEX_LEFT_THUMBSTICK] = input.buttons[10];
mapped->buttons[BUTTON_INDEX_RIGHT_THUMBSTICK] = input.buttons[11];
mapped->buttons[BUTTON_INDEX_DPAD_UP] = AxisNegativeAsButton(input.axes[7]);
mapped->buttons[BUTTON_INDEX_DPAD_DOWN] = AxisPositiveAsButton(input.axes[7]);
mapped->buttons[BUTTON_INDEX_DPAD_LEFT] = AxisNegativeAsButton(input.axes[6]);
mapped->buttons[BUTTON_INDEX_DPAD_RIGHT] =
AxisPositiveAsButton(input.axes[6]);
mapped->buttons[BUTTON_INDEX_META] = input.buttons[12];
mapped->buttons[DUAL_SENSE_BUTTON_TOUCHPAD] = input.buttons[13];
mapped->axes[AXIS_INDEX_RIGHT_STICK_X] = input.axes[2];
mapped->axes[AXIS_INDEX_RIGHT_STICK_Y] = input.axes[5];
mapped->buttons_length = DUAL_SENSE_BUTTON_COUNT;
mapped->axes_length = AXIS_INDEX_COUNT;
}
void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) { void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) {
*mapped = input; *mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1]; mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
...@@ -879,6 +912,8 @@ constexpr struct MappingData { ...@@ -879,6 +912,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4}, {GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver // Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4}, {GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L // Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon}, {GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R // Switch Joy-Con R
......
...@@ -174,6 +174,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) { ...@@ -174,6 +174,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) {
mapped->axes_length = AXIS_INDEX_COUNT; mapped->axes_length = AXIS_INDEX_COUNT;
} }
void MapperDualSense(const Gamepad& input, Gamepad* mapped) {
enum DualSenseButtons {
DUAL_SENSE_BUTTON_TOUCHPAD = BUTTON_INDEX_COUNT,
DUAL_SENSE_BUTTON_COUNT
};
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
mapped->buttons[BUTTON_INDEX_SECONDARY] = input.buttons[2];
mapped->buttons[BUTTON_INDEX_TERTIARY] = input.buttons[0];
mapped->buttons[BUTTON_INDEX_QUATERNARY] = input.buttons[3];
mapped->buttons[BUTTON_INDEX_LEFT_SHOULDER] = input.buttons[4];
mapped->buttons[BUTTON_INDEX_RIGHT_SHOULDER] = input.buttons[5];
mapped->buttons[BUTTON_INDEX_LEFT_TRIGGER] = AxisToButton(input.axes[3]);
mapped->buttons[BUTTON_INDEX_RIGHT_TRIGGER] = AxisToButton(input.axes[4]);
mapped->buttons[BUTTON_INDEX_BACK_SELECT] = input.buttons[8];
mapped->buttons[BUTTON_INDEX_START] = input.buttons[9];
mapped->buttons[BUTTON_INDEX_LEFT_THUMBSTICK] = input.buttons[10];
mapped->buttons[BUTTON_INDEX_RIGHT_THUMBSTICK] = input.buttons[11];
mapped->buttons[BUTTON_INDEX_META] = input.buttons[12];
mapped->buttons[DUAL_SENSE_BUTTON_TOUCHPAD] = input.buttons[13];
mapped->axes[AXIS_INDEX_RIGHT_STICK_X] = input.axes[2];
mapped->axes[AXIS_INDEX_RIGHT_STICK_Y] = input.axes[5];
DpadFromAxis(mapped, input.axes[9]);
mapped->buttons_length = DUAL_SENSE_BUTTON_COUNT;
mapped->axes_length = AXIS_INDEX_COUNT;
}
void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) { void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) {
*mapped = input; *mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1]; mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
...@@ -689,6 +718,8 @@ constexpr struct MappingData { ...@@ -689,6 +718,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4}, {GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver // Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4}, {GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L // Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon}, {GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R // Switch Joy-Con R
......
...@@ -98,6 +98,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) { ...@@ -98,6 +98,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) {
mapped->axes_length = AXIS_INDEX_COUNT; mapped->axes_length = AXIS_INDEX_COUNT;
} }
void MapperDualSense(const Gamepad& input, Gamepad* mapped) {
enum DualSenseButtons {
DUAL_SENSE_BUTTON_TOUCHPAD = BUTTON_INDEX_COUNT,
DUAL_SENSE_BUTTON_COUNT
};
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
mapped->buttons[BUTTON_INDEX_SECONDARY] = input.buttons[2];
mapped->buttons[BUTTON_INDEX_TERTIARY] = input.buttons[0];
mapped->buttons[BUTTON_INDEX_QUATERNARY] = input.buttons[3];
mapped->buttons[BUTTON_INDEX_LEFT_SHOULDER] = input.buttons[4];
mapped->buttons[BUTTON_INDEX_RIGHT_SHOULDER] = input.buttons[5];
mapped->buttons[BUTTON_INDEX_LEFT_TRIGGER] = AxisToButton(input.axes[3]);
mapped->buttons[BUTTON_INDEX_RIGHT_TRIGGER] = AxisToButton(input.axes[4]);
mapped->buttons[BUTTON_INDEX_BACK_SELECT] = input.buttons[8];
mapped->buttons[BUTTON_INDEX_START] = input.buttons[9];
mapped->buttons[BUTTON_INDEX_LEFT_THUMBSTICK] = input.buttons[10];
mapped->buttons[BUTTON_INDEX_RIGHT_THUMBSTICK] = input.buttons[11];
mapped->buttons[BUTTON_INDEX_META] = input.buttons[12];
mapped->buttons[DUAL_SENSE_BUTTON_TOUCHPAD] = input.buttons[13];
mapped->axes[AXIS_INDEX_RIGHT_STICK_X] = input.axes[2];
mapped->axes[AXIS_INDEX_RIGHT_STICK_Y] = input.axes[5];
DpadFromAxis(mapped, input.axes[9]);
mapped->buttons_length = DUAL_SENSE_BUTTON_COUNT;
mapped->axes_length = AXIS_INDEX_COUNT;
}
void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) { void MapperIBuffalo(const Gamepad& input, Gamepad* mapped) {
*mapped = input; *mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1]; mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
...@@ -494,6 +523,8 @@ constexpr struct MappingData { ...@@ -494,6 +523,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4}, {GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver // Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4}, {GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L // Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon}, {GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R // Switch Joy-Con R
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment