Skip to content
Aleksei-MillerPublic

About

MotionPad is a Windows tray app that turns PS Move and PS Navigation controllers into an Xbox 360 controller, keyboard and mouse input.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

MotionPad

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.

What You Get

  • 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 UseAutoProfile in runtime/settings.ini)

System requirements:

PS Navigation Setup

MotionPad uses the SDL3 backend for Navigation controllers.

Driver Setup (BthPS3 + DsHidMini)

  1. Remove all Bluetooth devices from Windows Bluetooth settings
  2. Install BthPS3
  3. Reboot
  4. Download DsHidMini
  5. Install DsHidMini
  6. Reboot
  7. Run BthPS3 Driver Configuration Utility, go to Profile Driver Settings, enable "Enable PlayStation Move Navigation Support", leave "Enable PlayStation Move Motion Support" disabled
  8. Connect the Navigation controller via USB to verify detection
  9. Run DsHidMini Control App, select the Navigation controller under Devices, open Configure, and set HID Mode → HID Emulation Mode to SXS
  10. Disconnect the Navigation controller from USB
  11. Press the PS button on the Navigation controller
  12. The controller is now ready. It connects automatically when the PS button is pressed

How To Start

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.

Tray Menu

From the tray you can:

  • See controller battery summary
  • Enable or disable emulation
  • Pair PS Move controllers
  • Reconnect PS Move and PS Navigation controllers
  • Launch PS Move calibration
  • Switch the active profile

Auto-Profile Switching

MotionPad can switch profiles automatically based on the foreground window. Enable it in runtime/settings.ini:

UseAutoProfile=1

Then 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 game

Only the basename is matched (case-insensitive), so game.exe works even with a full path.

Controller Notes

Limits:

  • Up to 2 PS Move controllers
  • Up to 2 PS Navigation controllers

Logs

MotionPad writes runtime information to motionpad.log.

Binding syntax

Profile sections, field names, binding syntax, and action prefixes are documented in:

  • PROFILE_REFERENCE.md

Project Layout

  • src/ - application sources
  • include/ - bundled headers
  • include/SDL3/ - SDL3 headers
  • lib/ - .def files and import libraries
  • lib/SDL3/ - SDL3 import library and DEF file
  • runtime/ - runtime DLLs and default config
  • runtime/settings.ini - startup settings
  • runtime/profiles/ - built-in profiles (hybrid mode.ini, controller mode.ini, arrow mode.ini, wasd mode.ini)
  • PROFILE_REFERENCE.md - profile format and action reference
  • CMakeLists.txt - build configuration

Build

All compilers use a single cmake --build command after configuration. Run from the app/ directory.

GCC / MinGW

cmake -S . -B build/gcc -G "MinGW Makefiles"
cmake --build build/gcc

TinyCC

cmake -S . -B build/tcc -G "MinGW Makefiles" -DCMAKE_C_COMPILER=tcc -DCMAKE_RC_COMPILER=windres
cmake --build build/tcc

MSVC

cmake -S . -B build/msvc -G "Visual Studio 16 2019" -A Win32
cmake --build build/msvc --config Release

Notes:

  • GCC build requires cmake, gcc, and dlltool
  • TinyCC build requires MinGW tools for windres (the RC compiler)
  • MSVC build requires Visual Studio Build Tools
  • Runtime DLLs and default config are copied from runtime/ during build

Architecture Notes

  • Windows-only app
  • Manual message loop via PeekMessageW
  • Config reload via file watching
  • PS Move support delegated to psmoveapi
  • PS Navigation support via SDL3 (requires BthPS3 + DsHidMini, see setup above).
  • Poll rate controlled via PollRateMs in runtime/settings.ini (1-100 ms, hot-reloadable)
  • Telemetry streams controller state to \\.\pipe\motionpad when EnableTelemetry=1 in runtime/settings.ini
  • Xbox 360 controller emulation delegated to ViGEmClient

Trademark notice

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.

Built With

Credits

  • Initial implementation written in ChatGPT (Codex).
  • Further development in OpenCode Desktop using multiple built-in models — all via prompt-based development.

About

MotionPad is a Windows tray app that turns PS Move and PS Navigation controllers into an Xbox 360 controller, keyboard and mouse input.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages