BthPS3 works around the reserved PSM that blocks PS3 controllers on Windows
Windows kernel-mode Bluetooth Profile & Filter Drivers for PS3 peripherals
At a glance
- What is it?
- BthPS3 is a set of Windows kernel-mode drivers that extend the stock Bluetooth stack so PlayStation 3 peripherals connect over Bluetooth without losing standard functionality. The technical core is a workaround for the reserved PSM problem, implemented as an L2CAP profile driver plus a lower filter that reroutes traffic to it, and the project ships five separate pieces including a configuration GUI and a WiXSharp installer.
- Who is it for?
- Adopt BthPS3 if you use a PlayStation 3 controller on Windows 10 or 11 and the stock Bluetooth stack refuses to pair it, and pair it through DsHidMini rather than the Windows dialog. Do not adopt it on a host radio below LMP version 3, because device boot fails with STATUS_DEVICE_POWER_FAILURE, and do not source the installer from anywhere other than the repository releases and sites on *.nefarius.at.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why the stock Windows Bluetooth stack refuses a DualShock 3
The problem is specific and old. PlayStation 3 peripherals use a Bluetooth profile service whose PSM, the protocol and service multiplexing value, is reserved in a way that the default Windows Bluetooth stack denies. The README describes it as the reserved PSMs issue, and links a write-up about simulating a HID device with the Windows desktop. The connection is denied outright, so the controller simply does not pair. BthPS3 is the answer to that, and the description in the README is precise about the scope: these drivers allow popular PlayStation 3 gaming peripherals, which is the SIXAXIS and DualShock 3 plus the PS Move Navigation and Motion Controllers, to connect to Windows via Bluetooth without losing any standard functionality. The audience is Windows 10 and 11 users on x64 or ARM64 with a PS3 controller, and the project is a community project that is not affiliated with Sony Interactive Entertainment in any way. There is a companion project worth knowing about. The README points at DsHidMini for the HID side, and the pairing instructions live in the project documentation. DsHidMini is what makes the controller usable in games once the Bluetooth transport works, so the two are used together rather than one replacing the other.
A profile driver plus a lower filter, not a replacement stack
The architecture is what makes this more than a shim, and it comes in two kernel-mode parts. The profile driver is an additional L2CAP server service, and the README describes it as a multipurpose kernel-mode driver with three roles: a function driver for the service PDO exposed by BTHENUM, which is Microsoft's, the Bluetooth profile itself as an L2CAP server service, and a bus driver for PS3 wireless peripherals. The lower filter driver, shipped as BthPS3PSM, attaches to Bluetooth host radios. It patches L2CAP packets and reroutes L2CAP traffic to the profile driver, which is what gets around the reserved PSM that the normal stack enforces. The attachment rules are worth noting because they affect what the driver will and will not touch. The PSM filter attaches only to Bluetooth-class devices, and it skips attachment if the underlying transport is neither USB nor the Bluetooth Extensibility Transport, which it names as BTHX, for example radios bound through BthMini.sys over PCIe or UART. The result is that the standard stack from Microsoft, Broadcom, Toshiba, Intel and others is extended rather than replaced, which is what lets normal Bluetooth functionality continue to work alongside the PS3 peripherals.
Regular mode and raw mode, and how devices are told apart
The profile driver has to decide what an incoming device is, and it does so by heuristic. The README says the profile driver attempts to distinguish incoming device types based on their reported remote names, and then exposes their HID Control and HID Interrupt channels via simple bus child devices, which are the PDOs. Two operating modes follow from that. Regular mode requires a proper function driver such as a HID minidriver to be attached to the PDO, which is how a controller ends up working as a normal HID device. Raw mode powers the PDO up without a function driver and exposes it to userland instead, which the README describes as offering maximum flexibility and future-proofing. That split is the design's most interesting choice. A kernel driver that only supports regular mode forces every use case through a HID minidriver, and the raw mode gives a userland application a way to talk to the device directly when the standard HID path is not what you want. For the controllers themselves, the HID Control and HID Interrupt channels are what carry the report and output data, so exposing them as two PDOs rather than one is a consequence of how the PS3 protocol is structured.
Five projects, not one
The README lists the individual projects that make up the solution, and each has a distinct job. BthPS3 is the multipurpose kernel-mode driver described above, the function driver, the profile and the bus driver in one. BthPS3PSM is the lower-filter driver for the host radios, handling the L2CAP patching and rerouting, working over USB through BTHUSB or over non-USB transports through the Bluetooth Extensibility Transport and BthMini. BthPS3CfgUI is a userland GUI utility to safely edit driver settings. The word safely is doing work there: these are filter driver settings, and a utility that exposes them without letting a user break the stack is more useful than a raw configuration dialog. BthPS3Util is the command line equivalent, for modifying filter-driver settings from a script or a terminal. BthPS3Installer is the WiXSharp based setup for driver installation and removal. That last point matters in practice, because installing and removing kernel-mode drivers by hand is error prone and an uninstaller is not something you want to write yourself. The repository layout reflects the split, with a BthPS3.sln solution and directories for BthPS3, BthPS3PSM, BthPS3CfgUI, BthPS3Util, BthPS3Installer, Setup, common, shared, DMF, Domito, Research, docs, assets and build scripts for both Windows and Unix shells.
Installing for end users, and the pairing step everyone gets wrong
The quick start section is written for end users rather than developers, and it is worth following in order. First check the requirements. The OS must be Windows 10 or 11 on x64 or ARM64, the Bluetooth adapter must meet the LMP version requirements, and the controller must be a PlayStation 3 peripheral. Then download the installer from the latest release page. The README asks for the current BthPS3 installer in .msi form, and the releases listed here are named setup-v3.2.0 from 2026-09-27, setup-v3.0.0-r6 from 2026-09-25 and setup-v2.17.0 from 2025-02-26. Install by closing any applications using your Bluetooth adapter or controller, running the downloaded installer as an administrator and following the on-screen instructions, and rebooting Windows when prompted. The pairing step is the one to be careful about. The README says plainly: do not use the built-in Windows Bluetooth pairing dialog for PS3 controllers, because it will not work correctly and can interfere with proper operation. Instead you use a supported companion tool such as DsHidMini and follow the pairing instructions in the project documentation, ensuring the controller is first connected via USB if required and letting the companion tool handle the Bluetooth pairing. Then verify that the driver is loaded correctly and that the controller appears and responds, using the FAQ in the documentation as the reference, and for games install DsHidMini. If something goes wrong, the README asks you to read the documentation and FAQ carefully before opening an issue.
Host radio requirements and the failure you will see on an unsupported one
The driver will not work on every Bluetooth adapter, and the README is specific about the boundary. The BthPS3 profile driver and supported devices have been tested successfully with host devices following the Link Manager Protocol core specification version 3, which corresponds to Bluetooth 2.0 plus EDR, and higher. Anything lower than that is not recommended and is not supported. The advice is to check your particular chip firmware version in Device Manager prior to installing the drivers. The failure mode is documented. When loaded onto an unsupported host radio, device boot will fail with STATUS_DEVICE_POWER_FAILURE, which is a specific error rather than a vague failure, and a list of tested devices is published in the extended documentation. The environment section also states the minimum Windows version: Windows 10 version 1507 or newer, on x64 and ARM64. One more warning belongs in any evaluation of this project. The README opens with a notice that no other official website exists for it besides the GitHub repository and sites hosted on *.nefarius.at, and says that anyone claiming otherwise is a scammer and a fraud, asking users to be wary and only use the listed sources. For a project that distributes kernel-mode drivers, that is exactly the right warning to have, because a driver is the kind of artefact people are willing to install from a link someone sends them.
Mixed licences and a community project with a real support surface
The licensing is split, and the README lists which part is which. The drivers, BthPS3.sys and BthPS3PSM.sys, are BSD-3-Clause licensed, and the installer and setup project are BSD-3-Clause as well. The userland utilities, BthPS3CfgUI.exe, are MIT licensed. The README points to the individual LICENSE files for details. Both of those licences are permissive, so redistribution is straightforward as long as the notices are kept. On activity, the repository is not archived and the last push was on 2026-10-14, with the newest installer release tagged on 2026-09-27. The release naming with the setup-v prefix shows that the installers are versioned separately from the driver projects. The project also has the pieces you would expect from something maintained by a person who has been doing this for years: a Discord server at discord.nefarius.at, a Mastodon account at @Nefarius, a build workflow badge, a Research/ directory, a docs/ directory, and a .nuke/ directory which is the standard clean-and-rebuild setup for .NET solutions. One last detail about scope. The README says the project is a community project and is not affiliated with Sony Interactive Entertainment Inc. in any way, and that PlayStation, PSP, PS2, PS one, DUALSHOCK and SIXAXIS are registered trademarks of Sony Interactive Entertainment Inc.
Editorial conclusion
Adopt BthPS3 if you use a PlayStation 3 controller on Windows 10 or 11 and the stock Bluetooth stack refuses to pair it, and pair it through DsHidMini rather than the Windows dialog. Do not adopt it on a host radio below LMP version 3, because device boot fails with STATUS_DEVICE_POWER_FAILURE, and do not source the installer from anywhere other than the repository releases and sites on *.nefarius.at. Before you install, check the chip firmware version in Device Manager and confirm your controller is one of the supported peripherals.
Frequently asked questions
What does BthPS3 do for PlayStation 3 controllers on Windows?
It extends the standard Windows Bluetooth stack with an additional L2CAP server service and a Bluetooth lower-filter driver, working around the reserved PSMs issue that causes PS3 peripheral connections to be denied, so SIXAXIS, DualShock 3 and PS Move peripherals connect over Bluetooth without losing standard functionality.
How do I install the BthPS3 drivers?
Download the current BthPS3 installer in .msi form from the latest release page, close any applications using your Bluetooth adapter or controller, run the installer as an administrator, follow the instructions and reboot Windows when prompted.
Can I pair a PS3 controller with the built-in Windows Bluetooth dialog?
The README says not to. It will not work correctly for PS3 controllers and can interfere with proper operation. Use a supported companion tool such as DsHidMini and follow the pairing instructions in the project documentation, connecting the controller via USB first if required.
Which Bluetooth adapters are supported by BthPS3?
Host devices following the Link Manager Protocol core specification version 3, which corresponds to Bluetooth 2.0 plus EDR, and higher have been tested successfully. Anything lower is not recommended and not supported, and loading the driver onto an unsupported host radio makes device boot fail with STATUS_DEVICE_POWER_FAILURE.
What is the difference between regular mode and raw mode in BthPS3?
Regular mode requires a proper function driver such as a HID minidriver to drive the exposed PDO. Raw mode powers the PDO up without a function driver and exposes it to userland, which the README describes as giving maximum flexibility and future-proofing.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/nefarius-bthps3)Was this useful?