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.
views- 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
| Attempt | Result |
|---|---|
| Sending the start request from a program | Rejected. 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 controller | PS3 controller | |
|---|---|---|
| How Windows sees it | Serial port (COM), not a game controller | Game controller, but it sends no data |
| The obstacle | DJI’s own protocol | The request that starts the data stream isn’t sent |
| Existing solution | We didn’t find one | Yes: DsHidMini |
| Result | Our own program | Just 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.