forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gamepad_blocklist.cc
108 lines (97 loc) · 3.54 KB
/
gamepad_blocklist.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Copyright 2019 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.
#include "device/gamepad/gamepad_blocklist.h"
#include <stddef.h>
#include <algorithm>
#include <iterator>
namespace device {
namespace {
constexpr uint16_t kVendorAlps = 0x044e;
constexpr uint16_t kVendorApple = 0x05ac;
constexpr uint16_t kVendorAtmel = 0x03eb;
constexpr uint16_t kVendorAwardSoftware = 0x0412;
constexpr uint16_t kVendorBlue = 0xb58e;
constexpr uint16_t kVendorCorsair = 0x1b3c;
constexpr uint16_t kVendorCypressSemiconductor = 0x04b4;
constexpr uint16_t kVendorDarfonElectronics = 0x0d62;
constexpr uint16_t kVendorDWav = 0x0eef;
constexpr uint16_t kVendorElanMicroelectronics = 0x04f3;
constexpr uint16_t kVendorEloTouchSystems = 0x04e7;
constexpr uint16_t kVendorHoltekSemiconductor = 0x04d9;
constexpr uint16_t kVendorLenovo = 0x17ef;
constexpr uint16_t kVendorLgd = 0x1fd2;
constexpr uint16_t kVendorMicrosoft = 0x045e;
constexpr uint16_t kVendorOculus = 0x2833;
constexpr uint16_t kVendorQuantaComputer = 0x0408;
constexpr uint16_t kVendorSiliconIntegratedSystems = 0x0457;
constexpr uint16_t kVendorSunMicrosystems = 0x0430;
constexpr uint16_t kVendorSynaptics = 0x06cb;
constexpr uint16_t kVendorWacom = 0x056a;
constexpr struct VendorProductPair {
uint16_t vendor;
uint16_t product;
} kBlockedDevices[] = {
// BLUETOOTH HID v0.01 Mouse.
{kVendorApple, 0x3232},
// Wooting one keyboard.
{kVendorAtmel, 0xff01},
// Wooting two keyboard.
{kVendorAtmel, 0xff02},
// Keyboard.
{kVendorAwardSoftware, 0x7121},
// Corsair Gaming HARPOON RGB Mouse.
{kVendorCorsair, 0x1b3c},
// PenPower Touchpad.
{kVendorCypressSemiconductor, 0xfef3},
// USB-HID Keyboard.
{kVendorDarfonElectronics, 0x9a1a},
// USB-HID Keyboards.
{kVendorHoltekSemiconductor, 0x8008},
{kVendorHoltekSemiconductor, 0x8009},
{kVendorHoltekSemiconductor, 0xa292},
// LiteOn Lenovo USB Keyboard with TrackPoint.
{kVendorLenovo, 0x6009},
// LiteOn Lenovo Traditional USB Keyboard.
{kVendorLenovo, 0x6099},
// Microsoft Wired Keyboard 600.
{kVendorMicrosoft, 0x0750},
// Surface Keyboard.
{kVendorMicrosoft, 0x07cd},
// Surface Keyboard.
{kVendorMicrosoft, 0x0922},
// Surface Type Cover.
{kVendorMicrosoft, 0x09c0},
};
// Devices from these vendors are always blocked.
constexpr uint16_t kBlockedVendors[] = {
// Some Blue Yeti microphones are recognized as gamepads.
kVendorBlue,
// Block all Oculus devices. Oculus VR controllers are handled by WebXR.
kVendorOculus,
// Touchpad and touchscreen vendors.
kVendorAlps,
kVendorDWav,
kVendorElanMicroelectronics,
kVendorEloTouchSystems,
kVendorLgd,
kVendorQuantaComputer,
kVendorSiliconIntegratedSystems,
kVendorSunMicrosystems,
kVendorSynaptics,
kVendorWacom,
};
} // namespace
bool GamepadIsExcluded(uint16_t vendor_id, uint16_t product_id) {
const uint16_t* vendors_begin = std::begin(kBlockedVendors);
const uint16_t* vendors_end = std::end(kBlockedVendors);
if (std::find(vendors_begin, vendors_end, vendor_id) != vendors_end)
return true;
const VendorProductPair* devices_begin = std::begin(kBlockedDevices);
const VendorProductPair* devices_end = std::end(kBlockedDevices);
return std::find_if(
devices_begin, devices_end, [=](const VendorProductPair& item) {
return vendor_id == item.vendor && product_id == item.product;
}) != devices_end;
}
} // namespace device