Skip to content

Devices

hifihedgehog edited this page May 20, 2026 · 34 revisions

Devices

Every gamepad, joystick, keyboard, mouse, and touchpad PadForge can see lives on this page as a card.

Devices page showing detected controllers with status and slot badges


Page layout

Area What it holds
Left panel One card for each detected device
Right panel Detail pane for the selected device. Identity, slot assignment, hiding, live raw input.
Header Refresh button, Online count, Total count (includes disconnected)

Device card list

Cards sort alphabetically by name, then by VID:PID.

Card layout

Top row:

Element Description
Status dot Green for connected, gray for disconnected
Device name The name the hardware reports (e.g., "Xbox Wireless Controller"). Merged devices show "All Keyboards (Merged)" or "All Mice (Merged)".
Slot badges Controller Slots numbers the device is assigned to. A dim "Unassigned" label appears if none.
Remove button X. Deletes the device and its settings.

Bottom row:

Element Description
Type Gamepad, Joystick, Wheel, Flight Stick, Mouse, Keyboard, etc.
VID:PID USB Vendor and Product ID in hex (054C:0CE6 for DualSense)
Capabilities Axis, button, and POV hat counts plus feature tags (Rumble, Gyro, Accel)

Selecting a card

Click a card. A vertical accent bar appears on the left edge. The detail pane fills in.

Removing a device

The X button deletes the device and all its settings (mappings, slot assignments, hiding). The Controller Slots stays. It just becomes unassigned.

If the device is still plugged in, it comes back on the next scan as a fresh device with no settings.


Device detail pane

Identity

Field Description
Device name Large heading
Product Product name from hardware
Type Device category
Capabilities Axis / button / POV counts and feature tags
GUID Instance GUID built from device path, VID:PID, and serial number. Marquee-scrolls if long.
Instance Path HID path used for HidHide blacklisting. Shown only for devices that report a resolvable HID path. Marquee-scrolls if long.
VID:PID Vendor and Product ID in hex

Submit Mapping button

Shows on the card for any joystick-class HID device PadForge does not already know as a standard gamepad. Hidden for known gamepads, keyboards, mice, and touchpads.

Click it. Your browser opens a GitHub issue pre-filled with every field PadForge can read from the device:

  • Device name
  • USB Vendor ID (hex)
  • USB Product ID (hex)
  • SDL GUID (the 32-character hex string SDL uses to look up mappings)
  • Axis count
  • Button count
  • Hat / POV count

You fill in the per-input mapping by hand. Which raw axis index is Left Stick X. Which raw button index is A. Read those off the raw input section on this page while pressing each control.

Once the issue is merged, the mapping ships in gamecontrollerdb_padforge.txt and auto-loads on every PadForge install. Future users with the same hardware get the device recognized without further setup.

Why use the button over a blank template

The blank Device Mapping issue template makes you type the device identification fields yourself. The in-app button reads them straight from PadForge's live SDL3 enumeration, so the SDL GUID can't be mistyped. Use the button when the device is plugged in.


Assigning devices to slots

Toggle buttons

The Virtual Controller Assignment section in the detail pane shows numbered toggles, one per existing Controller Slots.

  • Highlighted = assigned to that slot
  • Normal = not assigned
  • More than one toggle can be on at the same time (see Multi-slot below)

Assigning a device builds a default Button and Axis Mappings if none exists, then opens the controller config page.

Drag and drop

Drag a card from the left panel onto a sidebar slot card. Same result as clicking the toggle.

What happens on assignment

  1. The slot's Controller Slots is created if it does not exist yet
  2. A default Button and Axis Mappings is built for the device type and output type (Xbox, PlayStation, Extended, etc.)
  3. For gamepads and joysticks, "Hide from games" turns on if HidHide is installed
  4. Slot badges update right away

Unassigning a device from every slot clears both hiding options.


Multi-slot assignment

One physical device can feed more than one Controller Slots at the same time. Real uses:

  • Two output types at once. One pad feeding an Xbox slot for the game and an Extended slot for a flight sim overlay.
  • Split button subsets. Left side mapped to one slot, right side to another.
  • A/B testing. Compare Stick Deadzones, sensitivity, or Macros setups without swapping hardware.
  • MIDI plus gamepad. Game input and MIDI signals from the same pad.

Toggle multiple slot buttons in the detail pane. Each slot keeps its own Button and Axis Mappings, so the same physical input can mean different things on different slots.

Slot badges show every assigned slot number at a glance.


Raw input

The bottom of the detail pane shows live hardware data before any Button and Axis Mappings, Stick Deadzones, or sensitivity work. Updates at the engine polling rate.

Axes

Each axis row has:

Element Description
Name Gamepad mode: LX, LY, LT, RX, RY, RT. Raw mode: Axis 0, Axis 1, etc.
Progress bar Horizontal, 0-1 range. A centered stick reads ~50%.
Raw value Exact integer (0-65535) in monospace

