Desktop control application for the DsHidMini driver.
Manage connected SIXAXIS/DualShock 3, Navigation, and compatible controllers,
configure HID modes and per-device settings, and maintain DsHidMini
profiles—all from a modern WPF UI (WPF-UI / Fluent).
DsHidMini ControlApp is the official Windows desktop companion for the DsHidMini user-mode driver. It uses the Nefarius.DsHidMini.IPC SDK to communicate with the driver and provides:
- Devices — View connected controllers and their capabilities, edit per-device settings, pair or disconnect Bluetooth devices, control LEDs and rumble, power off a wired controller, inspect controller identification, and open the live motion viewer.
- Profiles — Manage DsHidMini configuration profiles (including a global default), assign profiles to devices, and edit profile-specific settings.
- Settings — HID-mode restart behavior, tray behavior, Defender BT auto-switching, driver IPC, and BthPS3 status/repair. The global profile is available from the main navigation.
Application preferences are stored under %AppData%. Driver configuration and ControlApp profile data are stored under %ProgramData%\DsHidMini. The app does not require administrator rights to run, but editing shared configuration and some device actions require elevation.
| Requirement | Details |
|---|---|
| .NET | .NET 10 Desktop Runtime (x64) |
| OS | Windows 10 or later (targeting net10.0-windows10.0.17763.0) |
| Driver | DsHidMini driver installed; at least one compatible controller connected for full functionality |
| Architecture | AnyCPU or x64 (NUKE publish uses win-x64) |
Use the repository's NUKE build from the repository root:
.\build.cmd CompileLocal builds default to Debug. Pass --configuration Release for a release
build. To run the managed ControlApp and IPC tests, use
.\build.cmd TestControlApp.
Production-ready, single-file, framework-dependent publish for Windows x64 is done via the NUKE build. From the repository root:
.\build.ps1 PublishControlAppThis restores and publishes the ControlApp and its project dependencies to the
repository bin folder. The NUKE task uses:
| Option | Value |
|---|---|
| Configuration | Release |
| Runtime | win-x64 |
| Self-contained | false (framework-dependent) |
| Single-file | true |
| Publish directory | bin\ (at repo root) |
- Device list — All DsHidMini devices currently connected; selection drives the detail panel.
- Per-device settings — Edit settings for the selected device (when running with sufficient permissions):
- HID mode — SDF, GPJ, SXS, DS4Windows, XInput.
- LEDs — Mode and timing (e.g. battery indicator, player index).
- Wireless — Pairing mode, custom host address, idle timeout, quick-disconnect combo.
- Sticks — Deadzone and polar value.
- Rumble — General on/off, left-motor rescale, alternative rumble mode.
- Output report — Rate control, deduplication, and Bluetooth output transport.
- Reconnect — Reconnect devices when the active HID mode no longer matches the driver config (e.g. after changing the global profile).
- Runtime actions — Pair to a specified or current host, disconnect a wireless controller, apply LED and rumble output, or send the wired USB power-off sequence.
- Identification and motion — Show firmware, controller type, motion path, and clone heuristic data, and display calibrated accelerometer/gyroscope telemetry in a live 3D viewer.
- Hardware-aware controls — Navigation Controllers are treated as one-LED, no-rumble devices and incompatible controls are disabled.
- Profile list — All DsHidMini profiles plus the built-in default; select one to view or edit.
- Global profile — Choose which profile is used for new devices and for devices using “global settings”.
- Per-profile editing — Same setting categories as per-device (HID mode, LEDs, wireless, sticks, rumble, output report); changes apply when the profile is used.
- App version — Displayed in the title bar and About page.
- Automatically restart devices on HID mode mismatch — Driver self-restart when the loaded HID mode does not match the mode Windows already probed.
- Minimize to tray — When enabled, Minimize and Close hide ControlApp to the notification area; use the tray icon to reopen or Exit to quit.
- Automatically switch Defender BT — Detect a Retro Fighters Defender Bluetooth Edition in DS4 mode and switch it to PS3 mode on arrival.
- Enable driver IPC — Persist the driver-wide
IPCEnabledflag inDsHidMini.json. The driver applies the change at runtime without a reload. - BthPS3 status — Show the installed version and required Bluetooth stack settings, with an elevated repair action when needed.
- Application configuration — Stored in %AppData%; see Configuration.
Application-level options are stored in %AppData%\ControlApp.json (see
ApplicationConfiguration.GlobalConfigFileName). The model is in
Models\ApplicationConfiguration.cs. Examples:
| Property | Description | Default |
|---|---|---|
| IsUpdateCheckEnabled | Check for updates on startup | true |
| AutoSwitchDefenderBtToPs3Mode | Switch a detected Retro Fighters Defender Bluetooth Edition from DS4 to PS3 mode | false |
| HasAcknowledgedDonationDialog | User ticked that they already donated or will consider it, hiding the startup donation prompt | false |
| MinimizeToTray | Hide to the notification area on Minimize or Close | false |
The files managed by the app are:
%AppData%\ControlApp.json— application preferences%ProgramData%\DsHidMini\DsHidMini.json— configuration consumed by the driver%ProgramData%\DsHidMini\ControlApp\DshmUserData.json— profiles, known devices, and ControlApp metadata
- The app runs as invoker (no mandatory elevation). Normal users can open the app, view devices and profiles, and change application settings.
- “Restart as Administrator” — Shown in the title bar when not elevated; use it to enable device/profile editing, device restart and power-cycle actions, and BthPS3 settings repair.
- Driver IPC — The underlying SDK IPC objects allow authenticated users and do not inherently require elevation. The ControlApp still gates its device-editing workflow because saving shared configuration and some device management operations require administrator access.
| Area | Purpose |
|---|---|
| Views/Windows | Main window (navigation, title bar, restart-as-admin). |
| Views/Pages | Devices, Profiles, Settings pages. |
| Views/UserControls | Device and profile cards, device settings editor. |
| ViewModels/ | Page and control ViewModels (CommunityToolkit.Mvvm). |
| Models/ | App config, DsHidMini config (DshmConfigManager, profiles, device settings), device enumeration (DshmDevMan). |
| Services/ | Application host, snackbar/messaging. |
| Helpers/ | Converters, bindings, localization. |
The app references Nefarius.DsHidMini.IPC (same repo, SDK\Nefarius.DsHidMini.IPC) for driver IPC.
