123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef DEVICE_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
- #define DEVICE_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
- #include "base/strings/string_piece.h"
- #include "device/gamepad/public/cpp/gamepad.h"
- namespace device {
- // For a connected gamepad, specify the type of bus through which it is
- // connected. This allows for specialized mappings depending on how the device
- // is connected. For instance, a gamepad may require different mappers for USB
- // and Bluetooth.
- enum GamepadBusType {
- GAMEPAD_BUS_UNKNOWN,
- GAMEPAD_BUS_USB,
- GAMEPAD_BUS_BLUETOOTH
- };
- typedef void (*GamepadStandardMappingFunction)(const Gamepad& original,
- Gamepad* mapped);
- // Returns the most suitable mapping function for a particular gamepad.
- // |vendor_id| and |product_id| are the USB or Bluetooth vendor and product IDs
- // reported by the device. |hid_specification_version| is the binary-coded
- // decimal representation of the version of the HID specification that the
- // device is compliant with (bcdHID). |version_number| is the firmware version
- // number reported by the device (bcdDevice). |bus_type| is the transport
- // used to connect to this device, or GAMEPAD_BUS_UNKNOWN if unknown.
- GamepadStandardMappingFunction GetGamepadStandardMappingFunction(
- const base::StringPiece product_name,
- const uint16_t vendor_id,
- const uint16_t product_id,
- const uint16_t hid_specification_version,
- const uint16_t version_number,
- GamepadBusType bus_type);
- // This defines our canonical mapping order for gamepad-like devices. If these
- // items cannot all be satisfied, it is a case-by-case judgement as to whether
- // it is better to leave the device unmapped, or to partially map it. In
- // general, err towards leaving it *unmapped* so that content can handle
- // appropriately.
- // A Java counterpart will be generated for this enum.
- // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.device.gamepad
- // GENERATED_JAVA_PREFIX_TO_STRIP: BUTTON_INDEX_
- enum CanonicalButtonIndex {
- BUTTON_INDEX_PRIMARY,
- BUTTON_INDEX_SECONDARY,
- BUTTON_INDEX_TERTIARY,
- BUTTON_INDEX_QUATERNARY,
- BUTTON_INDEX_LEFT_SHOULDER,
- BUTTON_INDEX_RIGHT_SHOULDER,
- BUTTON_INDEX_LEFT_TRIGGER,
- BUTTON_INDEX_RIGHT_TRIGGER,
- BUTTON_INDEX_BACK_SELECT,
- BUTTON_INDEX_START,
- BUTTON_INDEX_LEFT_THUMBSTICK,
- BUTTON_INDEX_RIGHT_THUMBSTICK,
- BUTTON_INDEX_DPAD_UP,
- BUTTON_INDEX_DPAD_DOWN,
- BUTTON_INDEX_DPAD_LEFT,
- BUTTON_INDEX_DPAD_RIGHT,
- BUTTON_INDEX_META,
- BUTTON_INDEX_COUNT
- };
- // Xbox Series X has an extra share button.
- enum XboxSeriesXButtons {
- XBOX_SERIES_X_BUTTON_SHARE = CanonicalButtonIndex::BUTTON_INDEX_COUNT,
- XBOX_SERIES_X_BUTTON_COUNT
- };
- // A Java counterpart will be generated for this enum.
- // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.device.gamepad
- // GENERATED_JAVA_PREFIX_TO_STRIP: AXIS_INDEX_
- enum CanonicalAxisIndex {
- AXIS_INDEX_LEFT_STICK_X,
- AXIS_INDEX_LEFT_STICK_Y,
- AXIS_INDEX_RIGHT_STICK_X,
- AXIS_INDEX_RIGHT_STICK_Y,
- AXIS_INDEX_COUNT
- };
- // The Switch Pro controller has a Capture button that has no equivalent in the
- // Standard Gamepad.
- enum SwitchProButtons {
- SWITCH_PRO_BUTTON_CAPTURE = BUTTON_INDEX_COUNT,
- SWITCH_PRO_BUTTON_COUNT
- };
- // Common mapping functions
- GamepadButton AxisToButton(float input);
- GamepadButton AxisNegativeAsButton(float input);
- GamepadButton AxisPositiveAsButton(float input);
- GamepadButton ButtonFromButtonAndAxis(GamepadButton button, float axis);
- GamepadButton NullButton();
- void DpadFromAxis(Gamepad* mapped, float dir);
- float RenormalizeAndClampAxis(float value, float min, float max);
- // Gamepad common mapping functions
- void MapperSwitchPro(const Gamepad& input, Gamepad* mapped);
- void MapperSwitchJoyCon(const Gamepad& input, Gamepad* mapped);
- void MapperSwitchComposite(const Gamepad& input, Gamepad* mapped);
- } // namespace device
- #endif // DEVICE_GAMEPAD_GAMEPAD_STANDARD_MAPPINGS_H_
|