Look for:

  • Center drift. The axis does not rest at ~32768 when you let go. Use Calibrate Center on the Stick Deadzones tab.
  • Trigger baseline. Some triggers rest at 0, others at 32768. Depends on hardware and input mode.
  • Dead axes. Axis never moves. The mapping database may have a bad entry. Try Force Raw Joystick Mode.

Buttons

Small circles in a wrap layout, labeled by index (0, 1, 2...).

State Look
Released Dim gray
Pressed Filled with the system accent color

Gamepad mode shows 11 standard buttons (A, B, X, Y, LB, RB, Back, Start, LS, RS, Guide). Raw mode shows every physical button (13 or 17 on some controllers).

Keyboards

A QWERTY layout replaces axes and buttons. Main keys, navigation cluster, arrows, numpad. Keys light up in the accent color as you press them.

Mice

A mouse graphic replaces axes and buttons:

  • Button presses highlight on the mouse body
  • Motion direction shows visually
  • Scroll wheel activity reads as scroll intensity

POV / D-pad

Compass widgets with a direction line, labeled "POV 0", "POV 1", etc.

State Look
Centered Background circle with center dot, no line
Direction pressed Accent line from center toward the pressed direction

All 8 directions are supported (N, NE, E, SE, S, SW, W, NW). Some specialty controllers report continuous angular values.

Gyroscope

Shows on devices with a gyro sensor (DualSense, DualShock 4, Switch Pro, others). Rotational velocity. Used by the DSU Motion Server for motion-enabled emulators.

Axis Motion
X Pitch (forward / backward tilt)
Y Yaw (left / right rotation)
Z Roll (side-to-side tilt)

Three decimal places. A still controller reads near 0.000.

Accelerometer

Shows on devices with an accelerometer. Linear acceleration:

Axis Motion
X Left / right
Y Up / down (includes gravity, so ~1.0 or -1.0 when still)
Z Forward / backward

Touchpads

PadForge reads two kinds of touch surfaces.

  • Gamepad touchpads. The touch surfaces on DualShock 4, DualSense, Steam Controller, and Steam Deck. SDL3 reports them as part of the gamepad. They show up in the raw input view with contact position and finger count.
  • Windows Precision Touchpad. Laptop trackpads and external precision touchpads. PadForge reads them through the precision-touchpad reader and treats each one as its own device card with live touch preview.

Input hiding

When a physical device feeds a Controller Slots, games can see both devices and double up the input. PadForge offers two ways to stop that, set per device.

Hide from Games (HidHide)

Hides the physical device at the OS level using HidHide. Games cannot see it. PadForge is whitelisted automatically.

Best for Gamepads, joysticks, wheels, flight sticks
Requires HidHide installed. Grayed out otherwise. Install from Driver Management.
Scope The whole device is hidden from every non-whitelisted app
Takes effect Right away. Persists across restarts.

You can whitelist more apps in Settings so they can still see hidden devices (streaming overlays, secondary remappers, etc.).

Consume Mapped Inputs (Hooks)

Suppresses only the specific keys or mouse buttons Button and Axis Mappings to a virtual controller output. Unmapped inputs pass through.

Best for Keyboards and mice. Mapped keys are blocked, typing and the cursor still work.
Requires Nothing. Uses Windows low-level input hooks.
Scope Only mapped keys / buttons are suppressed
Visibility Shows only for keyboards and mice

Which to use

Situation Method
Xbox / PlayStation / Switch controller Hide from Games
Racing wheel or flight stick Hide from Games
Keyboard with a few keys mapped Consume Mapped Inputs
Mouse with side buttons mapped Consume Mapped Inputs
Hide a keyboard entirely Hide from Games (read the warnings)

Auto-enable defaults

Device type Hide from Games Consume Mapped Inputs
Gamepad / Joystick / Wheel / Flight Stick Auto-enabled (if HidHide is installed) Not shown
Keyboard Off Off
Mouse Off Off

Keyboards and mice do not auto-enable any hiding. Blocking them by accident makes the PC hard to use.

Unassigning a device from every slot clears both hiding options.

Safety warnings

PadForge shows a confirmation flyout when you turn on hiding for a keyboard or mouse:

  • HidHide on keyboard. Every app loses keyboard access. "All Keyboards (Merged)" affects every connected keyboard.
  • HidHide on mouse. Every app outside PadForge loses mouse control. "All Mice (Merged)" affects every connected mouse.
  • Consume on keyboard. Mapped keys stop working in other apps while PadForge runs.
  • Consume on mouse. Mapped buttons (possibly left / right click) are suppressed.

Click Cancel to back out or Proceed to confirm.

Master switch

The global "Hide devices from games" toggle in Settings (under Input Engine) is the master on / off. With it off, no hiding or suppression runs, no matter what each device is set to. Flipping it back on restores every per-device setting.


Force Raw Joystick Mode

By default, PadForge uses SDL3's gamepad layer for known gamepads. SDL3 translates raw button and axis indices into a standard layout (A/B/X/Y, LX/LY, LT/RT) via a built-in controller database.

Force Raw Joystick Mode skips that translation and reads raw hardware indices straight, the same values Windows Game Controllers (joy.cpl) shows.

