summaryrefslogtreecommitdiff
path: root/chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc')
-rw-r--r--chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc164
1 files changed, 164 insertions, 0 deletions
diff --git a/chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc b/chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc
new file mode 100644
index 00000000000..e9e7094c532
--- /dev/null
+++ b/chromium/content/browser/gamepad/gamepad_standard_mappings_linux.cc
@@ -0,0 +1,164 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#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;
+}
+
+float AxisNegativeAsButton(float input) {
+ return (input < -0.5f) ? 1.f : 0.f;
+}
+
+float AxisPositiveAsButton(float input) {
+ return (input > 0.5f) ? 1.f : 0.f;
+}
+
+void MapperXInputStyleGamepad(
+ const WebKit::WebGamepad& input,
+ WebKit::WebGamepad* mapped) {
+ *mapped = input;
+ mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[2]);
+ mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[5]);
+ mapped->buttons[kButtonBackSelect] = input.buttons[6];
+ mapped->buttons[kButtonStart] = input.buttons[7];
+ mapped->buttons[kButtonLeftThumbstick] = input.buttons[9];
+ mapped->buttons[kButtonRightThumbstick] = input.buttons[10];
+ mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]);
+ mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]);
+ mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]);
+ mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]);
+ mapped->buttons[kButtonMeta] = input.buttons[8];
+ mapped->axes[kAxisRightStickX] = input.axes[3];
+ mapped->axes[kAxisRightStickY] = input.axes[4];
+ mapped->buttonsLength = kNumButtons;
+ mapped->axesLength = kNumAxes;
+}
+
+void MapperLakeviewResearch(
+ const WebKit::WebGamepad& input,
+ WebKit::WebGamepad* mapped) {
+ *mapped = input;
+ mapped->buttons[kButtonPrimary] = input.buttons[2];
+ mapped->buttons[kButtonTertiary] = input.buttons[3];
+ mapped->buttons[kButtonQuaternary] = input.buttons[0];
+ mapped->buttons[kButtonLeftShoulder] = input.buttons[6];
+ mapped->buttons[kButtonRightShoulder] = input.buttons[7];
+ mapped->buttons[kButtonLeftTrigger] = input.buttons[4];
+ mapped->buttons[kButtonRightTrigger] = input.buttons[5];
+ mapped->buttons[kButtonBackSelect] = input.buttons[9];
+ mapped->buttons[kButtonStart] = input.buttons[8];
+ mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[5]);
+ mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[5]);
+ mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[4]);
+ mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[4]);
+ mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
+ mapped->axesLength = kNumAxes;
+}
+
+void MapperPlaystationSixAxis(
+ const WebKit::WebGamepad& input,
+ WebKit::WebGamepad* mapped) {
+ *mapped = input;
+ mapped->buttons[kButtonPrimary] = input.buttons[14];
+ mapped->buttons[kButtonSecondary] = input.buttons[13];
+ mapped->buttons[kButtonTertiary] = input.buttons[15];
+ mapped->buttons[kButtonQuaternary] = input.buttons[12];
+ mapped->buttons[kButtonLeftShoulder] = input.buttons[10];
+ mapped->buttons[kButtonRightShoulder] = input.buttons[11];
+ mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[12]);
+ mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[13]);
+ 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] = AxisToButton(input.axes[8]);
+ mapped->buttons[kButtonDpadDown] = AxisToButton(input.axes[10]);
+ mapped->buttons[kButtonDpadLeft] = input.buttons[7];
+ mapped->buttons[kButtonDpadRight] = AxisToButton(input.axes[9]);
+ mapped->buttons[kButtonMeta] = input.buttons[16];
+
+ mapped->buttonsLength = kNumButtons;
+ mapped->axesLength = kNumAxes;
+}
+
+void MapperXGEAR(
+ const WebKit::WebGamepad& input,
+ WebKit::WebGamepad* mapped) {
+ *mapped = input;
+ mapped->buttons[kButtonPrimary] = input.buttons[2];
+ mapped->buttons[kButtonSecondary] = input.buttons[1];
+ mapped->buttons[kButtonTertiary] = input.buttons[3];
+ mapped->buttons[kButtonQuaternary] = input.buttons[0];
+ mapped->buttons[kButtonLeftShoulder] = input.buttons[6];
+ mapped->buttons[kButtonRightShoulder] = input.buttons[7];
+ mapped->buttons[kButtonLeftTrigger] = input.buttons[4];
+ mapped->buttons[kButtonRightTrigger] = input.buttons[5];
+ mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[5]);
+ mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[5]);
+ mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[4]);
+ mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[4]);
+ mapped->axes[kAxisRightStickX] = input.axes[3];
+ mapped->axes[kAxisRightStickY] = input.axes[2];
+ mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
+ mapped->axesLength = kNumAxes;
+}
+
+
+void MapperDragonRiseGeneric(
+ const WebKit::WebGamepad& input,
+ WebKit::WebGamepad* mapped) {
+ *mapped = input;
+ mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[6]);
+ mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[6]);
+ mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[5]);
+ mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[5]);
+ mapped->axes[kAxisLeftStickX] = input.axes[0];
+ mapped->axes[kAxisLeftStickY] = input.axes[1];
+ mapped->axes[kAxisRightStickX] = input.axes[3];
+ mapped->axes[kAxisRightStickY] = input.axes[4];
+ mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
+ mapped->axesLength = kNumAxes;
+}
+
+
+struct MappingData {
+ const char* const vendor_id;
+ const char* const product_id;
+ GamepadStandardMappingFunction function;
+} AvailableMappings[] = {
+ // http://www.linux-usb.org/usb.ids
+ { "0079", "0006", MapperDragonRiseGeneric }, // DragonRise Generic USB
+ { "045e", "028e", MapperXInputStyleGamepad }, // Xbox 360 Controller
+ { "045e", "028f", MapperXInputStyleGamepad }, // Xbox 360 Wireless Controller
+ { "046d", "c21d", MapperXInputStyleGamepad }, // Logitech F310
+ { "046d", "c21e", MapperXInputStyleGamepad }, // Logitech F510
+ { "046d", "c21f", MapperXInputStyleGamepad }, // Logitech F710
+ { "054c", "0268", MapperPlaystationSixAxis }, // Playstation SIXAXIS
+ { "0925", "0005", MapperLakeviewResearch }, // SmartJoy PLUS Adapter
+ { "0925", "8866", MapperLakeviewResearch }, // WiseGroup MP-8866
+ { "0e8f", "0003", MapperXGEAR }, // XFXforce XGEAR PS2 Controller
+};
+
+} // namespace
+
+GamepadStandardMappingFunction GetGamepadStandardMappingFunction(
+ const base::StringPiece& vendor_id,
+ const base::StringPiece& product_id) {
+ for (size_t i = 0; i < arraysize(AvailableMappings); ++i) {
+ MappingData& item = AvailableMappings[i];
+ if (vendor_id == item.vendor_id && product_id == item.product_id)
+ return item.function;
+ }
+ return NULL;
+}
+
+} // namespace content