gamepad.rst 7.3 KB
Newer Older
1 2 3
---------------------------
Linux Gamepad Specification
---------------------------
4

5 6 7
:Author: 2013 by David Herrmann <dh.herrmann@gmail.com>


8 9
Introduction
~~~~~~~~~~~~
10 11 12 13
Linux provides many different input drivers for gamepad hardware. To avoid
having user-space deal with different button-mappings for each gamepad, this
document defines how gamepads are supposed to report their data.

14 15 16
Geometry
~~~~~~~~
As "gamepad" we define devices which roughly look like this::
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

            ____________________________              __
           / [__ZL__]          [__ZR__] \               |
          / [__ TL __]        [__ TR __] \              | Front Triggers
       __/________________________________\__         __|
      /                                  _   \          |
     /      /\           __             (N)   \         |
    /       ||      __  |MO|  __     _       _ \        | Main Pad
   |    <===DP===> |SE|      |ST|   (W) -|- (E) |       |
    \       ||    ___          ___       _     /        |
    /\      \/   /   \        /   \     (S)   /\      __|
   /  \________ | LS  | ____ |  RS | ________/  \       |
  |         /  \ \___/ /    \ \___/ /  \         |      | Control Sticks
  |        /    \_____/      \_____/    \        |    __|
  |       /                              \       |
   \_____/                                \_____/

       |________|______|    |______|___________|
         D-Pad    Left       Right   Action Pad
                 Stick       Stick

                   |_____________|
                      Menu Pad

Most gamepads have the following features:
42

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
  - Action-Pad
    4 buttons in diamonds-shape (on the right side). The buttons are
    differently labeled on most devices so we define them as NORTH,
    SOUTH, WEST and EAST.
  - D-Pad (Direction-pad)
    4 buttons (on the left side) that point up, down, left and right.
  - Menu-Pad
    Different constellations, but most-times 2 buttons: SELECT - START
    Furthermore, many gamepads have a fancy branded button that is used as
    special system-button. It often looks different to the other buttons and
    is used to pop up system-menus or system-settings.
  - Analog-Sticks
    Analog-sticks provide freely moveable sticks to control directions. Not
    all devices have both or any, but they are present at most times.
    Analog-sticks may also provide a digital button if you press them.
  - Triggers
    Triggers are located on the upper-side of the pad in vertical direction.
    Not all devices provide them, but the upper buttons are normally named
    Left- and Right-Triggers, the lower buttons Z-Left and Z-Right.
  - Rumble
    Many devices provide force-feedback features. But are mostly just
    simple rumble motors.

66 67 68
Detection
~~~~~~~~~

69 70 71 72 73 74 75 76
All gamepads that follow the protocol described here map BTN_GAMEPAD. This is
an alias for BTN_SOUTH/BTN_A. It can be used to identify a gamepad as such.
However, not all gamepads provide all features, so you need to test for all
features that you need, first. How each feature is mapped is described below.

Legacy drivers often don't comply to these rules. As we cannot change them
for backwards-compatibility reasons, you need to provide fixup mappings in
user-space yourself. Some of them might also provide module-options that
77
change the mappings so you can advise users to set these.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

All new gamepads are supposed to comply with this mapping. Please report any
bugs, if they don't.

There are a lot of less-featured/less-powerful devices out there, which re-use
the buttons from this protocol. However, they try to do this in a compatible
fashion. For example, the "Nintendo Wii Nunchuk" provides two trigger buttons
and one analog stick. It reports them as if it were a gamepad with only one
analog stick and two trigger buttons on the right side.
But that means, that if you only support "real" gamepads, you must test
devices for _all_ reported events that you need. Otherwise, you will also get
devices that report a small subset of the events.

No other devices, that do not look/feel like a gamepad, shall report these
events.

94 95 96
Events
~~~~~~

97 98
Gamepads report the following events:

99 100
- Action-Pad:

101 102 103 104
  Every gamepad device has at least 2 action buttons. This means, that every
  device reports BTN_SOUTH (which BTN_GAMEPAD is an alias for). Regardless
  of the labels on the buttons, the codes are sent according to the
  physical position of the buttons.
105

106 107
  Please note that 2- and 3-button pads are fairly rare and old. You might
  want to filter gamepads that do not report all four.
108 109 110

    - 2-Button Pad:

111 112 113
      If only 2 action-buttons are present, they are reported as BTN_SOUTH and
      BTN_EAST. For vertical layouts, the upper button is BTN_EAST. For
      horizontal layouts, the button more on the right is BTN_EAST.
114 115 116

    - 3-Button Pad:

117 118 119 120
      If only 3 action-buttons are present, they are reported as (from left
      to right): BTN_WEST, BTN_SOUTH, BTN_EAST
      If the buttons are aligned perfectly vertically, they are reported as
      (from top down): BTN_WEST, BTN_SOUTH, BTN_EAST
121 122 123

    - 4-Button Pad:

124 125 126 127 128 129
      If all 4 action-buttons are present, they can be aligned in two
      different formations. If diamond-shaped, they are reported as BTN_NORTH,
      BTN_WEST, BTN_SOUTH, BTN_EAST according to their physical location.
      If rectangular-shaped, the upper-left button is BTN_NORTH, lower-left
      is BTN_WEST, lower-right is BTN_SOUTH and upper-right is BTN_EAST.

130 131
- D-Pad:

132 133 134 135 136
  Every gamepad provides a D-Pad with four directions: Up, Down, Left, Right
  Some of these are available as digital buttons, some as analog buttons. Some
  may even report both. The kernel does not convert between these so
  applications should support both and choose what is more appropriate if
  both are reported.
137 138 139

    - Digital buttons are reported as:

140
      BTN_DPAD_*
141 142 143

    - Analog buttons are reported as:

144 145
      ABS_HAT0X and ABS_HAT0Y

146 147 148 149
  (for ABS values negative is left/up, positive is right/down)

- Analog-Sticks:

150 151 152 153 154
  The left analog-stick is reported as ABS_X, ABS_Y. The right analog stick is
  reported as ABS_RX, ABS_RY. Zero, one or two sticks may be present.
  If analog-sticks provide digital buttons, they are mapped accordingly as
  BTN_THUMBL (first/left) and BTN_THUMBR (second/right).

155 156 157 158
  (for ABS values negative is left/up, positive is right/down)

- Triggers:

159 160 161
  Trigger buttons can be available as digital or analog buttons or both. User-
  space must correctly deal with any situation and choose the most appropriate
  mode.
162

163 164 165
  Upper trigger buttons are reported as BTN_TR or ABS_HAT1X (right) and BTN_TL
  or ABS_HAT1Y (left). Lower trigger buttons are reported as BTN_TR2 or
  ABS_HAT2X (right/ZR) and BTN_TL2 or ABS_HAT2Y (left/ZL).
166

167 168 169
  If only one trigger-button combination is present (upper+lower), they are
  reported as "right" triggers (BTN_TR/ABS_HAT1X).

170 171 172 173
  (ABS trigger values start at 0, pressure is reported as positive values)

- Menu-Pad:

174 175
  Menu buttons are always digital and are mapped according to their location
  instead of their labels. That is:
176 177 178 179 180 181 182 183 184

    - 1-button Pad:

      Mapped as BTN_START

    - 2-button Pad:

      Left button mapped as BTN_SELECT, right button mapped as BTN_START

185 186
  Many pads also have a third button which is branded or has a special symbol
  and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo
187
  "HOME" button, the XBox "X"-button or Sony "PS" button.
188

189
- Rumble:
190

191
  Rumble is advertised as FF_RUMBLE.