Virtual USB-to-Bluetooth bridge for DualSense and DualSense Edge Wireless
Controllers. Through Linux vds_hcd.ko and Windows vds_usb.sys kernel
drivers, vDS exposes a Bluetooth-connected controller as a virtual USB
DualSense-class device so games and applications can use features normally
available only over USB. The common userspace daemon vdsd translates the
virtual USB traffic to and from the physical controller's Bluetooth protocol.
Currently, vDS supports USB-based features that can be carried over Bluetooth,
except headset output, microphone input, and firmware updates (firmware updates
is not possible).
Detailed DualSense output and haptics packet handling is based on DS5Dongle and protocol capture research. In theory, other physical gamepad controllers could be implemented as vDS backends and attached to vDS, as long as they can provide the DualSense-specific features required by games. The vDS infrastructure could also be extended to support physical transports other than Bluetooth.
vdsctl attach registers paired physical Bluetooth controllers in vdsd.db.
The same command format and JSONL database format are used on Linux and Windows.
Use vdsctl list-targets to list paired attachable Bluetooth controllers and
their addresses.
vdsctl list-targets
vdsctl attach aa:bb:cc:dd:ee:01 --profile ds5 --ports 0
vdsctl attach aa:bb:cc:dd:ee:02 --profile dse --ports 1
vdsctl detach aa:bb:cc:dd:ee:02 # Detach aa:bb:cc:dd:ee:02
vdsctl list # Show registered controllersOmit --ports or pass --ports "" to allow all configured ports. Omit
--profile or pass --profile "" to use the physical controller profile.
Tip
--profile can expose a controller as a different controller type than the
physical device. This can be useful when an application supports DualSense but
not DualSense Edge, or the other way around.
{"address":"aa:bb:cc:dd:ee:01","profile":"","ports":[]}
{"address":"aa:bb:cc:dd:ee:02","profile":"dse","ports":[1]}--ports 0,2 maps to /dev/vds0,/dev/vds2 on Linux and \\.\vds0,\\.\vds2 on
Windows.
When reporting an issue, include the platform, vDS version, controller model, connection type (e.g. your bluetooth adapter's model name), affected application or game, and reproduction steps.
For runtime problems, enable tracing before reproducing the issue, then turn it off afterwards:
vdsctl trace on --scope all
vdsctl trace off --scope allYou can check or attach the vdsd log from:
Linux: /var/log/vdsd.log
Windows: C:\ProgramData\vDS\vdsd.log