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.
4
5#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
6#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
7
8#include "base/strings/string_piece.h"
9#include "content/common/gamepad_hardware_buffer.h"
10
11namespace content {
12
13typedef void (*GamepadStandardMappingFunction)(
14    const blink::WebGamepad& original,
15    blink::WebGamepad* mapped);
16
17GamepadStandardMappingFunction GetGamepadStandardMappingFunction(
18    const base::StringPiece& vendor_id,
19    const base::StringPiece& product_id);
20
21// This defines our canonical mapping order for gamepad-like devices. If these
22// items cannot all be satisfied, it is a case-by-case judgement as to whether
23// it is better to leave the device unmapped, or to partially map it. In
24// general, err towards leaving it *unmapped* so that content can handle
25// appropriately.
26
27enum CanonicalButtonIndex {
28  kButtonPrimary,
29  kButtonSecondary,
30  kButtonTertiary,
31  kButtonQuaternary,
32  kButtonLeftShoulder,
33  kButtonRightShoulder,
34  kButtonLeftTrigger,
35  kButtonRightTrigger,
36  kButtonBackSelect,
37  kButtonStart,
38  kButtonLeftThumbstick,
39  kButtonRightThumbstick,
40  kButtonDpadUp,
41  kButtonDpadDown,
42  kButtonDpadLeft,
43  kButtonDpadRight,
44  kButtonMeta,
45  kNumButtons
46};
47
48enum CanonicalAxisIndex {
49  kAxisLeftStickX,
50  kAxisLeftStickY,
51  kAxisRightStickX,
52  kAxisRightStickY,
53  kNumAxes
54};
55
56// Matches XInput's trigger deadzone
57const float kDefaultButtonPressedThreshold = 30.f/255.f;
58
59// Common mapping functions
60blink::WebGamepadButton AxisToButton(float input);
61blink::WebGamepadButton AxisNegativeAsButton(float input);
62blink::WebGamepadButton AxisPositiveAsButton(float input);
63blink::WebGamepadButton ButtonFromButtonAndAxis(
64    blink::WebGamepadButton button, float axis);
65blink::WebGamepadButton NullButton();
66void DpadFromAxis(blink::WebGamepad* mapped, float dir);
67
68}  // namespace content
69
70#endif  // CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
71