Turn it on when

Symptom Why
Buttons map to the wrong outputs SDL3's mapping does not match the device
Some buttons read no input SDL3 ate the button and sent it to a slot that does not match
Extra buttons go missing Controllers with more than 11 buttons lose the extras in gamepad mode
Works in joy.cpl but not PadForge SDL3 mapping is wrong
Off-brand or niche gamepads Budget controllers, retro adapters, arcade sticks often have wrong database entries
DsHidMini SDF mode DualShock 3 via SDF needs raw mode. SDL3 drops some buttons.

How to turn it on

  1. Select the device card
  2. In the detail pane, find the Input Mode section (gamepad-type devices only. The section is hidden for PadForge's own virtual controllers and other virtual input sources.)
  3. Check Force raw joystick mode
  4. Saved right away. Persists across restarts.

What changes

  • Axis names: LX, LY, LT... become Axis 0, Axis 1, Axis 2... (same as joy.cpl)
  • Button names: A, B, X, Y... become Button 0, Button 1, Button 2...
  • Button count can rise. Raw mode exposes every physical button.
  • Auto-mapping is off. Record each Button and Axis Mappings by hand from the Record button.
  • The raw input display updates right away

When not to use it

If the controller works fine in gamepad mode, raw mode gains you nothing. Gamepad mode gives you friendly names and a default mapping.

The toggle only shows for devices SDL3 recognizes as gamepads. Devices already running as raw joysticks (flight sticks, wheels, generic HID) always use raw indices.


Reconnection and GUID persistence

PadForge identifies devices with deterministic GUIDs so they survive reboots, re-plugs, and port changes.

How the GUID is built

Priority Source Stability
1 Serial number (e.g., Bluetooth MAC address) Stable across reboots, re-pairing, and port changes
2 Device path Stable for the same USB port. Changes if you switch ports.
3 SDL instance ID + VID:PID Can change on every reconnect

What that means

  • Bluetooth controllers (DualSense, DualShock 4, Switch Pro). GUID stays the same across reboots and re-pairs. Settings stick.
  • Wired USB controllers. GUID stays the same on the same USB port. A different port makes a new GUID. The old settings stay on the offline (gray) card.
  • Profiles. Uses a ProductGuid fallback. If a profile was saved with a device that now has a different InstanceGuid (port change, for example), PadForge matches by VID:PID so the profile still applies.

Offline device cards

Disconnected devices stay in the list with a gray dot.

  • Every mapping, slot assignment, and setting is kept
  • Reconnect with the same GUID and everything comes back
  • Remove with the X button if you no longer need it
  • Offline cards cost nothing at runtime. Stored settings only.

Stick calibration

Center offset

Fixes center drift: a stick that does not rest in the middle.

  1. Go to the Sticks tab on the controller's config page (see Stick Deadzones)
  2. Click Calibrate Center while the stick is at rest (do not touch it)
  3. PadForge samples hardware values for ~500 ms and calculates the offset

The offset is applied before deadzone processing, which keeps the deadzone circle centered on the real rest position.

Max range

Sets the maximum physical travel (0-100%) that maps to full output. If the stick cannot reach the corners, lower the max range so full output is reachable within the stick's actual travel.


Troubleshooting

Device does not appear

  • Click Refresh to re-scan
  • Confirm the device shows up in Device Manager or joy.cpl
  • For Bluetooth controllers, check pairing in Windows Bluetooth settings
  • PadForge filters out its own Controller Slots (HIDMaestro outputs) on purpose
  • Some devices need a manufacturer driver

Device appears but shows no input

  • Check the raw input section. Are axes, buttons, and POVs drawn?
  • If they show but never change, try Force Raw Joystick Mode
  • For Bluetooth devices, confirm a stable connection (green status dot)

Buttons missing or mapped wrong

  • Turn on Force Raw Joystick Mode to skip SDL3's mapping
  • Compare PadForge's raw input view with joy.cpl
  • For an unmapped joystick-type device, click Submit Mapping to contribute a mapping

Double input in games

  • Turn on Hide from Games on the device, or Consume Mapped Inputs for keyboards and mice
  • Confirm the master "Hide devices from games" toggle in Settings is on
  • Confirm HidHide is installed via Driver Management

Settings lost after reconnecting

  • A wired controller on a different USB port gets a new GUID. Old settings stay on the offline (gray) card. Plug back into the original port, or reconfigure on the new card.
  • Bluetooth controllers keep their GUID via MAC address. Settings persist.

Center drift after calibration

  • Make sure the stick was completely at rest during calibration
  • For bad drift, the stick may be worn out. Raise the Stick Deadzones on the Sticks tab to cover it.

HidHide toggle grayed out or missing

  • Grayed out: HidHide is not installed. Install via Driver Management and restart PadForge.
  • Missing: the device is a virtual input source (PadForge's own virtual controllers, software keyboards, etc.). Hiding a virtual source has no meaning, so the toggle is left out instead of shown disabled.

Related pages

Last updated for PadForge 3.2.0.

Clone this wiki locally