1. Controller profiles

Each emulated peripheral has a profile describing its input. Controller is a generic word for these peripherals, and this is the name shown in the GUI.
Each controller has parts that generate input, like buttons, keys, triggers, analog sticks and accelerometers. These parts are called features of the controller.
Features generate input in several different ways. For example, a button is either 1 or 0. Analog sticks, on the other hand, have two degrees of freedom. They contain two values that can range from -1.0 (fully down/left) to 1.0 (fully up/right).
Features can also receive input. Rumble motors and other haptic parts accept digital or analog input.
Features are grouped by the type of input they generate/accept. For example:
Scalar features
- Regular buttons generate a single number (either 0 or 1), so these are called scalar features.
- Likewise, triggers and pressure-sensitive buttons generate a single number (analog value between 0.0 and 1.0, inclusive). These are also called scalar features.
- For simplicity, keys are considered buttons
- D-pads, also called hats, are treated as four buttons, so they result in four scalar features.
Vector features
- Analog sticks generate two analog values, so these are called vector features.
- Likewise, accelerometers have an X, Y and Z axis and are also called vector features.
Haptic features
- Motors are technically scalar features, but because they accept input instead of generating it, they're usually processed in a different part of the code. For clarity, they are just called haptic features.