TR EN
All projects

Getting a PS3 DualShock 3 controller working on PC

Diagnosing a PS3 controller that Windows lists but whose sticks do nothing: what we tried, why we wrote no program, and how one driver fixed it in Velocidrone.

  • DsHidMini
  • XInput
  • hidapi
  • USB HID
  • Windows

This project doesn’t end with a program to download, because the right answer turned out to be “don’t write one”. I wanted to use a PS3 controller in Velocidrone that Windows could see but not actually use. To diagnose it we measured the controller’s raw data and wrote a bridge program, saw that it didn’t work, deleted it, and solved the problem with an existing driver.

Have the same problem? See the PS3 controller guide for step-by-step installation, testing and troubleshooting.

The problem

A genuine Sony DualShock 3 (VID_054C&PID_0268) was connected over USB. Windows listed it as a game controller and Velocidrone could see it, but the sticks couldn’t be assigned. Measuring it showed zero reports per second: the controller was waiting for the request that starts its data stream, and the built-in Windows driver wasn’t sending it.

What we tried

AttemptResult
Sending the start request from a programRejected. The request isn’t in the list the controller describes itself with.
A bridge program like the DJI project (hidapi + ViGEmBus)Didn’t work. It could only read unchanging startup data. Deleted.
The Nefarius DsHidMini driver (3.27.0)Worked. No problems in Velocidrone, no program in the background.

The most important lesson came from the bridge attempt: the 80 80 80 80 answer looked like the sticks at their centre position, and we called it working without moving them. When I tried it in the game, the sticks didn’t respond. We no longer count a controller test as finished until we’ve seen the values change while a stick moves.

How it differs from the DJI project

DJI controllerPS3 controller
How Windows sees itSerial port (COM), not a game controllerGame controller, but it sends no data
The obstacleDJI’s own protocolThe request that starts the data stream isn’t sent
Existing solutionWe didn’t find oneYes: DsHidMini
ResultOur own programJust a driver

I did this work together with Claude Code, an AI coding tool. DsHidMini is Nefarius’s open-source project, not ours, so there is no download here; we point you to its official GitHub page instead.

Cover photo: Evan-Amos, cut-out: Lorenziand, Wikimedia Commons (public domain); placed on a dark background. Sony, PlayStation and DualShock are trademarks of their respective owners; this project is not affiliated with Sony or Nefarius.