Build-system, config, usb, and CI wiring on top of upstream's
v0.6.0-hotfix tree. Build will still fail until Phase C+D land bt.h
accessors that oled.cpp references; that's expected mid-rebase.
CMakeLists.txt: add src/oled.cpp + src/slots.cpp to add_executable,
link hardware_spi, restore OUTPUT_NAME ds5-bridge-oled.
src/config.h: append the 4 OLED Edition Config_body fields
(current_slot + auto_haptics_enable/gain/lowpass). Preserves
upstream's field order for the first 8 fields.
src/config.cpp:
- speaker_volume validity default -100 dB → 0 dB (footgun fix)
- 4 new validity guards for the appended fields with sensible
defaults (Fallback / 100 % / 160 Hz / slot 0)
- config_default() impl (was declared in upstream's config.h since
v0.5.4 but never defined; the OLED Edition's "Reset to defaults"
Settings item calls it)
src/usb.cpp: drop the UAC1 SET_CUR Volume → flash-config sync that
let PipeWire/Pulse silently override the user's saved Spk Vol on
every device reconnect. Borrowed from loteran/DS5Dongle commit
03fa1e4.
src/usb_descriptors.cpp: restore iSerialNumber = STRID_SERIAL.
Upstream's commit e79c762 zeroed it to work around SpecialK (#32),
but that broke Windows device identity (#100) — users lost
per-device volume / app preferences when moving USB ports. The
OLED Edition prioritizes Windows device-identity stability for
the broader user base over SpecialK compat for a narrower one.
.github/workflows/{build,release}.yml: artifact filenames use
ds5-bridge-oled.uf2 (and -debug / -picow variants) per the
OUTPUT_NAME rebrand.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pico2W DualSense 5 Bridge
Turn a Raspberry Pi Pico2W into a wireless adapter for the DualSense (DS5) controller.
Overview
This project enables the Raspberry Pi Pico2W to function as a Bluetooth bridge for the DualSense controller, allowing wireless connectivity with enhanced haptics support.
Features
- 🎮 Full DualSense connectivity via Pico2W
- 🔊 Supports HD haptics (advanced vibration feedback)
- 📡 Wireless Bluetooth bridging
Getting Started
Flashing Firmware
- Hold the BOOTSEL button on the Pico2W
- Connect the Pico2W to your computer via USB
- The device will mount as a USB storage device
- Drag and drop the .uf2 firmware file onto the device
Pairing the Controller
- Put the DualSense controller into Bluetooth pairing mode
- Wait for the Pico2W to detect and connect
- Once connected, the device will appear on the host system
You may need to replug the Pico when the controller is in pairing mode.
Configuration
You can modify the Pico settings via the web config.
- For release: https://ds5.awalol.eu.org
- For development: https://ds5-dev.awalol.eu.org
Notes
The Pico device will only be visible to the system after the controller is connected
Some behaviors depend on reconnection cycles to take effect
Low-battery LED indicator
When the connected DualSense reports its battery at or below 10% (and it is not charging), the Pico onboard LED switches from solid-on to a 1 Hz blink so you can see the warning at a glance. The LED returns to solid-on as soon as the controller is plugged in or its reported level rises again. The blink also fires when disable_pico_led is set — the warning is treated as critical and overrides the LED-off preference; the LED returns to its disabled (off) state once the battery recovers or the controller starts charging.
To opt out at build time, configure with -DENABLE_BATT_LED=OFF. Default is ON.
Pico W Version
Pico W only has haptics support, no speaker. You can enable Pico W firmware compilation with -DPICO_W_BUILD=ON, or download precompiled firmware from GitHub Actions.
USB Wake Feature
This feature is experimental. If you need this functionality, please check out the feat/usb-wake branch to compile it, or use the precompiled firmware from GitHub Actions under that branch. The ds5-bridge-wake.uf2 is the firmware with this feature enabled.
It is recommended to read #60 and #61 before using this feature.
Community Fork
https://github.com/MarcelineVPQ/DS5Dongle-OLED-Edition https://github.com/zurce/DS5Dongle-OLED
Known Issues
- ⚠️ Audio may experience slight stuttering
- ⚠️ Overclocking is required for proper performance
Performance / Overclocking
Due to encoding requirements, the Pico2W must be overclocked:
Current settings:
- Voltage: 1.2V
- Frequency: 320 MHz
If your device fails to boot:
- Increase voltage slightly or Reduce CPU frequency
Build Instructions
To build the project from source:
- Update TinyUSB in the Pico SDK to the latest version
- Compile using standard Pico SDK toolchain
Roadmap
- Please check out DS5Dongle plan
Community
- Join the Discord server: Discord Server
- If you have a bug, please open an issue instead.
References
- rafaelvaloto/Pico_W-Dualsense — Project inspiration
- egormanga/SAxense — Bluetooth Haptics POC
- https://controllers.fandom.com/wiki/Sony_DualSense - DualSense data report structure documentation
- Paliverse/DualSenseX — Speaker report packet