Skip to content

Commit 761ca4c

Browse files
committed
Bug 1680982 - Implement Linux/Unix Gamepad support using evdev. r=stransky
Based on work by: Val Packett <val@packett.cool> and coolreader18 <coolreader18@gmail.com>. Differential Revision: https://phabricator.services.mozilla.com/D197865
1 parent e0c8b40 commit 761ca4c

File tree

4 files changed

+270
-109
lines changed

4 files changed

+270
-109
lines changed

dom/gamepad/GamepadRemapping.cpp

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,53 +19,12 @@
1919

2020
namespace mozilla::dom {
2121

22-
// Follow the canonical ordering recommendation for the "Standard Gamepad"
23-
// from https://www.w3.org/TR/gamepad/#remapping.
24-
enum CanonicalButtonIndex {
25-
BUTTON_INDEX_PRIMARY,
26-
BUTTON_INDEX_SECONDARY,
27-
BUTTON_INDEX_TERTIARY,
28-
BUTTON_INDEX_QUATERNARY,
29-
BUTTON_INDEX_LEFT_SHOULDER,
30-
BUTTON_INDEX_RIGHT_SHOULDER,
31-
BUTTON_INDEX_LEFT_TRIGGER,
32-
BUTTON_INDEX_RIGHT_TRIGGER,
33-
BUTTON_INDEX_BACK_SELECT,
34-
BUTTON_INDEX_START,
35-
BUTTON_INDEX_LEFT_THUMBSTICK,
36-
BUTTON_INDEX_RIGHT_THUMBSTICK,
37-
BUTTON_INDEX_DPAD_UP,
38-
BUTTON_INDEX_DPAD_DOWN,
39-
BUTTON_INDEX_DPAD_LEFT,
40-
BUTTON_INDEX_DPAD_RIGHT,
41-
BUTTON_INDEX_META,
42-
BUTTON_INDEX_COUNT
43-
};
44-
45-
enum CanonicalAxisIndex {
46-
AXIS_INDEX_LEFT_STICK_X,
47-
AXIS_INDEX_LEFT_STICK_Y,
48-
AXIS_INDEX_RIGHT_STICK_X,
49-
AXIS_INDEX_RIGHT_STICK_Y,
50-
AXIS_INDEX_COUNT
51-
};
52-
5322
const float BUTTON_THRESHOLD_VALUE = 0.1f;
5423

5524
float NormalizeTouch(long aValue, long aMin, long aMax) {
5625
return (2.f * (aValue - aMin) / static_cast<float>(aMax - aMin)) - 1.f;
5726
}
5827

59-
bool AxisNegativeAsButton(float input) {
60-
const float value = (input < -0.5f) ? 1.f : 0.f;
61-
return value > BUTTON_THRESHOLD_VALUE;
62-
}
63-
64-
bool AxisPositiveAsButton(float input) {
65-
const float value = (input > 0.5f) ? 1.f : 0.f;
66-
return value > BUTTON_THRESHOLD_VALUE;
67-
}
68-
6928
double AxisToButtonValue(double aValue) {
7029
// Mapping axis value range from (-1, +1) to (0, +1).
7130
return (aValue + 1.0f) * 0.5f;

dom/gamepad/GamepadRemapping.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,41 @@ enum class GamepadId : uint32_t {
9898
kVendor2836Product0001 = 0x28360001,
9999
};
100100

101+
// Follow the canonical ordering recommendation for the "Standard Gamepad"
102+
// from https://www.w3.org/TR/gamepad/#remapping.
103+
enum CanonicalButtonIndex {
104+
BUTTON_INDEX_PRIMARY,
105+
BUTTON_INDEX_SECONDARY,
106+
BUTTON_INDEX_TERTIARY,
107+
BUTTON_INDEX_QUATERNARY,
108+
BUTTON_INDEX_LEFT_SHOULDER,
109+
BUTTON_INDEX_RIGHT_SHOULDER,
110+
BUTTON_INDEX_LEFT_TRIGGER,
111+
BUTTON_INDEX_RIGHT_TRIGGER,
112+
BUTTON_INDEX_BACK_SELECT,
113+
BUTTON_INDEX_START,
114+
BUTTON_INDEX_LEFT_THUMBSTICK,
115+
BUTTON_INDEX_RIGHT_THUMBSTICK,
116+
BUTTON_INDEX_DPAD_UP,
117+
BUTTON_INDEX_DPAD_DOWN,
118+
BUTTON_INDEX_DPAD_LEFT,
119+
BUTTON_INDEX_DPAD_RIGHT,
120+
BUTTON_INDEX_META,
121+
BUTTON_INDEX_COUNT
122+
};
123+
124+
enum CanonicalAxisIndex {
125+
AXIS_INDEX_LEFT_STICK_X,
126+
AXIS_INDEX_LEFT_STICK_Y,
127+
AXIS_INDEX_RIGHT_STICK_X,
128+
AXIS_INDEX_RIGHT_STICK_Y,
129+
AXIS_INDEX_COUNT
130+
};
131+
132+
static inline bool AxisNegativeAsButton(double input) { return input < -0.5; }
133+
134+
static inline bool AxisPositiveAsButton(double input) { return input > 0.5; }
135+
101136
class GamepadRemapper {
102137
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GamepadRemapper)
103138

0 commit comments

Comments
 (0)