blob: 4d5e7fb80a8456599608817dc8ca00478e2ee1be [file] [log] [blame]
Dmitry Torokhovb08c1182017-04-06 18:08:42 -07001---------------------------
2Linux Gamepad Specification
3---------------------------
David Herrmann6e0fe2e2013-06-15 15:32:44 +02004
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -07005:Author: 2013 by David Herrmann <dh.herrmann@gmail.com>
6
7
Dmitry Torokhovb08c1182017-04-06 18:08:42 -07008Introduction
9~~~~~~~~~~~~
David Herrmann6e0fe2e2013-06-15 15:32:44 +020010Linux provides many different input drivers for gamepad hardware. To avoid
11having user-space deal with different button-mappings for each gamepad, this
12document defines how gamepads are supposed to report their data.
13
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -070014Geometry
15~~~~~~~~
16As "gamepad" we define devices which roughly look like this::
David Herrmann6e0fe2e2013-06-15 15:32:44 +020017
18 ____________________________ __
19 / [__ZL__] [__ZR__] \ |
20 / [__ TL __] [__ TR __] \ | Front Triggers
21 __/________________________________\__ __|
22 / _ \ |
23 / /\ __ (N) \ |
24 / || __ |MO| __ _ _ \ | Main Pad
25 | <===DP===> |SE| |ST| (W) -|- (E) | |
26 \ || ___ ___ _ / |
27 /\ \/ / \ / \ (S) /\ __|
28 / \________ | LS | ____ | RS | ________/ \ |
29 | / \ \___/ / \ \___/ / \ | | Control Sticks
30 | / \_____/ \_____/ \ | __|
31 | / \ |
32 \_____/ \_____/
33
34 |________|______| |______|___________|
35 D-Pad Left Right Action Pad
36 Stick Stick
37
38 |_____________|
39 Menu Pad
40
41Most gamepads have the following features:
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -070042
David Herrmann6e0fe2e2013-06-15 15:32:44 +020043 - Action-Pad
44 4 buttons in diamonds-shape (on the right side). The buttons are
45 differently labeled on most devices so we define them as NORTH,
46 SOUTH, WEST and EAST.
47 - D-Pad (Direction-pad)
48 4 buttons (on the left side) that point up, down, left and right.
49 - Menu-Pad
50 Different constellations, but most-times 2 buttons: SELECT - START
51 Furthermore, many gamepads have a fancy branded button that is used as
52 special system-button. It often looks different to the other buttons and
53 is used to pop up system-menus or system-settings.
54 - Analog-Sticks
55 Analog-sticks provide freely moveable sticks to control directions. Not
56 all devices have both or any, but they are present at most times.
57 Analog-sticks may also provide a digital button if you press them.
58 - Triggers
59 Triggers are located on the upper-side of the pad in vertical direction.
60 Not all devices provide them, but the upper buttons are normally named
61 Left- and Right-Triggers, the lower buttons Z-Left and Z-Right.
62 - Rumble
63 Many devices provide force-feedback features. But are mostly just
64 simple rumble motors.
65
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -070066Detection
67~~~~~~~~~
68
David Herrmann6e0fe2e2013-06-15 15:32:44 +020069All gamepads that follow the protocol described here map BTN_GAMEPAD. This is
70an alias for BTN_SOUTH/BTN_A. It can be used to identify a gamepad as such.
71However, not all gamepads provide all features, so you need to test for all
72features that you need, first. How each feature is mapped is described below.
73
74Legacy drivers often don't comply to these rules. As we cannot change them
75for backwards-compatibility reasons, you need to provide fixup mappings in
76user-space yourself. Some of them might also provide module-options that
Antonio Ospite01d08182013-12-18 08:39:10 -080077change the mappings so you can advise users to set these.
David Herrmann6e0fe2e2013-06-15 15:32:44 +020078
79All new gamepads are supposed to comply with this mapping. Please report any
80bugs, if they don't.
81
82There are a lot of less-featured/less-powerful devices out there, which re-use
83the buttons from this protocol. However, they try to do this in a compatible
84fashion. For example, the "Nintendo Wii Nunchuk" provides two trigger buttons
85and one analog stick. It reports them as if it were a gamepad with only one
86analog stick and two trigger buttons on the right side.
87But that means, that if you only support "real" gamepads, you must test
88devices for _all_ reported events that you need. Otherwise, you will also get
89devices that report a small subset of the events.
90
91No other devices, that do not look/feel like a gamepad, shall report these
92events.
93
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -070094Events
95~~~~~~
96
David Herrmann6e0fe2e2013-06-15 15:32:44 +020097Gamepads report the following events:
98
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -070099- Action-Pad:
100
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200101 Every gamepad device has at least 2 action buttons. This means, that every
102 device reports BTN_SOUTH (which BTN_GAMEPAD is an alias for). Regardless
103 of the labels on the buttons, the codes are sent according to the
104 physical position of the buttons.
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700105
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200106 Please note that 2- and 3-button pads are fairly rare and old. You might
107 want to filter gamepads that do not report all four.
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700108
109 - 2-Button Pad:
110
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200111 If only 2 action-buttons are present, they are reported as BTN_SOUTH and
112 BTN_EAST. For vertical layouts, the upper button is BTN_EAST. For
113 horizontal layouts, the button more on the right is BTN_EAST.
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700114
115 - 3-Button Pad:
116
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200117 If only 3 action-buttons are present, they are reported as (from left
118 to right): BTN_WEST, BTN_SOUTH, BTN_EAST
119 If the buttons are aligned perfectly vertically, they are reported as
120 (from top down): BTN_WEST, BTN_SOUTH, BTN_EAST
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700121
122 - 4-Button Pad:
123
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200124 If all 4 action-buttons are present, they can be aligned in two
125 different formations. If diamond-shaped, they are reported as BTN_NORTH,
126 BTN_WEST, BTN_SOUTH, BTN_EAST according to their physical location.
127 If rectangular-shaped, the upper-left button is BTN_NORTH, lower-left
128 is BTN_WEST, lower-right is BTN_SOUTH and upper-right is BTN_EAST.
129
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700130- D-Pad:
131
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200132 Every gamepad provides a D-Pad with four directions: Up, Down, Left, Right
133 Some of these are available as digital buttons, some as analog buttons. Some
134 may even report both. The kernel does not convert between these so
135 applications should support both and choose what is more appropriate if
136 both are reported.
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200137
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700138 - Digital buttons are reported as:
139
140 BTN_DPAD_*
141
142 - Analog buttons are reported as:
143
144 ABS_HAT0X and ABS_HAT0Y
145
146 (for ABS values negative is left/up, positive is right/down)
147
148- Analog-Sticks:
149
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200150 The left analog-stick is reported as ABS_X, ABS_Y. The right analog stick is
151 reported as ABS_RX, ABS_RY. Zero, one or two sticks may be present.
152 If analog-sticks provide digital buttons, they are mapped accordingly as
153 BTN_THUMBL (first/left) and BTN_THUMBR (second/right).
154
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700155 (for ABS values negative is left/up, positive is right/down)
156
157- Triggers:
158
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200159 Trigger buttons can be available as digital or analog buttons or both. User-
160 space must correctly deal with any situation and choose the most appropriate
161 mode.
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700162
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200163 Upper trigger buttons are reported as BTN_TR or ABS_HAT1X (right) and BTN_TL
164 or ABS_HAT1Y (left). Lower trigger buttons are reported as BTN_TR2 or
165 ABS_HAT2X (right/ZR) and BTN_TL2 or ABS_HAT2Y (left/ZL).
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700166
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200167 If only one trigger-button combination is present (upper+lower), they are
168 reported as "right" triggers (BTN_TR/ABS_HAT1X).
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200169
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700170 (ABS trigger values start at 0, pressure is reported as positive values)
171
172- Menu-Pad:
173
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200174 Menu buttons are always digital and are mapped according to their location
175 instead of their labels. That is:
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700176
177 - 1-button Pad:
178
179 Mapped as BTN_START
180
181 - 2-button Pad:
182
183 Left button mapped as BTN_SELECT, right button mapped as BTN_START
184
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200185 Many pads also have a third button which is branded or has a special symbol
186 and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo
Antonio Ospite01d08182013-12-18 08:39:10 -0800187 "HOME" button, the XBox "X"-button or Sony "PS" button.
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200188
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700189- Rumble:
David Herrmann6e0fe2e2013-06-15 15:32:44 +0200190
Mauro Carvalho Chehab5c631b72017-04-04 17:40:41 -0700191 Rumble is advertised as FF_RUMBLE.