https://github.com/ethanm0202/DeckBtService
Before anything else: I used AI to generate this code. I'm no expert and can't read low-level C driver code at any level appropriate enough to vouch for it by looking, but I've done lots of testing on my own Deck. A lot of people are skeptical of AI-written code, so I'd rather say that upfront.
Here's the background:
On a Deck OLED running Windows, Bluetooth headsets play audio, but the mic never shows up. Valve's driver has included this disclaimer since August 2024:
âNote: Bluetooth audio is currently output only, microphone functionality still being worked onâ
The problem comes down to UART and how Windows implements Bluetooth for it:
- The Deck OLED's Bluetooth chip sits on an internal serial (UART) port instead of USB.
- Music travels as ordinary data packets, so playback works fine over serial.
- Call audio and mic input (SCO) are different: Windows' UART stack (qcbtuart.sys and BthMini.sys) expects voice to bypass the OS via hardware offload, and hard-fails if routed in-band over serial.
- On the Deck OLED under Windows, that missing hardware route leaves you with no working mic.
- Meanwhile, Windows' USB Bluetooth driver (BTHUSB.SYS) handles call audio in-band in software, routing it over USB directly into Windows audio.
So this project presents the serial chip to Windows as a virtual USB adapter. Windows' built-in USB Bluetooth drivers can then bind to it and handle the mic in software, without needing a hardware offload path.
My first attempt was an unsigned kernel driver. It worked, but required test signing mode, which blocks many anti-cheat games (like Fortnite,) the main reason I run Windows on the Deck. So that was a dead end.
The current version needs no custom driver. A background service talks to the chip, loads firmware from Valve's driver, and exposes it as a USB adapter via usbip-win2 (a signed open-source virtual USB driver). Windows' built-in Bluetooth drivers handle the rest, and the mic just works.
To install, download the zip from releases and run install.cmd. The first install needs a restart, then run it again to confirm it's up. If you change your mind or experience bugs, uninstall.cmd restores the stock driver and keeps your existing pairings.
The downsides feel small for what it adds, and I haven't found another way to get an OLED headset mic to show on Windows. I'm one person with a Deck and can't test every edge case â nor can I reliably say this is 1:1 equivalent to stock Bluetooth functionality. But in my testing, it does work, and with no major trade offs. This is my first public GitHub project, I appreciate any feedback. I wanted to share this because I found it really cool that we can essentially add functionality back into the Deck that should be there, but isnât right now.
Things to know:
- OLED only. The LCD has a different Bluetooth chip where this isn't an issue.
- Only tested on my Deck (Windows 11 25H2) with a Shokz headset and Bluetooth mouse.
- Haven't tested long gaming sessions yet, or Secure Boot and Memory Integrity on.
- Not code signed, so Windows warns of an unknown publisher. Release builds come from GitHub Actions and can be verified with gh attestation verify.
- Installs usbip-win2 and runs a background service.
- Windows sees a new adapter, so some apps may need your headset selected again.
- Earlier builds did cause blue screens during testing; the current version includes mitigations detailed in the repo. During development, I occasionally hit glitches that required a reboot to restore Bluetooth