Skip to content

Devices

hifihedgehog edited this page Mar 19, 2026 · 34 revisions

Devices

The Devices page shows every physical input device PadForge has detected. From here you can inspect device details, view raw input state in real time, assign devices to virtual controller slots, and configure input hiding and raw mode.

Devices


Page Layout

The Devices page is split into two panels:

  • Left panel -- the device card list, showing one card per detected device
  • Right panel -- the detail/inspection pane for the selected device (device identity, slot assignment toggles, input hiding options, and live raw input state)

The page header shows a Refresh button (forces a re-scan of all connected devices) and two counters:

  • Online -- the number of currently connected devices
  • Total -- the total number of known devices, including ones that were previously connected but are currently disconnected

Device Card List

Each detected device appears as a rounded card in the left panel. Cards are sorted alphabetically by name, then by VID:PID.

Card Layout

Each card has two rows:

Top row:

Element What it shows
Status dot A small colored circle indicating connection state (see below)
Device name The name reported by the hardware (e.g., "Xbox Wireless Controller", "DualSense Wireless Controller"). For merged devices, shows "All Keyboards (Merged)" or "All Mice (Merged)".
Slot badges Small numbered badges on the right side showing which virtual controller slots this device is assigned to. If the device is not assigned to any slot, a dim "Unassigned" label appears instead.
Remove button A small X button in the upper-right corner that removes the device and all its settings from PadForge entirely

Bottom row (sub-line):

Element What it shows
Type The device category: Gamepad, Joystick, Wheel, Flight Stick, Mouse, Keyboard, etc.
VID:PID The USB Vendor ID and Product ID in hexadecimal (e.g., "054C:0CE6" for a DualSense). Useful for identifying the exact hardware model.
Capabilities A compact summary of what the device has: number of axes, buttons, and POV hats, plus labels for rumble, gyroscope, or accelerometer support if present. For example: "6 axes, 11 buttons, 1 POV, Rumble, Gyro, Accel"

Status Dot Colors

Color Meaning
Green The device is currently connected and being read by PadForge
Gray The device was previously seen but is currently disconnected. Its card stays in the list so all mappings, slot assignments, and settings are preserved for when it comes back online.

Selection

Click a device card to select it. The selected card is highlighted with a vertical accent-colored bar on its left edge. Selecting a device populates the right-side detail pane with that device's information and live input state.

Removing a Device

Click the X button on any device card to permanently remove it. This deletes the device record and all associated settings (mappings, slot assignments, input hiding preferences). The virtual controller slot itself is not deleted -- it simply becomes an empty slot with no device assigned.

Removing an online device stops PadForge from reading it immediately. If the device is still physically connected, it will reappear on the next device scan (via the Refresh button or automatic detection) as a fresh device with no prior settings.


Device Detail Pane

When a device is selected, the right panel shows its full details from top to bottom.

Identity Information

Field Description
Device name Large heading showing the device name
Product The product name string reported by the hardware
Type Device category (Gamepad, Joystick, etc.)
Capabilities Axis/button/POV counts and feature labels
GUID The device instance GUID -- a unique identifier generated from the device's path, VID/PID, and serial number. Uses a scrolling marquee animation if the text is too long for the panel width.
Instance Path The HID instance path used for HidHide blacklisting. Only shown for devices that have a resolvable HID path (not shown for merged keyboard/mouse entries). Also uses marquee scrolling.
VID:PID Vendor ID and Product ID in hex

Submit Mapping Button

For joystick-class devices (flight sticks, wheels, non-gamepad controllers), a Submit Mapping button appears below the identity section. Clicking it opens a pre-filled GitHub issue to contribute a community controller mapping for your device. This button is hidden for gamepads, keyboards, and mice since those device types are handled differently.


Assigning Devices to Slots

There are two ways to assign a physical device to a virtual controller slot:

Toggle Buttons (Detail Pane)

When a device is selected, the detail pane shows a Virtual Controller Assignment section with numbered toggle buttons -- one for each virtual controller slot that currently exists. Click a toggle button to assign or unassign the selected device from that slot.

  • Pressed/highlighted toggle = the device is assigned to that slot
  • Normal toggle = the device is not assigned to that slot
  • You can press multiple toggles to assign one device to several slots at once (see Multi-Slot Assignment below)

When you assign a device to a slot, PadForge automatically creates a default mapping configuration if one does not already exist, and navigates you to the controller configuration page for that slot.

Drag and Drop (Cross-Panel)

