Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java

Issue 133943002: Gamepad API support for chrome on android (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java b/content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c171ebfcd3c42cab169a8a2dd4b65e6fbd7109d
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/GamepadMappings.java
@@ -0,0 +1,134 @@
+// Copyright 2014 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.
+
+package org.chromium.content.browser.input;
+
+import android.view.KeyEvent;
+
+/**
+ * Class to manage mapping information related to each supported gamepad controller device.
+ */
+class GamepadMappings {
+ public static boolean mapToStandardGamepad(float[] mappedAxis, float[] mappedButtons,
+ float[] rawAxes, float[] rawButtons, String deviceName) {
+ if (deviceName.contains("NVIDIA Corporation NVIDIA Controller")) {
+ mapShieldGamepad(mappedButtons, rawButtons, mappedAxis, rawAxes);
+ return true;
+ } else if (deviceName.contains("Microsoft X-Box 360 pad")) {
+ mapXBox360Gamepad(mappedButtons, rawButtons, mappedAxis, rawAxes);
+ return true;
+ }
+
+ mapUnknownGamepad(mappedButtons, rawButtons, mappedAxis, rawAxes);
+ return false;
+ }
+
+ private static void mapCommonButtons(float[] mappedButtons, float[] rawButtons) {
+ mappedButtons[CanonicalButtonIndex.BUTTON_PRIMARY] = rawButtons[KeyEvent.KEYCODE_BUTTON_A];
+ mappedButtons[CanonicalButtonIndex.BUTTON_SECONDARY] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_B];
+ mappedButtons[CanonicalButtonIndex.BUTTON_TERTIARY] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_X];
+ mappedButtons[CanonicalButtonIndex.BUTTON_QUATERNARY] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_Y];
+ mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_SHOULDER] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_L1];
+ mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_SHOULDER] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_R1];
+ mappedButtons[CanonicalButtonIndex.BUTTON_BACK_SELECT] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_SELECT];
+ mappedButtons[CanonicalButtonIndex.BUTTON_START] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_START];
+ mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_THUMBSTICK] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_THUMBL];
+ mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_THUMBSTICK] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_THUMBR];
+ mappedButtons[CanonicalButtonIndex.BUTTON_META] = rawButtons[KeyEvent.KEYCODE_BUTTON_MODE];
+ }
+
+ private static void mapDpadButtonsToAxes(float[] mappedButtons, float[] rawAxes) {
+ // Negative value indicates dpad up.
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_UP] = negativeAxisValueAsButton(rawAxes[9]);
+ // Positive axis value indicates dpad down.
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_DOWN] =
+ positiveAxisValueAsButton(rawAxes[9]);
+ // Positive axis value indicates dpad right.
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_RIGHT] =
+ positiveAxisValueAsButton(rawAxes[8]);
+ // Negative value indicates dpad left.
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_LEFT] =
+ negativeAxisValueAsButton(rawAxes[8]);
+ }
+
+ private static void mapAxes(float[] mappedAxis, float[] rawAxes) {
+ // Standard gamepad can have only four axes.
+ mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_X] = rawAxes[0];
+ mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_Y] = rawAxes[1];
+ mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_X] = rawAxes[4];
+ mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_Y] = rawAxes[5];
+ }
+
+ private static float negativeAxisValueAsButton(float input) {
+ return (input < -0.5f) ? 1.f : 0.f;
+ }
+
+ private static float positiveAxisValueAsButton(float input) {
+ return (input > 0.5f) ? 1.f : 0.f;
+ }
+
+ /**
+ * Method for mapping Nvidia gamepad axis and button values
+ * to standard gamepad button and axes values.
+ */
+ private static void mapShieldGamepad(float[] mappedButtons, float[] rawButtons,
+ float[] mappedAxis, float[] rawAxes) {
+ mapCommonButtons(mappedButtons, rawButtons);
+
+ mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_TRIGGER] = rawAxes[2];
+ mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_TRIGGER] = rawAxes[6];
+
+ mapDpadButtonsToAxes(mappedButtons, rawAxes);
+ mapAxes(mappedAxis, rawAxes);
+ }
+
+ /**
+ * Method for mapping Microsoft XBox 360 gamepad axis and button values
+ * to standard gamepad button and axes values.
+ */
+ private static void mapXBox360Gamepad(float[] mappedButtons, float[] rawButtons,
+ float[] mappedAxis, float[] rawAxes) {
+ mapCommonButtons(mappedButtons, rawButtons);
+
+ mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_TRIGGER] = rawAxes[2];
+ mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_TRIGGER] = rawAxes[6];
+
+ mapDpadButtonsToAxes(mappedButtons, rawAxes);
+ mapAxes(mappedAxis, rawAxes);
+ }
+
+ /**
+ * Method for mapping Unkown gamepad axis and button values
+ * to standard gamepad button and axes values.
+ */
+ private static void mapUnknownGamepad(float[] mappedButtons, float[] rawButtons,
+ float[] mappedAxis, float[] rawAxes) {
+ mapCommonButtons(mappedButtons, rawButtons);
+
+ mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_TRIGGER] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_L2];
+ mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_TRIGGER] =
+ rawButtons[KeyEvent.KEYCODE_BUTTON_R2];
+
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_UP] = rawButtons[KeyEvent.KEYCODE_DPAD_UP];
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_DOWN] =
+ rawButtons[KeyEvent.KEYCODE_DPAD_DOWN];
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_RIGHT] =
+ rawButtons[KeyEvent.KEYCODE_DPAD_RIGHT];
+ mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_LEFT] =
+ rawButtons[KeyEvent.KEYCODE_DPAD_LEFT];
+
+ mapAxes(mappedAxis, rawAxes);
+ }
+
+}

Powered by Google App Engine
This is Rietveld 408576698