MotionPad is a Windows tray app that turns PS Move and PS Navigation controllers into an Xbox 360 controller, keyboard, and mouse input.
It is designed to stay in the background, reload profiles without restarting, and let you switch control schemes quickly from the tray.
- Gyroscope and accelerometer mapping for PS Move
- Rumble forwarding to PS Move controllers
- Mapping to Xbox 360 controller, keyboard, and mouse output from a single profile
- Live profile reload without restarting the app
- Alternate layers through
alt_mode - Auto-profile switching based on foreground window (see
UseAutoProfileinruntime/settings.ini)
- ViGEmBus
- Zadig (required for PS Navigation WinUSB driver installation)
- BthPS3 + DsHidMini v2.2.282 (optional, for PS Navigation over Bluetooth)
MotionPad supports two backends for PS Navigation controllers, selected at startup via UseBthPS3 in runtime/settings.ini:
| Backend | Connection | Driver |
|---|---|---|
libnavinput (default, UseBthPS3=0) |
USB only | WinUSB via Zadig |
SDL3 (UseBthPS3=1) |
USB and Bluetooth | BthPS3 + DsHidMini |
- Connect the Navigation Controller via USB.
- Run Zadig as Administrator.
- Select
Options->List All Devices. - Select Navigation Controller from the dropdown list.
- Set the target driver to WinUSB (using the arrows).
- Click Replace Driver.
- Once finished, the device should appear under "Universal Serial Bus devices" in Device Manager.
For wireless use with the BthPS3 backend, set UseBthPS3=1 in runtime/settings.ini.
- Remove all Bluetooth devices from Windows Bluetooth settings
- Install BthPS3
- Reboot
- Download DsHidMini v2.2.282
- Prepare
dshidmini.inf:- Uncomment lines 63 and 65 (enable Navigation Controller hardware IDs)
- On line 129, change the last value from
5to3(DS3-compatible mode instead of XInput) - Install the modified driver via fawazahmed0/windows-unsigned-driver-installer
- Reboot
- Run BthPS3 Driver Configuration Utility, go to Profile Driver Settings, enable "Enable PlayStation Move Navigation Support", leave "Enable PlayStation Move Motion Support" disabled
- Connect PS Navigation via USB to verify detection
- Disconnect PS Navigation from USB
- Press the PS button on the controller — it appears as an unknown device
- In Device Manager, assign the dshidmini driver manually → select "Navigation Compatible HID Device"
- The controller is now ready. It connects automatically when the PS button is pressed.
Launch motionpad.exe. The app appears in the system tray and keeps running in the background.
When emulation is enabled and at least one controller is connected, MotionPad creates a virtual Xbox 360 controller through ViGEmBus.
From the tray you can:
- See controller battery summary
- Enable or disable emulation
- Pair PS Move controllers
- Launch PS Move calibration
- Switch the active profile
MotionPad can switch profiles automatically based on the foreground window. Enable it in runtime/settings.ini:
UseAutoProfile=1Then set Path= under [Profile] in each profile's .ini file to match a process name:
[Profile]
Path=C:\Program Files\Game\game.exe
Name=Some gameOnly the basename is matched (case-insensitive), so game.exe works even with a full path.
- Up to 2 PS Move controllers
- Up to 2 PS Navigation controllers (USB or Bluetooth)
MotionPad writes runtime information to motionpad.log.
Profile sections, field names, binding syntax, and action prefixes are documented in:
PROFILE_REFERENCE.md
src/- application sourcesinclude/- bundled headersinclude/SDL3/- SDL3 headers (for SDL3 backend)lib/-.deffiles and import librarieslib/SDL3/- SDL3 import library and DEF fileruntime/- runtime DLLs and default configruntime/settings.ini- startup settingsruntime/profiles/- built-in profiles (hybrid mode.ini, controller mode.ini, arrow mode.ini, wasd mode.ini)PROFILE_REFERENCE.md- profile format and action referenceCMakeLists.txt- build configuration
All compilers use a single cmake --build command after configuration. Run from the app/ directory.
cmake -S . -B build/gcc -G "MinGW Makefiles"
cmake --build build/gcccmake -S . -B build/tcc -G "MinGW Makefiles" -DCMAKE_C_COMPILER=tcc -DCMAKE_RC_COMPILER=windres
cmake --build build/tcccmake -S . -B build/msvc -G "Visual Studio 16 2019" -A Win32
cmake --build build/msvc --config ReleaseNotes:
GCCbuild requirescmake,gcc, anddlltoolTinyCCbuild requires MinGW tools forwindres(the RC compiler)MSVCbuild requires Visual Studio Build Tools- Runtime DLLs and default config are copied from
runtime/during build
- Windows-only app
- Manual message loop via
PeekMessageW - Config reload via file watching
- PS Move support delegated to
psmoveapi - PS Navigation support via two backends (selected at startup via
UseBthPS3inruntime/settings.ini):libnavinput— USB-only.- SDL3 — USB and Bluetooth (via BthPS3 + DsHidMini).
- Poll rate controlled via
PollRateMsinruntime/settings.ini(1-100 ms, hot-reloadable) - Telemetry streams controller state to
\\.\pipe\motionpadwhenEnableTelemetry=1inruntime/settings.ini - Xbox 360 controller emulation delegated to
ViGEmClient
This software is an independent, open-source project and is not affiliated with, authorized, maintained, sponsored, or endorsed by Sony Interactive Entertainment Inc., Microsoft Corporation, or any of their affiliates.
"PlayStation", "PS Move", "PS Navigation", "DUALSHOCK" and related marks are registered trademarks of Sony Interactive Entertainment Inc. All Sony controller names, images, and references in this repository are used strictly for nominative purposes — only to identify hardware compatibility and provide instructions to the user.
"Xbox", "Xbox 360", and "Windows" are registered trademarks of Microsoft Corporation in the United States and/or other countries. Any Microsoft product names are used only to describe software and hardware compatibility.
All other trademarks, logos, and brands are the property of their respective owners. The use of these names, logos, and brands does not imply endorsement.
- PS Move API — Licensed under the Simplified BSD License.
- ViGEmBus — Licensed under the BSD 3-Clause.
- Simple DirectMedia Layer — Licensed under the Zlib license.
- Developed via ChatGPT, DeepSeek (Prompt-based development).