blob: ca1ee7feba3c74b1941f1fd50ca15d25e3ede8a3 [file] [log] [blame]
// Copyright 2018 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_ID_LIST_H_
#define DEVICE_GAMEPAD_GAMEPAD_ID_LIST_H_
#include <stddef.h>
#include <stdint.h>
#include <unordered_set>
#include <vector>
#include "base/lazy_instance.h"
#include "device/gamepad/gamepad_export.h"
namespace device {
enum XInputType {
// Not an XInput device, or unknown.
kXInputTypeNone,
// Microsoft Xbox compatible.
kXInputTypeXbox,
// Microsoft Xbox 360 compatible.
kXInputTypeXbox360,
// Microsoft Xbox One compatible.
kXInputTypeXboxOne,
};
// Enumeration of gamepads recognized by data fetchers. GamepadId values are
// composed of the USB or Bluetooth vendor ID in the high 16 bits and product ID
// in the low 16 bits.
enum class GamepadId : uint32_t {
// ID value representing an unknown gamepad or non-gamepad.
kUnknownGamepad = 0,
// ID values for supported devices.
kAsusTekProduct4500 = 0x0b054500,
kBroadcomProduct8502 = 0x0a5c8502,
kDragonRiseProduct0006 = 0x00790006,
kDragonRiseProduct0011 = 0x00790011,
kGoogleProduct2c40 = 0x18d12c40,
kGoogleProduct9400 = 0x18d19400,
kGreenAsiaProduct0003 = 0x0e8f0003,
kLakeviewResearchProduct0005 = 0x09250005,
kLakeviewResearchProduct8866 = 0x09258866,
kLogitechProductc216 = 0x046dc216,
kLogitechProductc218 = 0x046dc218,
kLogitechProductc219 = 0x046dc219,
kLogitechProductc21d = 0x046dc21d,
kLogitechProductc21e = 0x046dc21e,
kLogitechProductc21f = 0x046dc21f,
kMacAllyProduct0060 = 0x22220060,
kMacAllyProduct4010 = 0x22224010,
kMicrosoftProduct028e = 0x045e028e,
kMicrosoftProduct028f = 0x045e028f,
kMicrosoftProduct0291 = 0x045e0291,
kMicrosoftProduct02a1 = 0x045e02a1,
kMicrosoftProduct02d1 = 0x045e02d1,
kMicrosoftProduct02dd = 0x045e02dd,
kMicrosoftProduct02e0 = 0x045e02e0,
kMicrosoftProduct02e3 = 0x045e02e3,
kMicrosoftProduct02ea = 0x045e02ea,
kMicrosoftProduct02fd = 0x045e02fd,
kMicrosoftProduct0719 = 0x045e0719,
kMicrosoftProduct0b00 = 0x045e0b00,
kMicrosoftProduct0b05 = 0x045e0b05,
kMicrosoftProduct0b0a = 0x045e0b0a,
kMicrosoftProduct0b0c = 0x045e0b0c,
kNintendoProduct2006 = 0x057e2006,
kNintendoProduct2007 = 0x057e2007,
kNintendoProduct2009 = 0x057e2009,
kNintendoProduct200e = 0x057e200e,
kNvidiaProduct7210 = 0x09557210,
kNvidiaProduct7214 = 0x09557214,
kPadixProduct2060 = 0x05832060,
kPdpProduct0003 = 0x0e6f0003,
kPlayComProduct0005 = 0x0b430005,
kPrototypeVendorProduct0667 = 0x66660667,
kPrototypeVendorProduct9401 = 0x66669401,
kRazer1532Product0900 = 0x15320900,
kSamsungElectronicsProducta000 = 0x04e8a000,
kSonyProduct0268 = 0x054c0268,
kSonyProduct05c4 = 0x054c05c4,
kSonyProduct09cc = 0x054c09cc,
kSonyProduct0ba0 = 0x054c0ba0,
kSteelSeriesBtProduct1419 = 0x01111419,
kSteelSeriesProduct1412 = 0x10381412,
kSteelSeriesProduct1418 = 0x10381418,
kSteelSeriesProduct1420 = 0x10381420,
kVendor20d6Product6271 = 0x20d66271,
kVendor20d6Product89e5 = 0x20d689e5,
kVendor2378Product1008 = 0x23781008,
kVendor2378Product100a = 0x2378100a,
kVendor2836Product0001 = 0x28360001,
kVendor2e95Product7725 = 0x2e957725,
};
class DEVICE_GAMEPAD_EXPORT GamepadIdList {
public:
// Returns a singleton instance of the GamepadId list.
static GamepadIdList& Get();
// Returns a GamepadId value suitable for identifying a specific model of
// gamepad. If the gamepad is not contained in the list of known gamepads,
// returns kUnknownGamepad.
GamepadId GetGamepadId(base::StringPiece product_name,
uint16_t vendor_id,
uint16_t product_id) const;
// Return the XInput flavor (Xbox, Xbox 360, or Xbox One) for the device with
// the specified |vendor_id| and |product_id|, or kXInputTypeNone if the
// device is not XInput or the XInput flavor is unknown.
XInputType GetXInputType(uint16_t vendor_id, uint16_t product_id) const;
// Returns the internal list of gamepad info for testing purposes.
std::vector<std::tuple<uint16_t, uint16_t, XInputType>>
GetGamepadListForTesting() const;
private:
friend base::LazyInstanceTraitsBase<GamepadIdList>;
GamepadIdList();
DISALLOW_COPY_AND_ASSIGN(GamepadIdList);
};
} // namespace device
#endif // DEVICE_GAMEPAD_GAMEPAD_ID_LIST_H_