You can also drag a device card from the left panel and drop it onto a controller slot card in the sidebar. This assigns the device to that slot -- the same as clicking the corresponding toggle button.

To drag: click and hold on a device card (not on a button within the card), then move the mouse. A drag operation starts once the mouse moves past a small threshold distance.

What Happens on Assignment

When a device is assigned to a slot:

  1. If the slot's virtual controller does not exist yet, it is created automatically
  2. A default button/axis mapping is generated based on the device's type and the slot's output type (Xbox 360, DS4, vJoy, etc.)
  3. For gamepads and joysticks, if HidHide is installed, the "Hide from games" option is automatically enabled to prevent double input
  4. The device's slot badges on its card update to reflect the new assignment

When a device is unassigned from all slots, both hiding options (HidHide and Consume mapped inputs) are automatically cleared.


Multi-Slot Assignment

A single physical device can be assigned to multiple virtual controller slots at the same time. This is useful for:

  • Driving multiple output types simultaneously -- for example, using one controller to feed both an Xbox 360 virtual controller (for a game) and a vJoy virtual controller (for a flight sim overlay or accessibility tool) at the same time
  • Mapping different button subsets to different outputs -- you could map the left side of a controller to one virtual controller and the right side to another
  • Testing multiple mapping configurations -- quickly compare different dead zone, sensitivity, or macro setups without swapping devices
  • MIDI + gamepad dual output -- using a controller for both game input and MIDI control signals simultaneously

To assign a device to multiple slots, simply toggle on multiple slot buttons in the detail pane. Each slot gets its own independent mapping configuration, so the same physical button or axis can be mapped differently in each slot.

The device card's slot badges show all assigned slot numbers at a glance. The badge numbers are sequential (1, 2, 3...) based on created slot order, not raw internal slot indices.


Raw Input State

When a device is selected and online, the bottom section of the detail pane shows its live raw input state. This is the unprocessed data coming directly from the hardware, before any mappings, dead zones, sensitivity curves, or other processing. It updates in real time at the engine's polling rate.

Axes (Gamepads and Joysticks)

Each axis is shown as a row with three elements:

Element Description
Name The axis label (e.g., "Axis 0", "Axis 1"). In gamepad mode, these correspond to standard gamepad axes (LX, LY, LT, RX, RY, RT). In raw mode, they use generic numbered names.
Progress bar A horizontal bar showing the axis position from minimum (empty) to maximum (full). The bar is normalized to a 0--1 range. For a centered stick, expect roughly 50% fill.
Raw value The raw numeric value (0--65535) displayed in a monospace font on the right side. This is the exact integer value being read from the hardware.

Common things to look for:

  • Center drift: If a stick's axis does not rest at roughly 32768 (50%) when untouched, the stick has physical center drift. Use the Calibrate Center feature on the Sticks tab to compensate.
  • Trigger baseline: Some triggers rest at 0 (fully released) while others rest at 32768 (center). This depends on the hardware and whether the device is in gamepad or raw mode.
  • Dead axes: If an axis never moves from 0 or 32768 regardless of physical input, the mapping database may have an error for your device. Try Force Raw Joystick Mode (see below).

Buttons (Gamepads and Joysticks)

Buttons are displayed as a grid of small circles arranged in a flowing wrap layout. Each circle is labeled with its button index number (0, 1, 2, ...).

State Appearance
Released Dim gray circle
Pressed Filled with the system accent color (e.g., blue)

The tooltip on each circle shows "Button N" where N is the index. In gamepad mode, 11 standard buttons are shown (A, B, X, Y, LB, RB, Back, Start, LS, RS, Guide mapped to indices 0--10). In raw joystick mode, all physical buttons are shown (e.g., 13 or 17 buttons for some controllers).

Keyboard Devices

When a keyboard device is selected, instead of axes and button circles, a visual QWERTY keyboard layout is shown. This includes the full main keyboard, navigation cluster (Insert/Delete/Home/End/Page Up/Page Down), arrow keys, and numeric keypad.

Keys light up with the accent color in real time as they are pressed. This is useful for verifying which virtual key codes PadForge is receiving and confirming that key mappings will target the right keys.

Mouse Devices

When a mouse device is selected, a visual mouse graphic is shown instead of axes and buttons. The graphic displays:

  • Button presses highlighted on the mouse body (left click, right click, middle click, side buttons)
  • Motion direction indicated visually as the mouse moves
  • Scroll wheel activity shown as scroll intensity

POV / D-Pad

POV (Point of View) hat switches are shown as compass widgets -- small circles with a directional indicator line. Each POV hat gets its own compass, labeled "POV 0", "POV 1", etc.

