Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

l2cap-windowsdriver

Simple L2CAP bluetooth kernel level driver for windows to connect to Apple Airpods.

It exposes the AirPods AAP control channel over L2CAP so librepods-windows can reach AirPods (the Microsoft Bluetooth stack doesn't expose L2CAP to user mode).

Download

  • Signed, ready to install: the driver-latest release — auto-published by CI on every push to main, signed with this project's test-signing certificate. This is what librepods-windowsbridge's installer bundles automatically.
  • Unsigned compile-check builds: the Github Actions Tab (per-run artifacts, Debug/Release, for verifying setup.ps1 patches still build — not signed, won't load even in test mode).

Forked from Microsoft's bthecho sample

This is not original kernel code. it's Microsoft's bthecho L2CAP client profile driver (bthcli), retargeted to AirPods. The upstream is wired in as a git remote:

$ git remote -v
origin     https://github.com/will-ch-h/l2cap-windowsdriver
upstream   https://github.com/microsoft/windows-driver-samples.git
  • Upstream: microsoft/windows-driver-samples, path bluetooth/bthecho
  • Pinned at: commit d5569c0
  • Downstream delta: the whole fork is setup.ps1 — it fetches the pinned sample into `src/' and applies four changes.
What bthcli here why
Service GUID c07508f2-… 74ec2172-0bad-4d01-8f77-997b2be0722a bind to the AirPods AAP node + SDP PSM lookup
Interface GUID fc71b33d-… 9eec98bb-3c54-45d4-a843-7900c4635e08 what winl2capsocket.cpp opens with CreateFile
Read buffer 256 1024 AAP metadata SDUs would otherwise truncate
INF bind echo service AAP service PnP loads us on the AirPods service node

The PSM (0x1001) is discovered from the AirPods SDP record by the unchanged client code — no hardcoding needed.

Use

Most people don't need to build this at all — grab the signed driver-latest release above, or just install librepods-windowsbridge, whose installer does it for you (test-signing mode still has to be enabled manually first; see that project's README).

To build it yourself:

pwsh ./setup.ps1     # fetch + retarget into src/
# then BUILD.md to build and sign

The consuming app finds the driver purely by the interface GUID 9eec98bb… and a device path embedding the MAC (&<mac>_c), both of which bthcli already produces.

Notice of AI Use

Generative AI was used in this repository

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages