Generic Input Devices Driver

Evdev is an Xorg input driver for Linux´s generic event devices. It therefore supports all input devices that the kernel knows about, including most mice, keyboards, tablets and touchscreens. Evdev is the default driver on the major Linux distributions. The evdev driver can serve as both a pointer and a keyboard input device. Latest Drivers in Input Devices. Find all the latest ElanTech touchpad drivers here, from the generic driver to Asus and Lenovo versions. July 13, 2015 Windows XP/Vista/7 10.3 MB. The dev-name should be set before registering the input device by the input device driver. It’s a string like ‘Generic button device’ containing a user friendly name of the device. The id. fields contain the bus ID (PCI, USB.), vendor ID and device ID of the device. The bus IDs are defined in input.h. On the Confirm Device Removal dialog box, select the Delete the driver software for this device option, and select OK. When the uninstall process is complete, remove the physical device. With some devices, the device might continue to function until the system has been restarted.

-->

Human Interface Devices (HID) is a device class definition to replace PS/2-style connectors with a generic USB driver to support HID devices such as keyboards, mice, game controllers, etc. Prior to HID, devices could only utilize strictly-defined protocols for mice and keyboards. Hardware innovation required either overloading data in an existing protocol or creating non-standard hardware with its own specialized driver. HID provided support for these “boot mode” devices while adding support for hardware innovation through extensible, standardized and easily-programmable interfaces.

HID devices today include a broad range of devices such as alphanumeric displays, bar code readers, volume controls on speakers/headsets, auxiliary displays, sensors and many others. Many hardware vendors also use HID for their proprietary devices.

Input

HID began with USB but was designed to be bus-agnostic. It was designed for low latency, low bandwidth devices but with flexibility to specify the rate in the underlying transport. The specification for HID over USB was ratified by the USB-IF in 1996 and support over additional transports followed soon after. Details on currently supported transports can be found in HID Transports Supported in Windows. 3rd-party, vendor-specific transports are also allowed via custom transport drivers.

Devices

HID Concepts

HID consists of two fundamental concepts, a Report Descriptor, and Reports. Reports are the actual data that is exchanged between a device and a software client. The Report Descriptor describes the format and meaning the data that the device supports.

Reports

Applications and HID devices exchange data through Reports. There are three Report types: Input Reports, Output Reports, and Feature Reports.

Report TypeDescription
Input ReportData sent from the HID device to the application, typically when the state of a control changes.
Output ReportData sent from the application to the HID device, for example to the LEDs on a keyboard.
Feature ReportData that can be manually read and/or written, and are typically related to configuration information.

Each Top Level Collection defined in a Report Descriptor can contain zero (0) or more reports of each type.

Usage Tables

The USB-IF working group publishes HID Usage Tables that are part of the Report Descriptors that describe what HID devices are allowed to do. These HID Usage Tables contain a list with descriptions of Usages, which describe the intended meaning and use of a particular item described in the Report Descriptor. For example, a Usage is defined for the left button of a mouse. The Report Descriptor can define where in a Report an application can find the current state of the mouse’s left button. The Usage Tables are broken up into several name spaces, called Usage Pages. Each Usage Page describes a set of related Usages to help organize the document. The combination of a Usage Page and Usage define the Usage ID that uniquely identifies a specific Usage in the Usage Tables.

See also

Controller

USB-IF HID Specifications.

The RawInput plugin provides support for specific, user-defined devices that aren't properly handled by Microsoft's XInput API (Application Programming Interface), usually flight sticks and steering wheels. The buttons and axes of these input devices can be custom-mapped to gameplay inputs, including new inputs created by the plugin itself.

Enabling RawInput

By default, the plugin is not enabled. It can be enabled from the Plugins menu, in the Input Devices section.

After the plugin is enabled, the Raw Input section will appear in the Project Settings menu.

Configuring Devices

Within this section, you can add new devices. Each device is identified by a vendor ID and a product ID, which are hexadecimal values that can be found in the device's driver properties. An array of axes (by default, eight) and buttons (by default, twelve) will be added to the controller's configuration. This provides the ability to map any of the controller's axes or buttons (indicated by the array index) to any Unreal Engine axis or key. The plugin provides eight new axes ('Generic USB Controller Axis 1' through 'Generic USB Controller Axis 8') and twenty new buttons ('Generic USB Controller Button 1' through 'Generic USB Controller Button 20'). Each axis and button can be enabled or disabled, and axes can also be inverted and offset.

Above, you can see the Hardware ID information in Windows Control Panel (under Device Manager) for the Logitech G920. The Vendor ID is the four-character string following 'VID_' test (046D), and the Product ID is the four-character string following 'PID_' (C262). This information will be required when configuring the device in RawInput.

Microsoft Generic Usb Driver Download

Example (Vehicle Templates)

As an example, the Vehicle templates that ship with the Unreal Engine have been configured to work with the Logitech G920, a driving-game controller with a steering wheel and gas/brake pedals.

Configuring the Device in RawInput

The steering wheel is reported by the driver as Axis 1, the brake is reported as Axis 3, and the gas pedal is reported as Axis 4. In the RawInput plugin settings, each input must be entered into the array at the corresponding axis from the device driver. That is, the steering wheel's data must be in array element 1, the brake's data must be in array element 3, and the gas pedal's data must be in array element 4. All other entries may be removed or marked as disabled.

Generic Input Devices Drivers

Note that the array index of an input does not need to correspond to the 'Generic USB Controller Axis' or 'Generic USB Controller Input' value. For example, the brake is bound to 'Generic USB Controller Axis 2' even though it is in array position 3. This is necessary to ensure that different controllers can be configured to work the same way, even if they use different input axes.

Because the device's output range doesn't match what we might expect from a standard controller, we will remap the input ranges. The wheel returns values from 0.0 (left) to 1.0 (right), but we want the input range to center on 0.0, so we will give it an offset of -0.5. The brake and gas pedals also return values from 0.0 to 1.0, but the device uses 0.0 to indicate that the pedal is pressed down, and 1.0 to indicate that the pedal is up, where our project expects the reverse. To make this adjustment, we set the axis values to be inverted, and then add a 1.0 offset.

Mapping our RawInput Axes to Input Bindings

Generic Input Devices Driver

We can then map the new axes to our game's input bindings. The wheel (on 'Generic USB Controller Axis 1') is mapped to the range [-0.5, 0.5], but we want it to be more sensitive, so we can scale it up by a factor of 3.0. Similarly, the brake (on 'Generic USB Controller Axis 2') needs to go in the negative direction, and should be more powerful than the gas pedal, so it will be scaled by -2.0. The gas pedal (on 'Generic USB Controller Axis 3') requires no modification, and only needs to be added to the appropriate input binding. By using RawInput and adding these input bindings, we are able to support the Logitech G920 without needing any new input bindings or making any changes to our project's code or Blueprints.

Generic Input Devices Driver Touchpad

This use of scaling provides a good argument for using the 'Generic USB Controller' axes instead of configuring the device to the standard gamepad stick inputs.