Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.content.browser; | |
| 6 | |
| 7 import org.chromium.content.browser.input.CanonicalAxisIndex; | |
| 8 import org.chromium.content.browser.input.CanonicalButtonIndex; | |
| 9 | |
| 10 /* | |
| 11 * Class to manage mapping information related to each supported gamepad control ler device. | |
| 12 */ | |
| 13 | |
| 14 class GamepadMappings { | |
|
kbalazs
2014/03/26 19:24:53
I would slightly prefer an abstract class implemen
| |
| 15 // Following values should be changed if the gamepad layout changes | |
| 16 // or frameworks exposes different axes / buttons for a particular gamepad. | |
| 17 // mRawShieldAxes is the total raw axes on known shield gamepad. | |
| 18 protected static final int mRawShieldAxes = 10; | |
| 19 // mRawShieldButtons is the total raw buttons on known shield gamepad. | |
| 20 protected static final int mRawShieldButtons = 10; | |
| 21 // mRawXBoxAxes is the total raw axes on known XBox gamepad. | |
| 22 protected static final int mRawXBoxAxes = 10; | |
| 23 // mRawXBoxButtons is the total raw buttons on known XBox gamepad. | |
| 24 protected static final int mRawXBoxButtons = 9; | |
| 25 | |
| 26 public static boolean mapToStandardGamepad(float[] mappedAxis, float[] mappe dButtons, | |
| 27 float[] rawAxes, float[] rawButto ns, | |
| 28 String deviceName) { | |
| 29 boolean isMapped = true; | |
| 30 if (deviceName.contains("NVIDIA Corporation NVIDIA Controller") && | |
| 31 rawAxes.length == mRawShieldAxes && rawButtons.length == mRawShieldB uttons) { | |
| 32 mapShieldGamepad(mappedButtons, rawButtons, mappedAxis, rawAxes); | |
| 33 } | |
| 34 else if (deviceName.contains("Microsoft X-Box 360 pad") && | |
| 35 rawAxes.length == mRawXBoxAxes && rawButtons.length == mRawXBox Buttons) { | |
| 36 mapXBox360Gamepad(mappedButtons, rawButtons, mappedAxis, rawAxes); | |
| 37 } | |
| 38 else { | |
| 39 isMapped = false; | |
| 40 } | |
| 41 return isMapped; | |
| 42 } | |
| 43 | |
| 44 private static float negativeAxisValueAsButton(float input) { | |
| 45 return (input < -0.5f) ? 1.f : 0.f; | |
| 46 } | |
| 47 | |
| 48 private static float positiveAxisValueAsButton(float input) { | |
| 49 return (input > 0.5f) ? 1.f : 0.f; | |
| 50 } | |
| 51 | |
| 52 /** | |
| 53 * Method for mapping Nvidia gamepad axis and button values | |
| 54 * to standard gamepad button and axes values. | |
| 55 */ | |
| 56 private static void mapShieldGamepad(float[] mappedButtons, float[] rawButto ns, | |
| 57 float[] mappedAxis, float[] rawAxes) { | |
| 58 // First four buttons on Nvidia gamepad appear in correct order so no ma pping is required. | |
| 59 mappedButtons[CanonicalButtonIndex.BUTTON_PRIMARY] = rawButtons[0]; | |
|
kbalazs
2014/03/26 19:24:53
I would also prefer if we could use the symbolic c
| |
| 60 mappedButtons[CanonicalButtonIndex.BUTTON_SECONDARY] = rawButtons[1]; | |
| 61 mappedButtons[CanonicalButtonIndex.BUTTON_TERTIARY] = rawButtons[2]; | |
| 62 mappedButtons[CanonicalButtonIndex.BUTTON_QUATERNARY] = rawButtons[3]; | |
| 63 // Third axis on Nvidia gamepad acts as a bottom left trigger button. | |
| 64 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_TRIGGER] = rawAxes[2]; | |
| 65 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_SHOULDER] = rawButtons[4] ; | |
| 66 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_SHOULDER] = rawButtons[5 ]; | |
| 67 mappedButtons[CanonicalButtonIndex.BUTTON_BACK_SELECT] = rawButtons[6]; | |
| 68 mappedButtons[CanonicalButtonIndex.BUTTON_START] = rawButtons[7]; | |
| 69 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_THUMBSTICK] = rawButtons[ 8]; | |
| 70 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_THUMBSTICK] = rawButtons [9]; | |
| 71 // Seventh axis on Nvidia gamepad acts as a bottom right trigger button. | |
| 72 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_TRIGGER] = rawAxes[6]; | |
| 73 // Ninth axis on Nvidia gamepad acts as directional pad right and left b utton. | |
| 74 // Positive axis value indicates dpad right. | |
| 75 // Negative value indicates dpad left. | |
| 76 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_RIGHT] = | |
| 77 positiveAxisValueAsButton(rawAxes[8]); | |
| 78 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_LEFT] = | |
| 79 negativeAxisValueAsButton(rawAxes[8]); | |
| 80 // Tenth axis on Nvidia gamepad acts as directional pad up and down butt on. | |
| 81 // Positive axis value indicates dpad down. | |
| 82 // Negative value indicates dpad up. | |
| 83 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_DOWN] = | |
| 84 positiveAxisValueAsButton(rawAxes[9]); | |
| 85 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_UP] = negativeAxisValueAs Button(rawAxes[9]); | |
| 86 // Other standard buttons are either not present on the gamepad or not e xposed to an | |
| 87 // application. | |
| 88 mappedButtons[CanonicalButtonIndex.BUTTON_META] = 0.0f; | |
| 89 | |
| 90 // Standard gamepad can have only four axes. | |
| 91 mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_X] = rawAxes[0]; | |
| 92 mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_Y] = rawAxes[1]; | |
| 93 mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_X] = rawAxes[4]; | |
| 94 mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_Y] = rawAxes[5]; | |
| 95 } | |
| 96 | |
| 97 /** | |
| 98 * Method for mapping Microsoft XBox 360 gamepad axis and button values | |
| 99 * to standard gamepad button and axes values. | |
| 100 */ | |
| 101 private static void mapXBox360Gamepad(float[] mappedButtons, float[] rawButt ons, | |
| 102 float[] mappedAxis, float[] rawAxes) { | |
| 103 // First four buttons on Microsoft XBox 360 gamepad appear in correct or der so no mapping | |
| 104 // is required. | |
| 105 mappedButtons[CanonicalButtonIndex.BUTTON_PRIMARY] = rawButtons[0]; | |
| 106 mappedButtons[CanonicalButtonIndex.BUTTON_SECONDARY] = rawButtons[1]; | |
| 107 mappedButtons[CanonicalButtonIndex.BUTTON_TERTIARY] = rawButtons[2]; | |
| 108 mappedButtons[CanonicalButtonIndex.BUTTON_QUATERNARY] = rawButtons[3]; | |
| 109 // Third axis on Microsoft XBox 360 gamepad acts as a left bottom should er button. | |
| 110 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_TRIGGER] = rawAxes[2]; | |
| 111 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_SHOULDER] = rawButtons[4] ; | |
| 112 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_SHOULDER] = rawButtons[5 ]; | |
| 113 mappedButtons[CanonicalButtonIndex.BUTTON_START] = rawButtons[6]; | |
| 114 mappedButtons[CanonicalButtonIndex.BUTTON_LEFT_THUMBSTICK] = rawButtons[ 7]; | |
| 115 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_THUMBSTICK] = rawButtons [8]; | |
| 116 // Seventh axis on Microsoft XBox 360 gamepad acts as a right bottom sho ulder button. | |
| 117 mappedButtons[CanonicalButtonIndex.BUTTON_RIGHT_TRIGGER] = rawAxes[6]; | |
| 118 // Ninth axis on Microsoft XBox 360 gamepad acts as directional pad righ t and left button. | |
| 119 // Positive axis value indicates dpad right. | |
| 120 // Negative value indicates dpad left. | |
| 121 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_RIGHT] = | |
| 122 positiveAxisValueAsButton(rawAxes[8]); | |
| 123 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_LEFT] = | |
| 124 negativeAxisValueAsButton(rawAxes[8]); | |
| 125 // Tenth axis on Microsoft XBox 360 gamepad acts as directional pad up a nd down button. | |
| 126 // Positive axis value indicates dpad down. | |
| 127 // Negative value indicates dpad up. | |
| 128 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_DOWN] = | |
| 129 positiveAxisValueAsButton(rawAxes[9]); | |
| 130 mappedButtons[CanonicalButtonIndex.BUTTON_DPAD_UP] = negativeAxisValueAs Button(rawAxes[9]); | |
| 131 // Other standard buttons are either not present on the gamepad or not e xposed to an | |
| 132 // application. | |
| 133 mappedButtons[CanonicalButtonIndex.BUTTON_BACK_SELECT] = 0.0f; | |
| 134 mappedButtons[CanonicalButtonIndex.BUTTON_META] = 0.0f; | |
| 135 | |
| 136 // Standard gamepad can have only four axes. | |
| 137 mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_X] = rawAxes[0]; | |
| 138 mappedAxis[CanonicalAxisIndex.AXIS_LEFT_STICK_Y] = rawAxes[1]; | |
| 139 mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_X] = rawAxes[4]; | |
| 140 mappedAxis[CanonicalAxisIndex.AXIS_RIGHT_STICK_Y] = rawAxes[5]; | |
| 141 } | |
| 142 | |
| 143 } | |
| OLD | NEW |