зеркало из https://github.com/mozilla/gecko-dev.git
114 строки
3.8 KiB
C++
114 строки
3.8 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_GamepadRemapping_h_
|
|
#define mozilla_dom_GamepadRemapping_h_
|
|
|
|
#include "mozilla/dom/GamepadLightIndicator.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
// GamepadId is (vendorId << 16) | productId)
|
|
enum class GamepadId : uint32_t {
|
|
// Nexus Player Controller
|
|
kAsusTekProduct4500 = 0x0b054500,
|
|
// 2Axes 8Keys Game Pad
|
|
kDragonRiseProduct0011 = 0x00790011,
|
|
// ADT-1 Controller
|
|
kGoogleProduct2c40 = 0x18d12c40,
|
|
// Stadia Controller
|
|
kGoogleProduct9400 = 0x18d19400,
|
|
// Logitech F310, D-mode
|
|
kLogitechProductc216 = 0x046dc216,
|
|
// Logitech F510, D-mode
|
|
kLogitechProductc218 = 0x046dc218,
|
|
// Logitech F710, D-mode
|
|
kLogitechProductc219 = 0x046dc219,
|
|
// Switch Joy-Con L
|
|
kNintendoProduct2006 = 0x057e2006,
|
|
// Switch Joy-Con R
|
|
kNintendoProduct2007 = 0x057e2007,
|
|
// Switch Pro Controller
|
|
kNintendoProduct2009 = 0x057e2009,
|
|
// Switch Charging Grip
|
|
kNintendoProduct200e = 0x057e200e,
|
|
// Nvidia Shield gamepad (2015)
|
|
kNvidiaProduct7210 = 0x09557210,
|
|
// Nvidia Shield gamepad (2017)
|
|
kNvidiaProduct7214 = 0x09557214,
|
|
// iBuffalo Classic
|
|
kPadixProduct2060 = 0x05832060,
|
|
// XSkills Gamecube USB adapter
|
|
kPlayComProduct0005 = 0x0b430005,
|
|
// boom PSX+N64 USB Converter
|
|
kPrototypeVendorProduct0667 = 0x66660667,
|
|
// Analog game controller
|
|
kPrototypeVendorProduct9401 = 0x66669401,
|
|
// Razer Serval Controller
|
|
kRazer1532Product0900 = 0x15320900,
|
|
// Playstation 3 Controller
|
|
kSonyProduct0268 = 0x054c0268,
|
|
// Playstation Dualshock 4
|
|
kSonyProduct05c4 = 0x054c05c4,
|
|
// Dualshock 4 (PS4 Slim)
|
|
kSonyProduct09cc = 0x054c09cc,
|
|
// Dualshock 4 USB receiver
|
|
kSonyProduct0ba0 = 0x054c0ba0,
|
|
// Moga Pro Controller (HID mode)
|
|
kVendor20d6Product6271 = 0x20d66271,
|
|
// OnLive Controller (Bluetooth)
|
|
kVendor2378Product1008 = 0x23781008,
|
|
// OnLive Controller (Wired)
|
|
kVendor2378Product100a = 0x2378100a,
|
|
// OUYA Controller
|
|
kVendor2836Product0001 = 0x28360001,
|
|
};
|
|
|
|
class GamepadRemapper {
|
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GamepadRemapper)
|
|
|
|
public:
|
|
virtual uint32_t GetAxisCount() const = 0;
|
|
virtual uint32_t GetButtonCount() const = 0;
|
|
virtual uint32_t GetLightIndicatorCount() const { return 0; }
|
|
virtual void GetLightIndicators(
|
|
nsTArray<GamepadLightIndicatorType>& aTypes) const {}
|
|
virtual uint32_t GetTouchEventCount() const { return 0; }
|
|
virtual void GetLightColorReport(uint8_t aRed, uint8_t aGreen, uint8_t aBlue,
|
|
std::vector<uint8_t>& aReport) const {}
|
|
virtual uint32_t GetMaxInputReportLength() const { return 0; }
|
|
|
|
virtual void SetAxisCount(uint32_t aButtonCount) {}
|
|
virtual void SetButtonCount(uint32_t aButtonCount) {}
|
|
virtual GamepadMappingType GetMappingType() const {
|
|
return GamepadMappingType::Standard;
|
|
}
|
|
virtual void ProcessTouchData(uint32_t aIndex, void* aInput) {}
|
|
virtual void RemapAxisMoveEvent(uint32_t aIndex, uint32_t aAxis,
|
|
double aValue) const = 0;
|
|
virtual void RemapButtonEvent(uint32_t aIndex, uint32_t aButton,
|
|
bool aPressed) const = 0;
|
|
|
|
protected:
|
|
GamepadRemapper() = default;
|
|
virtual ~GamepadRemapper() = default;
|
|
};
|
|
|
|
struct GamepadRemappingData {
|
|
GamepadId id;
|
|
RefPtr<GamepadRemapper> remapping;
|
|
};
|
|
|
|
already_AddRefed<GamepadRemapper> GetGamepadRemapper(const uint16_t aVendorId,
|
|
const uint16_t aProductId,
|
|
bool& aUsingDefault);
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif
|