-
Notifications
You must be signed in to change notification settings - Fork 2
Devices
The Devices page lists every physical input device PadForge detects. Select a device to inspect its identity, view live raw input, assign it to Controller Slots slots, or configure input hiding and raw mode.

| Area | Contents |
|---|---|
| Left panel | Device card list, one card per detected device |
| Right panel | Detail pane for the selected device: identity, slot assignment, hiding options, live raw input |
| Page header | Refresh button (re-scan), Online count, Total count (includes disconnected) |
Each device appears as a rounded card, sorted alphabetically by name then by VID:PID.
Top row:
| Element | Description |
|---|---|
| Status dot | Green = connected, gray = disconnected |
| Device name | Hardware-reported name (e.g., "Xbox Wireless Controller"). Merged devices show "All Keyboards (Merged)" or "All Mice (Merged)". |
| Slot badges | Assigned [[Controller Slots |
| Remove button | X button, permanently 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 (e.g., "054C:0CE6" for DualSense) |
| Capabilities | Axis, button, and POV hat counts plus feature labels (Rumble, Gyro, Accel) |
Click a card to select it. The selected card shows a vertical accent-colored bar on its left edge and populates the detail pane.
The X button removes the device and all its settings (mappings, slot assignments, hiding preferences). The Controller Slots itself stays; it just becomes unassigned.
If the device is still physically connected, it reappears on the next scan as a fresh device with no settings.
| Field | Description |
|---|---|
| Device name | Large heading |
| Product | Product name from hardware |
| Type | Device category |
| Capabilities | Axis/button/POV counts and feature labels |
| 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 with a resolvable HID path (not merged keyboard/mouse). Marquee-scrolls if long. |
| VID:PID | Vendor and Product ID in hex |
Appears for joystick-class devices (flight sticks, wheels, non-gamepad controllers). Opens a pre-filled GitHub issue to contribute a controller mapping. Hidden for gamepads, keyboards, and mice.
The Virtual Controller Assignment section shows numbered toggle buttons, one per existing Controller Slots.
- Highlighted = assigned to that slot
- Normal = not assigned
- Multiple toggles can be active (see Multi-Slot Assignment below)
Assigning a device creates a default Button and Axis Mappings if none exists and navigates to the controller configuration page.
Drag a device card from the left panel onto a sidebar slot card. This assigns the device, identical to clicking the toggle button.
- The slot's Controller Slots is created if it does not exist
- A default Button and Axis Mappings is generated based on device type and output type (Xbox 360, DualShock 4, DirectInput (vJoy), etc.)
- For gamepads and joysticks, "Hide from games" is auto-enabled if HidHide is installed
- Slot badges update immediately
Unassigning a device from all slots clears both hiding options.
A single physical device can feed multiple Controller Slots at once. Use cases:
- Dual output types — one controller feeding both Xbox 360 (for a game) and vJoy (for a flight sim overlay)
- Split button subsets — left side mapped to one slot, right side to another
- Comparing configurations — test different Stick Dead Zones, sensitivity, or Macros setups without swapping devices
- MIDI + gamepad — simultaneous game input and MIDI control signals
Toggle on multiple slot buttons in the detail pane. Each slot has its own independent Button and Axis Mappings, so the same physical input can translate differently per slot.
Slot badges show all assigned slot numbers at a glance.
The bottom section of the detail pane shows live, unprocessed hardware data before any Button and Axis Mappings, Stick Dead Zones, or sensitivity curves. Updates at the engine's polling rate.
Each axis shows:
| Element | Description |
|---|---|
| Name | Gamepad mode: LX, LY, LT, RX, RY, RT. Raw mode: Axis 0, Axis 1, etc. |
| Progress bar | Horizontal bar, 0-1 range. Centered stick reads ~50%. |
| Raw value | Exact integer (0-65535) in monospace font |
What to watch for:
- Center drift — axis does not rest at ~32768 when untouched. Use Calibrate Center on the Stick Dead Zones tab.
- Trigger baseline — some triggers rest at 0, others at 32768, depending on hardware and input mode.
- Dead axes — axis never moves. The mapping database may have an error. Try Force Raw Joystick Mode.
Small circles in a flowing wrap layout, labeled by index (0, 1, 2...).
| State | Appearance |
|---|---|
| Released | Dim gray circle |
| Pressed | Filled with system accent color |
Gamepad mode shows 11 standard buttons (A, B, X, Y, LB, RB, Back, Start, LS, RS, Guide). Raw mode shows all physical buttons (e.g., 13 or 17 on some controllers).
A visual QWERTY layout replaces axes and buttons: main keyboard, navigation cluster, arrows, and numpad. Keys light up with the accent color in real time.
A visual mouse graphic replaces axes and buttons:
- Button presses highlighted on the mouse body
- Motion direction shown visually
- Scroll wheel activity as scroll intensity
Compass widgets with a directional indicator line, labeled "POV 0", "POV 1", etc.
| State | Appearance |
|---|---|
| Centered | Background circle with center dot, no line |
| Direction pressed | Accent-colored line from center toward pressed direction |
Supports all 8 directions (N, NE, E, SE, S, SW, W, NW). Some specialty controllers report continuous angular values.
Appears for devices with a gyro sensor (DualSense, DualShock 4, Switch Pro Controller, etc.). Shows 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) |
Values show three decimal places. A stationary controller reads near 0.000.
Appears for devices with an accelerometer. Shows linear acceleration:
| Axis | Motion |
|---|---|
| X | Left/right |
| Y | Up/down (includes gravity — ~1.0 or -1.0 when stationary) |
| Z | Forward/backward |
When a physical device is assigned to a Controller Slots, games may detect both devices, causing double input. PadForge provides two prevention methods, configurable per device.
Uses HidHide to hide the physical device at the OS level. Games cannot see it. PadForge is whitelisted automatically.
| Best for | Gamepads, joysticks, wheels, flight sticks |
| Requires | HidHide installed. Grayed out otherwise. Install via Driver Management. |
| Scope | Entire device hidden from all non-whitelisted apps |
| Takes effect | Immediately. Persists across restarts. |
Additional apps can be whitelisted in Settings to see hidden devices (e.g., streaming overlays, secondary remappers).
Suppresses only the specific keys or mouse buttons actively Button and Axis Mappings to a virtual controller output. Unmapped inputs pass through normally.
| Best for | Keyboards and mice: suppress mapped keys only, typing and cursor unaffected |
| Requires | Nothing (uses Windows low-level input hooks) |
| Scope | Only mapped keys/buttons suppressed |
| Visibility | Shown only for keyboard and mouse devices |
| Scenario | 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 (see safety warnings) |
| Device Type | Hide from Games | Consume Mapped Inputs |
|---|---|---|
| Gamepad / Joystick / Wheel / Flight Stick | Auto-enabled (if HidHide installed) | Not shown |
| Keyboard | Not enabled | Not enabled |
| Mouse | Not enabled | Not enabled |
Keyboards and mice do not auto-enable any hiding. Accidental blocking makes the computer difficult to control.
Unassigning a device from all slots clears both hiding options.
PadForge shows a confirmation flyout when hiding is enabled on a keyboard or mouse:
- HidHide on keyboard — the entire keyboard is hidden from all apps. On "All Keyboards (Merged)", every connected keyboard is affected.
- HidHide on mouse — mouse control is lost in all apps outside PadForge. On "All Mice (Merged)", every connected mouse is affected.
- Consume on keyboard — mapped keys stop working in other apps while PadForge runs.
- Consume on mouse — mapped buttons (potentially left/right click) are suppressed.
Click Cancel to revert or Proceed to confirm.
The global "Hide devices from games" toggle in Settings (under Input Engine) acts as a master on/off. When off, no hiding or suppression occurs regardless of per-device settings. Turning it back on restores all per-device settings.
By default, PadForge uses SDL3's gamepad remapping layer for recognized gamepads, translating raw button/axis indices into a standard layout (A/B/X/Y, LX/LY, LT/RT) via a built-in controller database.
Force Raw Joystick Mode bypasses this remapping and reads raw hardware indices directly, the same values shown in Windows Game Controllers (joy.cpl).
| Symptom | Explanation |
|---|---|
| Buttons mapped to wrong outputs | SDL3's mapping does not match the device |
| Some buttons produce no input | SDL3 consumes buttons and maps them to non-matching slots |
| Extra buttons missing | Controllers with >11 buttons lose extras in gamepad mode |
| Works in joy.cpl but not PadForge | SDL3 mapping is wrong |
| Third-party or niche gamepads | Budget controllers, retro adapters, arcade sticks often have incorrect entries |
| DsHidMini SDF mode | DualShock 3 via SDF needs raw mode; SDL3 drops some buttons |
- Select the device card
- In the detail pane, find the Input Mode section (gamepad-type devices only)
- Check Force raw joystick mode
- Saved immediately, persists across restarts
- Axis names: LX, LY, LT... become Axis 0, Axis 1, Axis 2... (matching joy.cpl)
- Button names: A, B, X, Y... become Button 0, Button 1, Button 2...
- Button count may increase (raw mode exposes all physical buttons)
- Auto-mapping is unavailable; record each Button and Axis Mappings manually via the Record button
- Raw input display updates immediately
If the controller works correctly in gamepad mode, raw mode has no benefit. Gamepad mode provides friendly names and automatic default mappings.
The toggle only appears for devices SDL3 recognizes as gamepads. Devices already operating as raw joysticks (flight sticks, wheels, generic HID) always use raw indices.
PadForge identifies devices using deterministic GUIDs for reliable recognition across reboots, re-plugs, and port changes.
| 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 port changes |
| 3 | SDL instance ID + VID/PID | May change on every reconnection |
- Bluetooth controllers (DualSense, DualShock 4, Switch Pro) — GUID stays the same across reboots and re-pairs. Settings persist automatically.
- Wired USB controllers — GUID stays the same for the same USB port. Different port generates a new GUID; old settings remain on the offline (gray) card.
- Profiles — uses a ProductGuid fallback. If a profile was saved with a device that now has a different InstanceGuid (e.g., port change), PadForge matches by VID/PID so the profile still applies.
Disconnected devices stay in the list with a gray dot:
- All mappings, slot assignments, and settings are preserved
- Reconnecting with the same GUID restores everything
- Remove with the X button if no longer needed
- Offline cards consume no resources (stored settings only)
Compensates for center drift: a stick resting slightly off-center when untouched.
- Go to the Sticks tab on the controller's configuration page (see Stick Dead Zones)
- Click Calibrate Center while the stick is at rest (do not touch it)
- PadForge samples hardware values for ~500ms and calculates the offset
The offset is applied before dead zone processing, keeping the dead zone circle centered on the actual rest position.
Controls the maximum physical travel (0-100%) that maps to full output. If the stick cannot physically reach the corners, reducing max range ensures full output is still achievable within the stick's actual travel.
- Click Refresh to re-scan
- Verify the device appears in Device Manager or joy.cpl
- For Bluetooth controllers, confirm pairing in Windows Bluetooth settings
- PadForge filters out its own Controller Slots (ViGEm, vJoy) automatically
- Some devices need manufacturer-specific drivers
- Check the raw input state section: are axes, buttons, and POVs displayed?
- If they appear but never change, try Force Raw Joystick Mode
- For Bluetooth devices, verify a stable connection (green status dot)
- Enable Force Raw Joystick Mode to bypass SDL3's incorrect mapping
- Compare PadForge's raw input display with joy.cpl
- For unmapped joystick-type devices, click Submit Mapping to contribute a mapping
- Enable Hide from Games on the device, or Consume Mapped Inputs for keyboard/mouse
- Verify the master "Hide devices from games" toggle in Settings is on
- Confirm HidHide is installed via Driver Management
- Wired controller on a different USB port gets a new GUID. Old settings remain 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 automatically.
- Ensure the stick was completely at rest during calibration
- For severe drift, the stick may be physically worn. Increase Stick Dead Zones size on the Sticks tab to compensate.
- HidHide is not installed. Install via Driver Management.
- Restart PadForge after installing HidHide.
- Controller Slots — Create slots before assigning devices
- Button and Axis Mappings — Map inputs after assigning a device
- Stick Dead Zones — Calibrate center offset and dead zones
- Macros — Automated actions triggered by device inputs
- Force Feedback — Device rumble and haptic capabilities
- DSU Motion Server — Gyro/accel data for motion-enabled emulators
- Profiles — Device connections persist across profile switches
- Dashboard — Connected device counts at a glance
- Settings — Master device hiding toggle
- Driver Management — HidHide and vJoy driver installation
- Troubleshooting — General troubleshooting guide