State Appearance
Centered (no direction pressed) Just the background circle with a center dot; no directional line
Direction pressed An accent-colored line extends from the center toward the pressed direction. The line rotates smoothly to show the exact angle.

The compass supports all 8 directions: N (up), NE, E (right), SE, S (down), SW, W (left), NW. Most D-pads report cardinal and diagonal directions. Some specialty controllers use continuous POV values for fine-grained angular control.

Gyroscope

For devices with a gyroscope sensor (DualSense, DualShock 4, Switch Pro Controller, and similar), a labeled panel shows real-time rotational velocity values for all three axes:

  • X -- pitch (tilting forward/backward)
  • Y -- yaw (rotating left/right)
  • Z -- roll (tilting side to side)

Values are shown in monospace font with three decimal places. When the controller is stationary, values should be near 0.000. Moving the controller produces positive or negative values depending on the direction and speed of rotation.

Accelerometer

For devices with an accelerometer sensor, a similar panel shows linear acceleration values:

  • X -- left/right acceleration
  • Y -- up/down acceleration (includes gravity; expect roughly 1.0 or -1.0 when stationary depending on orientation)
  • Z -- forward/backward acceleration

The gyroscope and accelerometer panels only appear when the selected device actually reports motion sensor data.


Input Hiding

When a physical device is assigned to a virtual controller slot, games may see both the physical device and the virtual controller -- causing double input (every button press registers twice, stick movements are doubled). PadForge provides two mechanisms to prevent this, configurable per device from the detail panel.

Hide from Games (HidHide)

Uses the HidHide kernel-mode driver to completely hide the physical device at the operating system level. Games and other applications cannot see the device at all, as if it were unplugged -- but PadForge can still read it because PadForge is added to HidHide's whitelist automatically.

Best for Gamepads, joysticks, racing wheels, flight sticks -- any dedicated game controller
Requires HidHide driver installed. If not installed, the checkbox is grayed out with a tooltip explaining why. Install HidHide from the Driver Management page in Settings.
Scope The entire device is hidden from all non-whitelisted applications. All inputs are invisible, not just the ones you have mapped.
When it applies Immediately upon toggling. Hiding persists even if PadForge is restarted (the blacklist entries are cached).

Additional whitelist entries: If you need other applications to also see hidden devices (e.g., a streaming overlay or a secondary remapper), you can add their executable paths to the HidHide whitelist in Settings.

Consume Mapped Inputs (Hooks)

Intercepts and suppresses only the specific keys or mouse buttons that are actively mapped to a virtual controller output. Unmapped inputs pass through to other applications normally.

Best for Keyboards and mice -- where you only want to suppress the specific keys/buttons you have mapped, while leaving everything else (typing, mouse movement, other keys) working normally
Requires Nothing -- this uses Windows low-level input hooks, no driver needed
Scope Only the mapped keys/buttons are suppressed. Everything else works normally for typing, browsing, and other applications.
Visibility This option is only shown for keyboard and mouse devices. It does not appear for gamepads or joysticks.

When to Use Which

Scenario Recommended method
Xbox/PlayStation/Switch controller assigned to a virtual controller slot Hide from Games (HidHide) -- the game should only see the virtual controller
Racing wheel or flight stick assigned to a slot Hide from Games (HidHide) -- same reasoning
Keyboard with a few keys mapped to gamepad buttons Consume Mapped Inputs -- only suppress the mapped keys so you can still type normally
Mouse with side buttons mapped to gamepad buttons Consume Mapped Inputs -- suppress only the mapped side buttons while keeping normal mouse functionality
You want to hide a keyboard entirely from all apps Hide from Games (HidHide) -- but see safety warnings below, this is dangerous

Auto-Enable Defaults

When you first assign a device to a slot, PadForge automatically enables the appropriate hiding mechanism:

Device Type "Hide from games" "Consume mapped inputs"
Gamepad / Joystick / Wheel / Flight Stick Automatically enabled (if HidHide is installed) Not shown
Keyboard Not enabled Not enabled
Mouse Not enabled Not enabled

Keyboards and mice intentionally do not auto-enable any hiding. Accidentally blocking keyboard or mouse input can make your computer very difficult to control.

When a device is removed from all slots (unassigned from every slot), both hiding options are automatically cleared.

Safety Warnings

