What a DualSense looks like to a browser
A PS5 controller is a different device on USB than it is on Bluetooth, and a different device again in Chrome versus Firefox. Sony vendor ID 054c shows up in the Gamepad id string. Standard mapping, when the browser provides it, is the easy path: left stick on axes 0 and 1, right stick on 2 and 3, L2/R2 as analog buttons 6 and 7.
When mapping is empty, CTRLCHK does not assume Xbox order. DualSense often reports L2/R2 as axes that rest at −1. Treat those as sticks and you get a “right stick pegged to the left” ghost that has closed more GitHub issues than actual drift ever did. The Sony ABS profile puts the right stick on axes 3 and 4 and folds signed triggers into L2/R2. The Sony HID profile keeps sticks on 0–3 and reads triggers from axes 4 and 5. Hat-encoded D-pads on axis 9 become up/down/left/right buttons.
USB versus Bluetooth
USB is the more complete picture: analog trigger travel is more likely to appear, and extra buttons are more likely to be enumerated. Bluetooth is enough for a drift check and a button checklist, but Firefox on macOS is the mapping minefield. If analog L2/R2 read as 0–1 after a full pull, trigger support is live. If they stay at 0, the stage is skipped without lowering the score.
Adaptive triggers, the haptic motors under each grip, the built-in microphone, and the motion sensors are DualSense features the Gamepad API does not expose. A “PS5 controller test” that claims to certify those in a tab is guessing. CTRLCHK will pulse dual-rumble when vibrationActuator exists — typically Chrome and Edge — and otherwise mark rumble unsupported.
How to read DualSense drift
DualSense sticks can rest a few percent off origin while still being mechanically quiet. The hands-off capture accepts that bias and reports it as offset. If you came here because aiming walks in Fortnite or Call of Duty, look at P95 and the recommended deadzone on the results card, then compare with the dedicated drift test. For oval gimbals after a drop, use the circularity test.