Battery Status API: add UMA logging for Linux.
[chromium-blink-merge.git] / content / browser / gamepad / gamepad_standard_mappings_linux.cc
blob2465938de7706e9c7716f00b44583c819c7f5bd5
1 // Copyright (c) 2012 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.
5 #include "content/browser/gamepad/gamepad_standard_mappings.h"
7 namespace content {
9 namespace {
11 void MapperXInputStyleGamepad(
12 const blink::WebGamepad& input,
13 blink::WebGamepad* mapped) {
14 *mapped = input;
15 mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[2]);
16 mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[5]);
17 mapped->buttons[kButtonBackSelect] = input.buttons[6];
18 mapped->buttons[kButtonStart] = input.buttons[7];
19 mapped->buttons[kButtonLeftThumbstick] = input.buttons[9];
20 mapped->buttons[kButtonRightThumbstick] = input.buttons[10];
21 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]);
22 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]);
23 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]);
24 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]);
25 mapped->buttons[kButtonMeta] = input.buttons[8];
26 mapped->axes[kAxisRightStickX] = input.axes[3];
27 mapped->axes[kAxisRightStickY] = input.axes[4];
28 mapped->buttonsLength = kNumButtons;
29 mapped->axesLength = kNumAxes;
32 void MapperLakeviewResearch(
33 const blink::WebGamepad& input,
34 blink::WebGamepad* mapped) {
35 *mapped = input;
36 mapped->buttons[kButtonPrimary] = input.buttons[2];
37 mapped->buttons[kButtonTertiary] = input.buttons[3];
38 mapped->buttons[kButtonQuaternary] = input.buttons[0];
39 mapped->buttons[kButtonLeftShoulder] = input.buttons[6];
40 mapped->buttons[kButtonRightShoulder] = input.buttons[7];
41 mapped->buttons[kButtonLeftTrigger] = input.buttons[4];
42 mapped->buttons[kButtonRightTrigger] = input.buttons[5];
43 mapped->buttons[kButtonBackSelect] = input.buttons[9];
44 mapped->buttons[kButtonStart] = input.buttons[8];
45 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[5]);
46 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[5]);
47 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[4]);
48 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[4]);
49 mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
50 mapped->axesLength = kNumAxes;
53 void MapperPlaystationSixAxis(
54 const blink::WebGamepad& input,
55 blink::WebGamepad* mapped) {
56 *mapped = input;
57 mapped->buttons[kButtonPrimary] = input.buttons[14];
58 mapped->buttons[kButtonSecondary] = input.buttons[13];
59 mapped->buttons[kButtonTertiary] = input.buttons[15];
60 mapped->buttons[kButtonQuaternary] = input.buttons[12];
61 mapped->buttons[kButtonLeftShoulder] = input.buttons[10];
62 mapped->buttons[kButtonRightShoulder] = input.buttons[11];
63 mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[12]);
64 mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[13]);
65 mapped->buttons[kButtonBackSelect] = input.buttons[0];
66 mapped->buttons[kButtonStart] = input.buttons[3];
67 mapped->buttons[kButtonLeftThumbstick] = input.buttons[1];
68 mapped->buttons[kButtonRightThumbstick] = input.buttons[2];
69 mapped->buttons[kButtonDpadUp] = AxisToButton(input.axes[8]);
70 mapped->buttons[kButtonDpadDown] = AxisToButton(input.axes[10]);
71 mapped->buttons[kButtonDpadLeft] = input.buttons[7];
72 mapped->buttons[kButtonDpadRight] = AxisToButton(input.axes[9]);
73 mapped->buttons[kButtonMeta] = input.buttons[16];
75 mapped->buttonsLength = kNumButtons;
76 mapped->axesLength = kNumAxes;
79 void MapperDualshock4(
80 const blink::WebGamepad& input,
81 blink::WebGamepad* mapped) {
82 enum Dualshock4Buttons {
83 kTouchpadButton = kNumButtons,
84 kNumDualshock4Buttons
87 *mapped = input;
88 mapped->buttons[kButtonPrimary] = input.buttons[1];
89 mapped->buttons[kButtonSecondary] = input.buttons[2];
90 mapped->buttons[kButtonTertiary] = input.buttons[0];
91 mapped->buttons[kButtonQuaternary] = input.buttons[3];
92 mapped->buttons[kButtonLeftShoulder] = input.buttons[4];
93 mapped->buttons[kButtonRightShoulder] = input.buttons[5];
94 mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[3]);
95 mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[4]);
96 mapped->buttons[kButtonBackSelect] = input.buttons[8];
97 mapped->buttons[kButtonStart] = input.buttons[9];
98 mapped->buttons[kButtonLeftThumbstick] = input.buttons[10];
99 mapped->buttons[kButtonRightThumbstick] = input.buttons[11];
100 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]);
101 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]);
102 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]);
103 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]);
104 mapped->buttons[kButtonMeta] = input.buttons[12];
105 mapped->buttons[kTouchpadButton] = input.buttons[13];
106 mapped->axes[kAxisRightStickY] = input.axes[5];
108 mapped->buttonsLength = kNumDualshock4Buttons;
109 mapped->axesLength = kNumAxes;
112 void MapperXGEAR(
113 const blink::WebGamepad& input,
114 blink::WebGamepad* mapped) {
115 *mapped = input;
116 mapped->buttons[kButtonPrimary] = input.buttons[2];
117 mapped->buttons[kButtonSecondary] = input.buttons[1];
118 mapped->buttons[kButtonTertiary] = input.buttons[3];
119 mapped->buttons[kButtonQuaternary] = input.buttons[0];
120 mapped->buttons[kButtonLeftShoulder] = input.buttons[6];
121 mapped->buttons[kButtonRightShoulder] = input.buttons[7];
122 mapped->buttons[kButtonLeftTrigger] = input.buttons[4];
123 mapped->buttons[kButtonRightTrigger] = input.buttons[5];
124 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[5]);
125 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[5]);
126 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[4]);
127 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[4]);
128 mapped->axes[kAxisRightStickX] = input.axes[3];
129 mapped->axes[kAxisRightStickY] = input.axes[2];
130 mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
131 mapped->axesLength = kNumAxes;
135 void MapperDragonRiseGeneric(
136 const blink::WebGamepad& input,
137 blink::WebGamepad* mapped) {
138 *mapped = input;
139 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[6]);
140 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[6]);
141 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[5]);
142 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[5]);
143 mapped->axes[kAxisLeftStickX] = input.axes[0];
144 mapped->axes[kAxisLeftStickY] = input.axes[1];
145 mapped->axes[kAxisRightStickX] = input.axes[3];
146 mapped->axes[kAxisRightStickY] = input.axes[4];
147 mapped->buttonsLength = kNumButtons - 1; // no Meta on this device
148 mapped->axesLength = kNumAxes;
151 void MapperOnLiveWireless(
152 const blink::WebGamepad& input,
153 blink::WebGamepad* mapped) {
154 *mapped = input;
155 mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[2]);
156 mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[5]);
157 mapped->buttons[kButtonBackSelect] = input.buttons[6];
158 mapped->buttons[kButtonStart] = input.buttons[7];
159 mapped->buttons[kButtonLeftThumbstick] = input.buttons[9];
160 mapped->buttons[kButtonRightThumbstick] = input.buttons[10];
161 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]);
162 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]);
163 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]);
164 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]);
165 mapped->buttons[kButtonMeta] = input.buttons[8];
166 mapped->axes[kAxisRightStickX] = input.axes[3];
167 mapped->axes[kAxisRightStickY] = input.axes[4];
169 mapped->buttonsLength = kNumButtons;
170 mapped->axesLength = kNumAxes;
173 void MapperADT1(
174 const blink::WebGamepad& input,
175 blink::WebGamepad* mapped) {
176 *mapped = input;
177 mapped->buttons[kButtonLeftTrigger] = AxisToButton(input.axes[5]);
178 mapped->buttons[kButtonRightTrigger] = AxisToButton(input.axes[4]);
179 mapped->buttons[kButtonBackSelect] = NullButton();
180 mapped->buttons[kButtonStart] = NullButton();
181 mapped->buttons[kButtonLeftThumbstick] = input.buttons[7];
182 mapped->buttons[kButtonRightThumbstick] = input.buttons[8];
183 mapped->buttons[kButtonDpadUp] = AxisNegativeAsButton(input.axes[7]);
184 mapped->buttons[kButtonDpadDown] = AxisPositiveAsButton(input.axes[7]);
185 mapped->buttons[kButtonDpadLeft] = AxisNegativeAsButton(input.axes[6]);
186 mapped->buttons[kButtonDpadRight] = AxisPositiveAsButton(input.axes[6]);
187 mapped->buttons[kButtonMeta] = input.buttons[6];
189 mapped->buttonsLength = kNumButtons;
190 mapped->axesLength = kNumAxes;
193 struct MappingData {
194 const char* const vendor_id;
195 const char* const product_id;
196 GamepadStandardMappingFunction function;
197 } AvailableMappings[] = {
198 // http://www.linux-usb.org/usb.ids
199 { "0079", "0006", MapperDragonRiseGeneric }, // DragonRise Generic USB
200 { "045e", "028e", MapperXInputStyleGamepad }, // Xbox 360 Controller
201 { "045e", "028f", MapperXInputStyleGamepad }, // Xbox 360 Wireless Controller
202 { "046d", "c21d", MapperXInputStyleGamepad }, // Logitech F310
203 { "046d", "c21e", MapperXInputStyleGamepad }, // Logitech F510
204 { "046d", "c21f", MapperXInputStyleGamepad }, // Logitech F710
205 { "054c", "0268", MapperPlaystationSixAxis }, // Playstation SIXAXIS
206 { "054c", "05c4", MapperDualshock4 }, // Playstation Dualshock 4
207 { "0925", "0005", MapperLakeviewResearch }, // SmartJoy PLUS Adapter
208 { "0925", "8866", MapperLakeviewResearch }, // WiseGroup MP-8866
209 { "0e8f", "0003", MapperXGEAR }, // XFXforce XGEAR PS2 Controller
210 { "2378", "1008", MapperOnLiveWireless }, // OnLive Controller (Bluetooth)
211 { "2378", "100a", MapperOnLiveWireless }, // OnLive Controller (Wired)
212 { "18d1", "2c40", MapperADT1 }, // ADT-1 Controller
215 } // namespace
217 GamepadStandardMappingFunction GetGamepadStandardMappingFunction(
218 const base::StringPiece& vendor_id,
219 const base::StringPiece& product_id) {
220 for (size_t i = 0; i < arraysize(AvailableMappings); ++i) {
221 MappingData& item = AvailableMappings[i];
222 if (vendor_id == item.vendor_id && product_id == item.product_id)
223 return item.function;
225 return NULL;
228 } // namespace content