Anonymous edits have been disabled on the wiki. If you want to contribute please login or create an account.


Warning for game developers: PCGamingWiki staff members will only ever reach out to you using the official press@pcgamingwiki.com mail address.
Be aware of scammers claiming to be representatives or affiliates of PCGamingWiki who promise a PCGW page for a game key.

Glossary:Controller

From PCGamingWiki, the wiki about fixing PC games
(Redirected from Controller)
This page may require cleanup to meet basic quality standards. The specific problem is: Move away from bullet points, and re-evaluate the overall article structure and headers. The current table of contents is overly complicated for what is essentially just a couple of lists of applications/solutions.. You can help by modifying the article. The discussion page may contain useful suggestions.

See list of controllers for an overview of all controller pages on the wiki.

Controllers are an alternative to keyboard and mouse input. Due to the growing popularity of console games across most genres and PC ports in the early 2000s, most game engines and subsequently PC games nowadays includes native support for controllers, although many might only support the XInput API and controllers.

General information

DirectInput (and XInput) on Wikipedia
Xbox 360 Controller (XInput) on Wikipedia

Types

Controllers come in many different types.

Gamepad
A gamepad is a type of controller where it has the d-pad, analog sticks, and buttons.

Joystick
A joystick is a long stick that can be moved around with one hand.

Racing wheel
A racing wheel is a type of controller that strongly resembles a steering wheel and sometimes includes pedals on a vehicle. This is mainly used for racing games.

Flight yoke/stick
A flight yoke/stick is a type of controller that strongly resembles the one on an airplane. This is mainly used for flight simulators.

APIs

A controller properties window in Windows.
A controller properties window in Windows.

HID API

A human interface device (HID) is a type of computer device in which a human interacts with by either inputting data or providing output.[1]

HID is used in various input devices, including (but not limited to) game controllers.

WinMM Joystick

Part of the larger Windows Multimedia API (WinMM), the WinMM joystick is used by older games to provide controller support.

WinMM Joystick has one particular limitation, in which it always reports up to 16 joysticks if at least one controller is connected but reports the remaining 15 joysticks in the "unplugged" state.[2]

Wrappers like Xidi and Gamepad Phoenix can emulate WinMM signals for newer controllers.

Raw Input

The Raw Input provides direct support for specific, user-defined devices that aren't properly handled by any standard API, usually flight sticks and steering wheels. [3]

DirectInput

DirectInput is Microsoft's original controller API layered above the Raw Input API and was released as part of DirectX 1.0 in 1995.

DirectInput was used by nearly all games up until 2006, but was officially deprecated alongside the release of Windows Vista and DirectX 10 in favor of Microsoft's newer XInput API. Despite this, the API would continue to see widespread support and use among hardware manufacturers for decades after, among so-called "generic controllers".

The DirectInput API supports a maximum of 8 axes, 128 buttons, and 4 point-of-view hats per controller, although the API is not capable of representing simultaneous opposite cardinal directions on the D-pad, + or +, as it encodes the D-pad input as one of nine possible values, corresponding to the 8 cardinal & diagonal directions as well as neutral (no input).

While XInput controllers can support DirectInput-only games directly (as the XUSB and GIP protocols can enumerate both XInput and DirectInput on the XInput controller), it often comes with some limitations.[Note 1] For that reason, some XInput controllers, such as Logitech's F310 and F710, have an alternative DirectInput mode that can be enabled via either a button combination or a physical toggle switch.

XInput

XInput is Microsoft's proprietary input API released in 2005[4] that was designed to consolidate gamepad types and layouts on Windows and replace DirectInput as the primary controller API for games and supported Xbox 360-compatible controller types such as the official Xbox 360 Controller and compatible steering wheels and guitars.

A key difference from DirectInput was that controller manufacturers had to go through a certification program to license and support the use of XInput on Windows. However, this difference also meant that DirectInput, which was made obsolete with the release of DirectX 10 in Windows Vista, continued to see extensive use and support among hardware manufacturers and games in new controllers for decades past its official deprecation status.

The XInput API supports a maximum of four controllers at a time and a maximum of 4 axes, 10 buttons, 2 triggers and 8-direction digital pad per controller, although an advantage it has over DirectInput is the capability of representing simultaneous opposite cardinal directions on the D-pad, + and +.

XInput controllers function differently than DirectInput controllers, and for that reason, DirectInput controllers often require a wrapper to be used in games that only support the XInput API.

