A cross-platform DSU (DualShock UDP) / Cemuhook server for PlayStation Move controllers, enabling motion controls in games and emulators that support the DSU protocol.
PSMove-DSU bridges PlayStation Move controllers to applications that support the DSU/Cemuhook protocol, such as:
- Cemu (Wii U emulator)
- Dolphin (GameCube/Wii emulator)
- RPCS3 (PS3 emulator)
- Yuzu (Nintendo Switch emulator)
- PCSX2 (PS2 emulator)
- Any application supporting motion controls via DSU
The server translates PS Move controller input (accelerometer, gyroscope, and buttons) into the standardized DSU protocol, allowing these controllers to provide motion control functionality in supported games.
- Cross-platform support: Windows, macOS, and Linux
- Real-time motion data: Accelerometer and gyroscope
- Button support: All PS Move controller buttons
- DSU/Cemuhook protocol: Compatible with all DSU-enabled applications
- Automatic controller detection: Plug and play functionality
-
Download the latest release for your platform:
-
Connect your PS Move controller via Bluetooth
-
Run the executable:
./dsu_server_psmove_windows_win64.exe
./dsu_server_psmove_macos_x64
./dsu_server_psmove_linux_x64
-
Configure your emulator to connect to
127.0.0.1:26760
(default DSU port)
Button | Mapping |
---|---|
X | Cross |
O | Circle |
β‘ | Square |
β | Triangle |
Move | R1 |
SELECT | Share |
START | Options |
T | R2 |
PS | PS |
Note: You will not need to do the following if you have already paired your controller with your computer using PSMoveAPI
./dsu_server_psmove --pair
dsu_server_psmove/
βββ CMakeLists.txt
βββ README.md
βββ src/
β βββ main.cpp # Entry point and CLI parsing
β βββ dsu/
β β βββ dsu_server.hpp # DSU server interface
β β βββ dsu_server.cpp # DSU server implementation
β β βββ dsu_protocol.hpp # DSU protocol definitions
β β βββ dsu_protocol.cpp # DSU protocol implementation
β βββ psmove/
β β βββ psmove_manager.hpp # PSMove controller manager
β β βββ psmove_manager.cpp # PSMove controller implementation
β β βββ psmove_pairing.hpp # Pairing functionality
β β βββ psmove_pairing.cpp # Pairing implementation
β βββ network/
β β βββ udp_server.hpp # UDP networking interface
β β βββ udp_server.cpp # UDP networking implementation
β βββ utils/
β β βββ logging.hpp # Logging utilities
β β βββ logging.cpp # Logging implementation
β β βββ platform.hpp # Platform-specific definitions
β β βββ signal_handler.hpp # Signal handling utilities
β β βββ signal_handler.cpp # Signal handling implementation
β βββ config/
β βββ constants.hpp # Global constants
β βββ config.hpp # Configuration management
- CMake 3.10 or higher
- C++ compiler with C++17 support
- PSMoveAPI 4.0.12 downloaded
sudo apt-get install libusb-1.0-0-dev libbluetooth-dev pkg-config
brew install libusb
- Visual Studio 2017 or higher
- Windows SDK
-
Clone the repository:
git clone https://github.com/Swordmaster3214/PSMove-DSU.git && cd PSMove-DSU
-
Create build directory:
mkdir build && cd build
-
Configure with CMake:
cmake -DCMAKE_BUILD_TYPE=Release -DPSMOVE_ROOT=/path/to/psmoveapi ..
cmake -DPSMOVE_ROOT=/path/to/psmoveapi ..
-
Build the project:
cmake --build . --config Release
-
Run the executable: The executable will be in the build directory
./dsu_server_psmove
If you have PSMoveAPI installed in a custom location:
cmake -DPSMOVE_ROOT=/path/to/psmoveapi ..
The server runs on 127.0.0.1:26760
by default, which is the standard DSU port. Most applications will automatically detect the server at this address.
- Go to Options β GamePad Motion Source β DSU1
- Set server IP to
127.0.0.1
and port to26760
- Go to Controllers β Configure β Motion Input
- Set source to DSU with server
127.0.0.1:26760
- Go to Configure β Controls β Advanced
- Enable Motion and set to DSU with
127.0.0.1:26760
- Ensure the PS Move controller is properly paired
- On Linux, you may need to run with
sudo
for USB access permissions - Check that no other applications are using the controller
- Verify the server is running and listening on port 26760
- Check firewall settings if connecting from another machine
- Ensure the emulator is configured with the correct IP and port
- Make sure all dependencies are installed
- Verify CMake version is 3.10 or higher
- On Windows, ensure you're using the correct Visual Studio toolchain
If you get permission errors accessing the controller: Add udev rules for PS Move controller
sudo usermod -a -G plugdev $USER
Log out and back in for changes to take effect
- PSMoveAPI 4.0.12: Core PlayStation Move controller interface
- System libraries: Platform-specific USB and Bluetooth libraries
- CMake: Build system
- C++17: Modern C++ features for reliable performance
- DSU Protocol Version 1001: Full compatibility with Cemuhook standard
- Motion Data: 32-bit precision accelerometer and gyroscope
- Button Data: All PS Move buttons including trigger
- Timestamp Synchronization: Accurate timing for motion prediction
- Low latency: Direct USB/Bluetooth communication
- Multi-controller: Support in the project is implemented for multiple controllers, but only one seems to be working π
Contributions are welcome! Please feel free to submit pull requests, report issues, or suggest improvements.
- Fork the repository
- Create a feature branch
- Make your changes
- Test on your target platform(s)
- Submit a pull request
- Thomas Perl and contributors to PSMoveAPI
- Cemuhook developers for the DSU protocol specification
- Emulator developers for DSU protocol support
- Issues: GitHub Issues
- PSMoveAPI Documentation: psmoveapi.readthedocs.io
- DSU Protocol: Cemuhook Documentation
License details for this project are in the LICENSE file.
The PS Move API library is licensed under the terms of the license below. However, some optional third party libraries might have a different license. Be sure to read the README file for details on third party licenses.
====
Copyright (c) 2011, 2012 Thomas Perl [email protected] All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.