PadForge shows a confirmation warning flyout when you manually enable either hiding method on a keyboard or mouse:

  • HidHide on a keyboard: Warns that the entire keyboard will be hidden from all applications. You will lose the ability to type anywhere outside of PadForge. This is especially dangerous on the "All Keyboards (Merged)" entry because it hides every connected keyboard at once.
  • HidHide on a mouse: Warns that you will lose mouse control in all applications outside PadForge. On the "All Mice (Merged)" entry, this affects every connected mouse.
  • Consume Mapped Inputs on a keyboard: Warns that mapped keys (which may include commonly used keys) will stop working in other applications while PadForge is running.
  • Consume Mapped Inputs on a mouse: Warns that mapped mouse buttons (potentially including left/right click) will be suppressed, which could make your computer difficult to use.

You can click Cancel on the warning to revert the toggle without making any changes, or click Proceed if you understand the risk.

Master Switch

A global "Hide devices from games" toggle in Settings (under Input Engine) acts as a master on/off switch. When this is OFF, no hiding or input suppression occurs regardless of individual per-device toggle settings. When turned back ON, all per-device settings resume. This is a quick way to temporarily disable all hiding without losing your per-device configuration.


Force Raw Joystick Mode

By default, PadForge uses SDL3's gamepad remapping layer for recognized gamepads. This layer translates the device's raw button/axis indices into a standard layout (A/B/X/Y, LX/LY, LT/RT, etc.) based on a built-in controller database. This is convenient because it means an Xbox controller, a DualSense, and a Switch Pro Controller all use the same button names and axis ordering.

However, the SDL3 controller database is not perfect. Some devices have incorrect or incomplete mappings, causing problems.

Force Raw Joystick Mode bypasses SDL3's gamepad remapping entirely and reads the raw hardware indices directly -- the same values you would see in Windows Game Controllers (joy.cpl) or other raw input tools.

When to Use

Enable Force Raw Joystick Mode when:

  • Buttons are mapped to wrong outputs -- e.g., pressing A registers as B, or the triggers are swapped
  • Some buttons produce no input at all -- SDL3's mapping may be consuming physical buttons and mapping them to standard slots that do not match your device, causing inputs to "disappear"
  • Extra buttons are missing -- some controllers have more buttons than the standard 11-button gamepad layout. SDL3 only exposes the standard buttons; extra buttons (like paddle buttons, touchpad click, or additional triggers) may be dropped. Raw mode reads all physical buttons.
  • A device works correctly in joy.cpl but not in PadForge -- this strongly suggests the SDL3 mapping is the problem
  • Third-party or niche gamepads -- budget controllers, retro adapters, custom arcade sticks, or controllers from lesser-known manufacturers are more likely to have incorrect or missing SDL3 database entries
  • DsHidMini controllers in SDF mode -- DualShock 3 controllers using DsHidMini's SDF (raw HID) mode require raw mode because SDL3's standard mapping drops some buttons

How to Enable

  1. Select the device card in the left panel
  2. In the detail pane, find the Input Mode section (appears only for gamepad-type devices)
  3. Check the Force raw joystick mode checkbox
  4. The setting is saved immediately and persists across PadForge restarts

What Changes in Raw Mode

  • Axis names change from friendly names (LX, LY, LT, etc.) to numbered names (Axis 0, Axis 1, Axis 2, ...) matching joy.cpl indices
  • Button names change from A/B/X/Y to Button 0, Button 1, Button 2, ... matching joy.cpl indices
  • Button count may increase -- raw mode shows all physical buttons, not just the standard 11
  • Auto-mapping is unavailable -- you must record each mapping manually (the Record button on the mapping page)
  • The raw input display updates to show the new button/axis count immediately when you toggle the setting

When Not to Use

If your controller works correctly in normal gamepad mode (buttons map to the right outputs, no inputs are missing), there is no benefit to raw mode. Gamepad mode is more convenient because it uses friendly names and provides automatic default mappings.

The Input Mode section is only shown for devices that SDL3 recognizes as gamepads. Devices that are already operating in raw joystick mode by nature (flight sticks, racing wheels, generic HID joysticks) do not show this toggle because they always read raw indices.


Device Reconnection and GUID Persistence

PadForge identifies devices using a deterministic GUID system that aims to recognize a device reliably even across reboots, re-plugs, and USB port changes.

How Device GUIDs Are Generated

