Gaming

Controller Button Tester

Plug in or pair a gamepad and see buttons, triggers, and analog sticks update in real time via the browser Gamepad API. When the device reports standard mapping, labels follow the W3C layout; otherwise you still get raw indices and values. Nothing is uploaded to DroidXP — inputs stay in your tab, the same way APK Analyzer and APK String Extractor keep processing local. Use Copy snapshot for a text report (support tickets, stream notes).

Ad placement — top banner

Connect a controller, then press any button so the browser exposes the device. Multiple pads each get their own card. Related: Screen Resolution Checker, Ping Tester.

No gamepad detected yet

Plug in USB or pair Bluetooth, then press a face button or trigger.

Ad placement — mid rectangle

What this tool shows

The Gamepad API lets a web page read connected controllers: digital buttons, analog triggers (often as button value 0–1), and stick axes. This page polls navigator.getGamepads() on every animation frame and renders a live grid — useful for verifying a new pad, checking whether a button registers, or capturing baseline axis readings. It is read-only; we do not send your inputs to a server, matching the transparency of APK Analyzer (local analysis only).

Standard mapping vs fallback labels

When gamepad.mapping === "standard", indices match the W3C “standard gamepad” layout (face cluster, shoulders, triggers, stick clicks, D-pad). Otherwise the tool still lists every button and axis with numeric fallbacks — some third-party or flight sticks expose extra buttons beyond the usual 17.

HTTPS and “press a button first”

Chromium requires a secure context for predictable Gamepad behaviour, and many browsers only populate the gamepad list after the device sends input or the user has interacted with the page. If nothing appears, try a click on the page, then press a face button — same practical troubleshooting flow you would use when a game ignores a pad until it wakes.

Privacy

Your controller state never leaves the browser tab. Loading this tool only fetches normal static assets from DroidXP, like using APK String Extractor without uploading files.

How to use it

  1. Step 1: Use HTTPS (or localhost), connect your controller, and click the page once if needed.
  2. Step 2: Press a button so the gamepad appears — watch chips light up and axes move.
  3. Step 3: Use Copy snapshot to grab a text summary for notes or bug reports.

Frequently Asked Questions

Does DroidXP receive my controller inputs or upload a log?

No. The Gamepad API is read only inside your browser tab; nothing is sent to DroidXP — the same local-only idea as APK Analyzer and APK String Extractor.

Why does my controller show as disconnected until I press a button?

Browsers often expose a gamepad only after it sends input (and sometimes after a user gesture). Press any face button or trigger once, then this page can poll it.

Do I need HTTPS?

Secure contexts (HTTPS or localhost) are required for consistent Gamepad API behaviour in Chromium-based browsers. Plain http on a LAN may fail or behave oddly.

What does “standard” mapping mean?

When mapping is standard, button indices follow the W3C “standard gamepad” layout (face buttons, shoulders, triggers, sticks, D-pad). Unknown or empty mapping still works — labels fall back to indices.

Why do my analog triggers show as buttons with a value?

Triggers are often exposed as buttons with a floating value (0–1) plus sometimes as axes, depending on the driver. This tool shows the raw button value and axis list from the API.

Can I test more than one controller?

Yes. Each connected pad appears in its own card with index and id; up to four slots are typical in the API.

Will vibration / rumble work here?

This page focuses on reading inputs. Programmatic rumble via gamepad.vibrationActuator is optional in browsers and not required for a button test.

My stick drifts at rest — can this tool fix it?

No — you only see live values. Drift is hardware or calibration; use OS/driver dead zones or repair.

Same privacy stance as APK String Extractor?

Yes: inputs stay in the page. Only ordinary static assets load from DroidXP.

Why does nothing work in an embedded iframe?

Some browsers restrict gamepad access in cross-origin iframes unless explicitly allowed. Open the tool in a top-level tab on droidxp.com.