Drop-in XInput proxy DLL for DsHidMini. It replaces XInput1_3.dll so games and apps get standard XInput for up to 8 controllers while DsHidMini DualShock 3 pads (in SXS mode) are handled by the bridge and real Xbox/XInput devices are forwarded to the system XInput1_3.dll. The bridge also exposes XInputGetExtended for DS3 pressure-sensitive (analog) button and axis data.
- Role: Implements the XInput 1.3 API plus selected XInput 1.4 functions (XInput 1.3+ / XInput 1.4–compatible); built as
XInput1_3.dllso apps load it instead of the system DLL (e.g. via game directory or x360ce). Functions such asXInputWaitForGuideButton,XInputCancelGuideButtonWait, andXInputPowerOffControllerare proxied to the system DLL. - Per–user index: Each of the 4 XInput “slots” (plus extended handling) is either:
- DsHidMini DS3 (SXS HID device) → bridge reads HID via HIDAPI, maps to XInput state/rumble and optionally exposes extended data, or
- Real XUSB device → call is proxied to
C:\Windows\System32\XInput1_3.dll.
- Extended API:
XInputGetExtendedreturns a struct (seeinclude/DsHidMini/ScpTypes.h) with normalized float values for all DS3 axes and buttons (1.0 = full press / full axis, 0.0 = released / center). Only meaningful for slots occupied by a DsHidMini DS3.
This project revives the extended XInput API from ScpToolkit as a maintained replacement for the legacy SCP proxy DLL.
Usage, setup, and deployment are documented on the project site:
DsHidMini – SCP XInput Bridge.
| Function | DsHidMini DS3 (SXS) | Real XUSB |
|---|---|---|
| XInputGetExtended | Returns SCP_EXTN pressure/axis data. |
Not applicable (DS3-only API). |
| XInputGetState | Mapped from HID; Xbox layout; no Guide/PS. | Proxied to system DLL. |
| XInputGetStateEx | Same as above; does report PS/Guide. | Proxied to system DLL. |
| XInputSetState | Rumble → DS3 output report; player LED set from user index. | Proxied to system DLL. |
| XInputGetCapabilities | Xbox 360–style capabilities. | Proxied to system DLL. |
| XInputEnable | Proxied to system DLL. | Proxied to system DLL. |
| XInputGetDSoundAudioDeviceGuids | Proxied. | Proxied. |
| XInputGetBatteryInformation | Proxied. | Proxied. |
| XInputGetKeystroke | Proxied. | Proxied. |
| XInputWaitForGuideButton | Proxied. | Proxied. |
| XInputCancelGuideButtonWait | Proxied. | Proxied. |
| XInputPowerOffController | Proxied. | Proxied. |
- Thumbsticks: A jitter-compensation dead zone is applied when the bridge handles a DS3.
- Errors: If the given user index has no device (neither DS3 nor XUSB), functions return
ERROR_DEVICE_NOT_CONNECTED.
XInputGetExtended and the SCP_EXTN layout are described in the main repo under include/DsHidMini/ScpTypes.h.
| Area | Description |
|---|---|
dllmain.cpp |
DLL entry; initializes/destroys global state. |
GlobalState.* |
Singleton: device list, callbacks, proxy to real XInput1_3. |
GlobalState.XInput.cpp |
XInput API implementation (get/set state, capabilities, etc.). |
DeviceState.* |
Per-slot state: DS3 (HID handle) vs XUSB (real user index), packet number, last report. |
XInputBridge.cpp / .h |
Export declarations and shared XInput type definitions. |
Common.h, Macros.h, Types.h, UniUtil.h |
Shared types and helpers. |
XInput.def |
Export ordinals (matches XInput 1.3 + ordinal 200 for GetExtended). |
Dependencies (via vcpkg): hidapi, abseil, winreg.
- IDE: Visual Studio 2022 with C++ desktop workload.
- vcpkg: Install vcpkg, then integrate (e.g.
vcpkg integrate install). The project uses the vcpkg MSBuild integration; triplets are set in the vcxproj (e.g.x64-windows-staticfor x64). - Solution: Open the repository solution (e.g.
dshidmini.sln) and build the XInputBridge project. Supported platforms: Win32, x64, ARM64.
Output is XInput1_3.dll; deploy next to the game executable (or use a loader like x360ce) so the game loads this DLL instead of the system XInput.
- Wireless Xbox 360 + Microsoft dongle: Multiple wireless 360 pads appear as one device instance, so per-pad arrival/removal notifications may not work correctly. Behavior with this setup is not guaranteed; testing and feedback welcome.
The bridge is maintained and stable. You can use it in your own projects if you need simple access to DS3 pressure data via XInputGetExtended while keeping standard XInput for other controllers.
- ScpToolkit / ScpXInputBridge — extended XInput API origin
- X1nput, OpenXInput — XInput proxy ideas
- RPCS3 ds3_pad_handler, PCSX2 XInputEnum — reference implementations
- HIDAPI, Abseil, WinReg — dependencies
- RawInputDemo — Raw Input / device enumeration reference