Windows.Gaming.Input

Windows.Gaming.Input is Microsoft's API for XInput controllers that utilize the new Gaming Input Protocol (GIP), such as the Xbox Wireless Controller. While it is primarily built for Universal Windows Platform apps, it can occasionally be found in Win32 desktop games as well.

New to the API is the support of the impulse triggers on the Xbox Wireless Controller and other GIP-based XInput controllers. Note that on certain GIP-based XInput controllers, setting the polling rate to anything above 500 Hz will make them operate in XUSB mode and disable the impulse triggers.[5]

GameInput

GameInput is an input API that exposes input devices of all kinds through a single consistent interface.[6] GameInput is a functional superset of all legacy input APIs (XInput, DirectInput, Raw Input, Human Interface Device (HID), and WinRT APIs) and is available on Xbox via the GDK and PC via NuGet. Older versions of Windows going back to Windows 10 19H1 (May 2019 update) are also supported.

GameInput exposes input from keyboards, mice, gamepads, and other game controllers via a single unified input model, synchronized to a common time base.

Haptics and force feedback are fully supported with GameInput.

InputSprocket

InputSprocket is Apple's controller API for Classic Mac OS as a part of Game Sprockets.

MFI

SDL

Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware. It is most commonly known for its input library used in countless of games to add support for various types of controllers.

Unlike any of the Input API (barring HID), it is supported on Windows, macOS and Linux. Wrappers like Steam Input, AntiMicroX and JoyShockMapper make use of SDL for controller support.

Wrappers

Cross-platform

Steam Input

Steam Input is a feature of the Steam client referring to the entire collection of software, hardware, and configuration utilities that Steam uses to interface with games. It acts like a wrapper using the Steam Community Overlay to intercept and manipulate player input before passing it on along to the game.
Supported on Windows, macOS and Linux.
Works with non-Steam games if they're added and launched through Steam.
Lets users share and customize game-specific controller profiles.
Supports a wide variety of controllers.
Adds or extends the functionality of input devices in various ways (e.g. keyboard/mouse input mapped to a controller, XInput support for DirectInput-only devices, etc.).
Allows haptic feedback passthrough on both DirectInput and XInput controllers.
Overrules games' own possible controller-specific configurations. (e.g., automatic button prompt change.)
The UI for changing bindings is very much made with controllers in mind.
Requires Steam and the Steam Overlay to function. If the game is blocking the Steam Overlay, GlosSI can be used as a workaround.

AntiMicroX

Open source and easy to use application.
Supported on Winidows and Linux
Allows any mouse and keyboard input to be bound to any controller buttons across different profiles.
Supports scripts, executables andmacros consisting of elements mentioned above.
Allows assigning multiple switchable sets of mappings to gamepad.
Auto profiles support - assign profile to active application window (not in Wayland).

Xalia

Xalia is a program that provides a gamepad UI for traditional desktop applications. It does this using accessibility platforms like AT-SPI2 and UIAutomation, a unique rule-based language, the .NET standard, and SDL2.
Supported on Winidows and Linux
There is no virtual mouse cursor, it simply jumps to a control in the direction pressed.

Windows

JoyShockMapper

Open source and easy to use application.
Converts DualShock 4, JoyCon, and Switch Pro Controller input into keyboard and mouse events.
Innovative "Flick Stick" support - you can adjust rotation of a stick to the same rotation in game[7].
Allows using gyro controls. Community Configs you can find on GyroWiki.

DSAdvance

Open source and easy to use application.
Supports motion control on supported controllers, and can be set to either mouse emulation, joystick-mouse, driving or piloting mode.
Supports invert setting for analog inputs.
Supports external, modified Arduino-powered racing pedals, and Digispark-based DIY joysticks.
Support motion wheel buttons with up to 9 tilt actions;
Steering wheel with button emulation;
Support aiming with mouse emulation;
It supports separate game and Windows control modes. Separate profiles are used for gaming. There are ready-made profiles for some games, and they are periodically updated.

JoyXoff

Mouse, media and keyboard control.
Supports Xbox 360 and Xbox Wireless Controller.
Virtual Keyboard support. After pressing the left stick, pops up the arcade style virtual keyboard inspired by Beyond Good & Evil input interface or Xbox One themed plain virtual keyboard.
For Playstation controllers Xbox 360 Controller Emulator (x360ce) is needed.

JoyAdvance

