macOS support for the PDP Afterglow Wave Wired Controller for Xbox.
The working path today is a userspace shim that reads the controller over USB and maps it to keyboard and mouse input. A native DriverKit gamepad driver is included as a work-in-progress path toward real gamepad support.
Status: early, usable, and intentionally narrow. This repo targets one PDP controller first so the implementation stays understandable.
- PDP Afterglow Wave Wired Controller for Xbox
- Vendor ID:
0x0E6F - Product ID:
0x0316
- Works: userspace shim in
Shim/ - In progress: native DriverKit HID driver in
DriverKit/ - macOS: 14 or newer
- Architecture tested: Apple Silicon
Shim/ Working userspace USB-to-keyboard/mouse bridge
DriverKit/ Native system extension driver prototype
docs/ Technical notes and troubleshooting
make run-shimOn first run, macOS may ask for Accessibility access. Enable it for AfterglowShim in System Settings so the shim can send keyboard and mouse events.
Manual commands:
cd Shim
swift build
codesign --force --sign - --entitlements AfterglowShim.entitlements .build/debug/AfterglowShim
.build/debug/AfterglowShim- Left stick:
WASD - Right stick: mouse
- D-pad: arrow keys
- A: space
- B:
E - X:
F - Y:
R - LB/RB:
Q/C - View/Menu: tab / escape
- LT/RT: control / space
The controller speaks Xbox GIP over USB. The shim finds the PDP USB interface, sends the minimal wakeup/ack packets, parses input reports, and posts macOS keyboard/mouse events with CoreGraphics.
For implementation details, see docs/how-it-works.md. For setup problems, see docs/troubleshooting.md.
DriverKit/ contains a SwiftUI system extension host app and a DriverKit HID driver target. This is the long-term path for exposing the controller as a real macOS gamepad, but it requires Apple DriverKit USB and HID entitlements.
Before building that target, replace the com.example bundle IDs with your own reverse-DNS prefix and set your Apple Developer team locally in Xcode.
See docs/driverkit.md for the current DriverKit status and signing requirements.
make checkmake check validates property lists, builds the shim, and applies the local USB entitlements to the debug binary.
MIT