PadForge generates each device's instance GUID from stable identifiers, using a priority system:

  1. Serial number (best) -- If the device reports a serial number (common for Bluetooth controllers, which expose their MAC address as a serial), the GUID is built from VID + PID + serial. This is stable across reboots, re-pairing, and USB port changes.
  2. Device path (good) -- If no serial is available, the device's filesystem path is used. This is stable for wired devices plugged into the same USB port, but may change if you plug the controller into a different port.
  3. SDL instance ID (last resort) -- If neither serial nor device path is available, a session-specific SDL instance ID is used with VID + PID. This may change every time the device is reconnected.

What This Means for You

  • Bluetooth controllers (DualSense, DualShock 4, Switch Pro, etc.) keep the same GUID across reboots, re-pairs, and port changes because their Bluetooth MAC address serves as a stable serial number. All your mappings and settings persist automatically.
  • Wired USB controllers keep the same GUID as long as you plug them into the same USB port. Plugging into a different port may generate a new GUID, in which case PadForge treats it as a new device. Your mappings from the old port are still saved on the old (now offline/gray) device card.
  • Profile switching uses a ProductGuid fallback: if a profile was saved with a device that now has a different InstanceGuid (e.g., you changed USB ports), PadForge tries to match by ProductGuid (VID/PID combination) so your profile still works.

Offline Device Cards

When a device is disconnected, its card stays in the list with a gray status dot. This is intentional:

  • All mappings, slot assignments, and settings are preserved
  • When the device is reconnected (and receives the same GUID), everything is restored automatically
  • You can remove an offline device card with the X button if you no longer need it
  • Offline device cards do not consume any resources -- they are just stored settings

Stick Calibration

Some controllers have natural center drift -- the stick rests slightly off-center even when not being touched. PadForge provides per-stick calibration to compensate:

Center Offset

The center offset setting adjusts the stick's resting position so that the dead zone is centered on the actual hardware center rather than the theoretical center. To calibrate:

  1. Go to the Sticks tab on a controller's configuration page
  2. Click Calibrate Center while the stick is at rest (not touching it)
  3. PadForge samples the hardware values for approximately half a second and calculates the offset

The center offset is applied before dead zone processing, so your dead zone circle stays centered on the actual rest position.

Max Range

The Max Range setting (0--100%) for each axis controls the maximum physical travel that maps to full output. If your stick cannot physically reach the corners (common with some controllers), reducing max range ensures you can still reach 100% output without having to push the stick beyond its physical limit.


Troubleshooting

Device Does Not Appear

  • Click the Refresh button at the top of the page to force a re-scan
  • Verify the device appears in Windows Device Manager or Windows Game Controllers (joy.cpl)
  • If the device is a Bluetooth controller, make sure it is paired and connected in Windows Bluetooth settings
  • PadForge filters out its own virtual controllers (ViGEm, vJoy) automatically -- these will not appear in the device list
  • Some devices require specific drivers. Check the manufacturer's website.

Device Appears But Shows No Input

  • Select the device and check the raw input state section -- are axes, buttons, and POVs being shown?
  • If axes and buttons appear but never change when you press buttons or move sticks, the device may need a driver update or the SDL3 mapping may be incorrect. Try enabling Force Raw Joystick Mode.
  • For Bluetooth devices, check that the connection is stable (the status dot should be green)

Buttons Are Missing or Mapped Wrong

  • Enable Force Raw Joystick Mode -- this bypasses SDL3's potentially incorrect gamepad mapping and shows all physical buttons
  • Compare what you see in PadForge's raw input display with what Windows Game Controllers (joy.cpl) shows for the same device
  • If your device is a joystick type without a community mapping, consider clicking Submit Mapping to contribute one

Double Input in Games

  • Make sure Hide from games (HidHide) is enabled on the device card, OR
  • For keyboard/mouse devices, enable Consume Mapped Inputs
  • Verify the master "Hide devices from games" toggle in Settings is turned ON
  • Check that HidHide is properly installed via the Driver Management page

Device Lost Settings After Reconnecting

  • If you plugged a wired controller into a different USB port, it may have received a new GUID. Your old settings are still on the offline (gray) device card for the original port. You can either: plug the controller back into the original port, or set up the device again on the new card.
  • Bluetooth controllers should retain their GUID across reconnections because the serial number (MAC address) is used for identification

Center Drift Even After Calibration

  • Make sure you calibrated with the stick completely at rest -- do not touch it during calibration
  • If drift is severe, the controller's analog stick may be physically worn. Increasing the dead zone size on the Sticks tab can help compensate.

HidHide Toggle Is Grayed Out

  • HidHide driver is not installed. Go to Settings and then Driver Management to install it.
  • After installing HidHide, restart PadForge for the toggle to become available.

Related Pages

Clone this wiki locally