Xbox emulation for Direct Input controllers
Open source and easy to use application.
Supports various profiles with their switching

Keysticks

Mouse, media and keyboard control.

Xpadder

Mouse and keyboard control.
Not Freeware.

Universal Control Remapper

Open Source.

Controller Companion

Mouse, media and keyboard control.
Supports Xbox 360 and Xbox Wireless Controller. Application comes with an installer for Xbox 360 Controller Emulator (x360ce) which will allow use Playstation controllers.
Using Steam Workshop as community configs database.
Very user friendly User Interface, bindings are easy to configure.
Virtual Keyboard support. After pressing the left stick, pops up the arcade style virtual keyboard inspired by Beyond Good & Evil input interface.
Auto-disable whenever another program, game or Steam Big Picture is running.
Not Freeware.

reWASD

Supported controllers: Xbox Elite 1/2, DualSense, DualSense Edge, Xbox Wireless Controller, DualShock 4, DualShock 3, PS3 Navigation, Xbox 360, Stadia, Logitech, Switch Pro, GameCube, Joy-Con, Azeron, Steam, Nvidia SHIELD.
Adds or extends the functionality of input devices in various ways (e.g., keyboard/mouse input mapped to a controller and vice-versa, reassigns with additional buttons on some controllers, turns input into turbo & macro control, etc.).
Can emulate the connected device or controller as a virtual Xbox 360 controller, Xbox Wireless Controller, DualShock 4, or Switch Pro Controller. Useful for cases like using non-XInput controllers on XInput-supported games and using non-PlayStation controllers on apps such as PS4 Remote Play and PS Now.
Supports gyro and accelerometer control on supported controllers when set to emulate as a virtual DualShock 4 or a virtual Switch Pro Controller.
Allows use of the back buttons/paddles on Xbox Elite Series 1/Series 2 and DualSense Edge in any game.
Allows the use of the Steam Controller without Steam.
Allows the Joy-Cons to work as a pair or separately.
Lets users share and customize game-specific controller profiles.
It can run on Windows 7, 8, 8.1, 10, and 11.
Paid software with a lifetime license. Also has a 7-day trial for new users. (as of 2025)
Known for triggering the anti-cheat in some games.

DSX

Supported controllers: DualShock 4, DualSense, DualSense Edge, PlayStation VR2 Sense Controller, Razer Wolverine V2 Pro, Razer Raiju V3 Pro.
Formerly known as DualSenseX in version 1.0.
The free legacy V1.0 version is still available to download on GitHub, but it doesn't controllers that were released after v.1.0 and won't receive any updates anymore.
Adds or extends the functionality of input devices in various ways (e.g., keyboard/mouse input mapped to a controller and vice-versa and vice-versa, reassigns with additional buttons on supported controllers, turns input into turbo & macro control, turns the touchpad into multiple buttons, etc.).
Can emulate supported controllers as a virtual DualShock 4 and the Xbox 360 controller. Since V3.0, the app can emulate supported controllers as a virtual DualSense (for cases like using non-DualSense controllers on DualSense-supported games, enabling wireless adaptive triggers on games that have yet to support AT over Bluetooth), but it requires an optional paid DLC. By default, it is set to Passthrough Mode.
Can use the controller's speaker and headset port as separate audio outputs (USB only).
Supports gyro and accelerometer control when set to Passthrough mode, emulate as a virtual DualShock 4 or a virtual DualSense. In addition, they can be mapped to any inputs, including buttons, joysticks, mouse and key press.
Adaptive triggers on supported controllers are functional and can be switched to various modes, with various adjustments. Additionally, the app can provide adaptive triggers functionality on games without native support when used in conjunction with third-party mods or apps.
The controller can be hidden while emulating a virtual controller through HidHide to avoid double-inputs.
Working Haptic Feedback (USB only) with various adjustments.
Prior to v3, it only supported one controller at a time.[8] This limitation was lifted as support for more than one controller was added in v3.
Must have the app running and the controller connected before starting the game to avoid double input.
Currently, it can't translate the Impulse Trigger Vibration to adaptive triggers on supported controllers.[9]
The HidHide driver used by DSX is known to have a compatibility conflict with the Logitech G Hub software, where the latter cannot detect inputs from Logitech racing wheels and loses force feedback function upon reconnecting the peripheral.[10]
Paid software.

JoyToKey

Mouse and keyboard control.
Shareware.

Gamepad Phoenix

