it’s been a while since I touched topics solely devoted to my beloved Sony DualShock 3 controller, mainly because, well, ViGEm 😁 Trace on ScpToolkit has gone cold for a couple months now but a shard of hope I can present for the community. I will split and port the connection-oriented low-level components within the toolkit to its own respective native Windows drivers, including wireless functionalities.
Connecting the DS3 to a standard PC running Windows via Bluetooth has always been an annoyance because the DS3 lacks a compatible SDP layer. I was thinking a lot about a convenient solution where you can keep your existing Bluetooth software stack so the DS3 can connect side by side to your existing gadgets like keyboard, mouse, headset, you name it. Well, unfortunately this is not possible. Now I very rarely use the phrase “not possible” or “impossible” in tech because as a developer you literally have the power to create and change your (virtual) environment as you please but sometimes you have to accept the limitations of the environment you’re dealing with (Windows in this case).
Thing is, you have the abilities to create Bluetooth profile drivers with tools Microsoft provides you with, but once again the DS3 being a non-standard bastard needs adjustments lower in the stack where you can’t easily hack into without risking stability of other devices.
I’ve decided that the best solution is the existing design of sacrificing a dedicated Bluetooth host dongle for the entire purpose of communicating with the DS3, but as a real driver. But a user-mode driver this time! This has several advantages over a kernel-mode function driver:
- Faster development due to easier testing and debugging
- An uncaught error only crashes a process and not the entire system
- Increased security; no more kernel privileges needed
- Faster and easier signing process
But it’s only fair to also mention the cons:
- UMDF 2 requires at least Windows 8.1 (thanks, Microsoft 😑)
- No kernel-mode features like spawning children (PDOs)
- Slightly but probably unnoticeable less performance
Now I know I’m getting hate for ignoring the still popular Windows 7 demographic but hear me out: a driver written for UMDF 2 can be be ported to a Windows 7 (or even older) compatible KMDF driver at any time. So once I’m finished I might consider going the extra mile and building and releasing it for Windows 7 too. Time will tell, as always 😋
Have a nice day,
PS: last but not least: the project repository 😀