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