diff options
Diffstat (limited to 'chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm')
-rw-r--r-- | chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm | 106 |
1 files changed, 75 insertions, 31 deletions
diff --git a/chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm b/chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm index 2696c53c686..5481f0e9921 100644 --- a/chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm +++ b/chromium/content/browser/gamepad/gamepad_standard_mappings_mac.mm @@ -4,35 +4,10 @@ #include "content/browser/gamepad/gamepad_standard_mappings.h" -#include "content/common/gamepad_hardware_buffer.h" - namespace content { namespace { -float AxisToButton(float input) { - return (input + 1.f) / 2.f; -} - -void DpadFromAxis(blink::WebGamepad* mapped, float dir) { - // Dpad is mapped as a direction on one axis, where -1 is up and it - // increases clockwise to 1, which is up + left. It's set to a large (> 1.f) - // number when nothing is depressed, except on start up, sometimes it's 0.0 - // for no data, rather than the large number. - if (dir == 0.0f) { - mapped->buttons[kButtonDpadUp] = 0.f; - mapped->buttons[kButtonDpadDown] = 0.f; - mapped->buttons[kButtonDpadLeft] = 0.f; - mapped->buttons[kButtonDpadRight] = 0.f; - } else { - mapped->buttons[kButtonDpadUp] = (dir >= -1.f && dir < -0.7f) || - (dir >= .95f && dir <= 1.f); - mapped->buttons[kButtonDpadRight] = dir >= -.75f && dir < -.1f; - mapped->buttons[kButtonDpadDown] = dir >= -.2f && dir < .45f; - mapped->buttons[kButtonDpadLeft] = dir >= .4f && dir <= 1.f; - } -} - void MapperXbox360Gamepad( const blink::WebGamepad& input, blink::WebGamepad* mapped) { @@ -64,16 +39,27 @@ void MapperPlaystationSixAxis( mapped->buttons[kButtonQuaternary] = input.buttons[12]; mapped->buttons[kButtonLeftShoulder] = input.buttons[10]; mapped->buttons[kButtonRightShoulder] = input.buttons[11]; - mapped->buttons[kButtonLeftTrigger] = input.buttons[8]; - mapped->buttons[kButtonRightTrigger] = input.buttons[9]; + + mapped->buttons[kButtonLeftTrigger] = ButtonFromButtonAndAxis( + input.buttons[8], input.axes[14]); + mapped->buttons[kButtonRightTrigger] = ButtonFromButtonAndAxis( + input.buttons[9], input.axes[15]); + mapped->buttons[kButtonBackSelect] = input.buttons[0]; mapped->buttons[kButtonStart] = input.buttons[3]; mapped->buttons[kButtonLeftThumbstick] = input.buttons[1]; mapped->buttons[kButtonRightThumbstick] = input.buttons[2]; - mapped->buttons[kButtonDpadUp] = input.buttons[4]; - mapped->buttons[kButtonDpadDown] = input.buttons[6]; - mapped->buttons[kButtonDpadLeft] = input.buttons[7]; - mapped->buttons[kButtonDpadRight] = input.buttons[5]; + + // The SixAxis Dpad is pressure sensative + mapped->buttons[kButtonDpadUp] = ButtonFromButtonAndAxis( + input.buttons[4], input.axes[10]); + mapped->buttons[kButtonDpadDown] = ButtonFromButtonAndAxis( + input.buttons[6], input.axes[12]); + mapped->buttons[kButtonDpadLeft] = ButtonFromButtonAndAxis( + input.buttons[7], input.axes[13]); + mapped->buttons[kButtonDpadRight] = ButtonFromButtonAndAxis( + input.buttons[5], input.axes[11]); + mapped->buttons[kButtonMeta] = input.buttons[16]; mapped->axes[kAxisRightStickY] = input.axes[5]; @@ -81,6 +67,36 @@ void MapperPlaystationSixAxis( mapped->axesLength = kNumAxes; } +void MapperDualshock4( + const blink::WebGamepad& input, + blink::WebGamepad* mapped) { + enum Dualshock4Buttons { + kTouchpadButton = kNumButtons, + kNumDualshock4Buttons + }; + + *mapped = input; + mapped->buttons[kButtonPrimary] = input.buttons[1]; + mapped->buttons[kButtonSecondary] = input.buttons[2]; + mapped->buttons[kButtonTertiary] = input.buttons[0]; + mapped->buttons[kButtonQuaternary] = input.buttons[3]; + mapped->buttons[kButtonLeftShoulder] = input.buttons[4]; + mapped->buttons[kButtonRightShoulder] = input.buttons[5]; + mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[3]); + mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[4]); + mapped->buttons[kButtonBackSelect] = input.buttons[8]; + mapped->buttons[kButtonStart] = input.buttons[9]; + mapped->buttons[kButtonLeftThumbstick] = input.buttons[10]; + mapped->buttons[kButtonRightThumbstick] = input.buttons[11]; + mapped->buttons[kButtonMeta] = input.buttons[12]; + mapped->buttons[kTouchpadButton] = input.buttons[13]; + mapped->axes[kAxisRightStickY] = input.axes[5]; + DpadFromAxis(mapped, input.axes[9]); + + mapped->buttonsLength = kNumDualshock4Buttons; + mapped->axesLength = kNumAxes; +} + void MapperDirectInputStyle( const blink::WebGamepad& input, blink::WebGamepad* mapped) { @@ -184,6 +200,31 @@ void MapperDragonRiseGeneric( mapped->axesLength = kNumAxes; } +void MapperOnLiveWireless( + const blink::WebGamepad& input, + blink::WebGamepad* mapped) { + *mapped = input; + mapped->buttons[kButtonPrimary] = input.buttons[0]; + mapped->buttons[kButtonSecondary] = input.buttons[1]; + mapped->buttons[kButtonTertiary] = input.buttons[3]; + mapped->buttons[kButtonQuaternary] = input.buttons[4]; + mapped->buttons[kButtonLeftShoulder] = input.buttons[6]; + mapped->buttons[kButtonRightShoulder] = input.buttons[7]; + mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[2]); + mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[5]); + mapped->buttons[kButtonBackSelect] = input.buttons[10]; + mapped->buttons[kButtonStart] = input.buttons[11]; + mapped->buttons[kButtonLeftThumbstick] = input.buttons[13]; + mapped->buttons[kButtonRightThumbstick] = input.buttons[14]; + mapped->buttons[kButtonMeta] = input.buttons[12]; + mapped->axes[kAxisRightStickX] = input.axes[3]; + mapped->axes[kAxisRightStickY] = input.axes[4]; + DpadFromAxis(mapped, input.axes[9]); + + mapped->buttonsLength = kNumButtons; + mapped->axesLength = kNumAxes; +} + struct MappingData { const char* const vendor_id; const char* const product_id; @@ -197,10 +238,13 @@ struct MappingData { { "046d", "c218", MapperDirectInputStyle }, // Logitech F510, D mode { "046d", "c219", MapperDirectInputStyle }, // Logitech F710, D mode { "054c", "0268", MapperPlaystationSixAxis }, // Playstation SIXAXIS + { "054c", "05c4", MapperDualshock4 }, // Playstation Dualshock 4 { "0925", "0005", MapperSmartJoyPLUS }, // SmartJoy PLUS Adapter { "0e8f", "0003", MapperXGEAR }, // XFXforce XGEAR PS2 Controller { "2222", "0060", MapperDirectInputStyle }, // Macally iShockX, analog mode { "2222", "4010", MapperMacallyIShock }, // Macally iShock + { "2378", "1008", MapperOnLiveWireless }, // OnLive Controller (Bluetooth) + { "2378", "100a", MapperOnLiveWireless }, // OnLive Controller (Wired) }; } // namespace |