Supports XInput, DirectInput and Wii controllers allows to create a unified button and axis mapping for up to 4 controllers.
Emulates DirectInput (any version), WinMM APIs and XInput.
Automatic detection of API, no configuration/file copying needed.
Create controller presets, load one by pressing a single button.
No force feedback support, no emulation of Windows Raw Input API, no motion control support.

Xidi

Xidi provides both DirectInput and WinMM interfaces for games to use and communicates with XInput-based game controllers natively using XInput, translating between the two interfaces as needed.
Xidi is implemented as a library that games should load instead of the system-supplied versions. As such, it is a very localized fix: no installation is required, and no persistent system-wide changes are made.
Xidi by itself only supports XInput-based controllers and will not communicate with non-XInput controllers. For that, the SDL3 plugin is needed.
Fixes issues encountered in older games, such as broken analog controls, phantom button presses, or complete failure to commmunicate with the controller. Without Xidi these issues can come up in DirectInput-based or WinMM-based games when used with an XInput controller.
Enables customization of game controller behavior, including simulating keyboard key presses. This can help make controls more intuitive and bring full controller support to games that only implement partial controller support.
Allows controllers to be changed while a game is running. Older games do not normally support this, but with Xidi controllers can be plugged in, unplugged, and swapped seamlessly during gameplay. Without Xidi this would require exiting and restarting the game.
Xidi is not useful if a game already uses the XInput API to communicate with controllers. These games would not benefit from Xidi.
The problem arises from an older non-XInput controller being used with an XInput-based game. This is the inverse of the problem Xidi solves, for which solution like the Xbox 360 Controller Emulator is needed.

Durazno

Allows XInput controllers to be customized.

XInput Plus

The Xbox Controller Driver and the buggy Force Feedback Driver aren't required with this program.
Features a wide array of advanced options, tweaks, features and some major fixes which other wrappers may lack.
Can translate DirectInput calls into XInput and back. It can also be used on older games using dinput.dll and dinput8.dll.

Xbox 360 Controller Emulator (X360ce)

Can be used to force DirectInput controllers to be detected as XInput ones.
Useful for games which may require multiple players. It also features a wide array of options.
Does not work with games using Unity due to implementation differences.[11]
The current version has an excessive cpu consumption, which causes the games to respond with a long delay with the controls using the controller.

XOutput

Converts DirectInput to XInput, reads and sends data to virtual XBox 360 controller.
It works similarly to "X360ce" with lower resource consumption.
For full expected performance in all games, HID Guardian must be configured. Configuration instructions can be found here.

macOS

ControllerMate

Allows customize various devices, including the keyboard and mouse, joystick, gamepads for use with your computer.
Programming is accomplished using "building blocks".
Unfriendly User Interface.

USB Overdrive

Device driver that handles any USB mouse, trackball, joystick, gamepad, media keyboard and any Bluetooth mouse and lets you configure them either globally or on a per-application, per-device basis.
It supports 64-bit kernels.

Linux

Most distributions come with the xpad driver already. If you're experiencing problems with using controllers in your game, or want to bind your keyboard to the controller, you may want to try xboxdrv, or refer to the controller-specific article for more information.
AntiMicroX application is letting to remap gamepads/joystick buttons to: keyboard buttons, mouse buttons and moves, scripts and executables and macros consisting of elements mentioned above.

InputPlumber

An input routing and remapping daemon for Linux written in Rust.
Uses virtual, composite devices to allow mapping multiple inputs to multiple outputs.
Configuration is done through YAML files.
Complex actions and macros are not yet possible.
Provides a dbus interface.

MoltenGamepad

Flexible Linux input device translator, geared for gamepads.
Create virtual gamepads that almost all games can use. Virtual gamepads are persistent, which fixes the numerous games that break when controllers are disconnected.
Flexible generic device driver framework, where only a text file is needed to support input sources that don't need special features. All configuration files are designed to be human-readable and editable.
Easy loading and saving of event mappings that can be changed at run time.
Specialized userspace driver for Wii remotes that make full use of extension controller hotswapping. Supports a command FIFO or socket for controlling a running instance of MoltenGamepad via scripting. Can handle cases where one event device represents multiple logical controllers (like an arcade stick), or vice versa.
Virtual devices can process rumble events, but this is disabled by default.

Oversteer

