0

[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/+/2515099
Reviewed-by: James Hollyer <jameshollyer@chromium.org>
Commit-Queue: Matt Reynolds <mattreynolds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824118}
This commit is contained in:
Matt Reynolds
2020-11-04 20:00:10 +00:00
committed by Commit Bot
parent 25075bd46f
commit c3c34ea391
5 changed files with 99 additions and 0 deletions

@ -139,6 +139,7 @@ constexpr struct GamepadInfo {
{0x054c, 0x05c5, kXInputTypeNone},
{0x054c, 0x09cc, kXInputTypeNone},
{0x054c, 0x0ba0, kXInputTypeNone},
{0x054c, 0x0ce6, kXInputTypeNone},
// Elecom Co., Ltd
{0x056e, 0x2003, kXInputTypeNone},
{0x056e, 0x2004, kXInputTypeXbox360},

@ -88,6 +88,7 @@ enum class GamepadId : uint32_t {
kSonyProduct05c4 = 0x054c05c4,
kSonyProduct09cc = 0x054c09cc,
kSonyProduct0ba0 = 0x054c0ba0,
kSonyProduct0ce6 = 0x054c0ce6,
kSteelSeriesBtProduct1419 = 0x01111419,
kSteelSeriesProduct1412 = 0x10381412,
kSteelSeriesProduct1418 = 0x10381418,

@ -298,6 +298,39 @@ void MapperDualshock4New(const Gamepad& input, Gamepad* mapped) {
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) {
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
@ -879,6 +912,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R

@ -174,6 +174,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) {
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) {
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
@ -689,6 +718,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R

@ -98,6 +98,35 @@ void MapperDualshock4(const Gamepad& input, Gamepad* mapped) {
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) {
*mapped = input;
mapped->buttons[BUTTON_INDEX_PRIMARY] = input.buttons[1];
@ -494,6 +523,8 @@ constexpr struct MappingData {
{GamepadId::kSonyProduct09cc, MapperDualshock4},
// Dualshock 4 USB receiver
{GamepadId::kSonyProduct0ba0, MapperDualshock4},
// DualSense
{GamepadId::kSonyProduct0ce6, MapperDualSense},
// Switch Joy-Con L
{GamepadId::kNintendoProduct2006, MapperSwitchJoyCon},
// Switch Joy-Con R