15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/gamepad_hardware_buffer.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*GamepadStandardMappingFunction)(
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const blink::WebGamepad& original,
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebGamepad* mapped);
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GamepadStandardMappingFunction GetGamepadStandardMappingFunction(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::StringPiece& vendor_id,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::StringPiece& product_id);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This defines our canonical mapping order for gamepad-like devices. If these
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// items cannot all be satisfied, it is a case-by-case judgement as to whether
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it is better to leave the device unmapped, or to partially map it. In
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// general, err towards leaving it *unmapped* so that content can handle
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// appropriately.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum CanonicalButtonIndex {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonPrimary,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonSecondary,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonTertiary,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonQuaternary,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonLeftShoulder,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonRightShoulder,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonLeftTrigger,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonRightTrigger,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonBackSelect,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonStart,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonLeftThumbstick,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonRightThumbstick,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonDpadUp,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonDpadDown,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonDpadLeft,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonDpadRight,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kButtonMeta,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kNumButtons
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum CanonicalAxisIndex {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kAxisLeftStickX,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kAxisLeftStickY,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kAxisRightStickX,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kAxisRightStickY,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  kNumAxes
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Matches XInput's trigger deadzone
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const float kDefaultButtonPressedThreshold = 30.f/255.f;
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Common mapping functions
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebGamepadButton AxisToButton(float input);
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebGamepadButton AxisNegativeAsButton(float input);
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebGamepadButton AxisPositiveAsButton(float input);
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)blink::WebGamepadButton ButtonFromButtonAndAxis(
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    blink::WebGamepadButton button, float axis);
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdochblink::WebGamepadButton NullButton();
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void DpadFromAxis(blink::WebGamepad* mapped, float dir);
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
71