Steering Wheel Manager for GNU/Linux
Allows change emulation mode, change rotation range.
Combine accelerator/brakes pedals for games that use just one axis.
Change autocentering force strength.
Change force feedback gain.
Supports device configuration profiles.
Fix system permissions to access all device features.
Overlay window to display/configure range.
Use wheel buttons to configure range.
AllowsHardware performance testing.
Features only for new-lg4ff: Combine accelerator/clutch pedals. Useful for flight simulators. Change global force feedback gain (with new-lg4ff), change each conditional force feedback effect type gain. FFBmeter to monitor FFB clipping using wheel leds or overlay window.

Issues unresolved

Primary device

Some games only use controller set as primary controller on Windows and ignores the rest. If incorrect or no controllers are set to primary, game doesn't work with used controller.
Set your used controller as primary one[citation needed]
  1. Open the Start menu, type joy.cpl, then press Enter.
  2. Push Advanced.
  3. From dropdown list, locate your used controller and then push OK.

Multiple controller order for older games

Instructions[12]
  1. Open the Start menu, type joy.cpl, then press Enter.
  2. Click on the Advanced button.
  3. Select the Preferred device from the drop down menu located on the center.

Issues fixed

Slow or random movement

This may be caused by worn out sticks or by low in-game deadzones.
Calibrating[citation needed]
  1. Open the Start menu, type joy.cpl, then press Enter.
  2. Select the desired controller and click on the Properties button.
  3. Select the Settings tab, then push the Calibrate button and follow the on screen instructions.

Fast movement

Remove any virtual controllers and use the Xbox 360 Controller Emulator instead. If the issue persists see below.
Common issue on games running on the Unity engine due to the Unity input manager using Raw Input instead of DirectInput.
Finding Virtual Controllers[citation needed]
  1. Open the Start menu, type joy.cpl, then press Enter.
  2. Locate the name of the virtual controller driver or utility and remove it.
Rebind Controller Buttons
For Unity games with no launchers hold Shift to access the launcher as the game starts, then select the Input tab.
Check the wiki article for the desired game to find a different rebinding solution. Configuration files may hold such settings.

Game has outdated SDL library

While some games use SDL for controller support, there are situations where controllers are not supported due to the outdated SDL library used by the game. The outdated SDL library often has some controllers missing in the controller list compared to the newer one.
To see what games use SDL, refer to game-specific middleware section.
Configure controller through Steam Big Picture modes settings[citation needed]
This method requires Steam to be installed on a machine.
Use SDL2 Gamepad Tool[citation needed]
  1. Download and open SDL2 Gamepad Tool.
  2. Select desired controller from dropdown menu.
  3. Select "Create a new mapping" and press buttons accordingly.
    • If some button isn't present on the controller, use the "Skip" button and if some key is registered twice, use the "previous" button.
  4. Either set the string as enviromental variable, which should make the controller work with every SDL2 game or alternatively copy the string and paste it to gamecontrollerdb.txt found in games install folder.

List of controllers

See the dedicated list of controllers page.

Other information

Controller hotplugging

Controller hotplugging is the ability to switch controllers without restarting a game.

Notes

  1. For example, both analog left and right triggers are treated as one single axis, which can be an issue for some game genres such as racing games.

References

  1. Human Interface Device - last accessed on June 2023
  2. Can't use the gamepad - last accessed on June 2023
  3. Raw Input Overview - Microsoft Learn - last accessed on November 23, 2025
  4. Microsoft - Xinput Driver for Microsoft Common Controller (32 Bit) Genuine Windows download (archived) - last accessed on 2006-02-03
  5. Gamesir G7 pro impulse trigger support on PC - Gamesir subreddit on Reddit - last accessed on 2026-01-06
  6. GameInput Overview - Microsoft Learn - last accessed on November 23, 2025
  7. Gyro Gaming - Intro to Flick Stick - last accessed on June 2023
  8. Two controllers #80 - last accessed on 9 June 2023
  9. Feature Request: Impulse Trigger Vibration for games supporting Windows.Gaming.Input API - last accessed on June 2023
  10. Verified by User:Yuuyatails on 2024-12-19
    With HidHide installed, the G Hub software won't detect any input from my Logitech G29. In addition, reconnecting the wheel will make it lose all of its FFB functionality unless I restart G Hub with admin rights.
  11. Issue 48 - X360CE - Hooking does not work with Unity Engine - x360ce/x360ce - GitHub - last accessed on June 2023
  12. Verified by User:Blackbird on 2016-10-06
    Far as I can tell this is for DInput games only.