DirectInput to XInput
Reads the controller's DirectInput state, including the right stick on the lZ and lRz axes and both triggers as analog axes, and feeds it to a virtual Xbox 360 gamepad through ViGEmBus.
Free and open source · Windows 10 and 11
The 8BitDo Ultimate 2C, over Bluetooth, as an Xbox controller.
In Bluetooth mode, Windows sees the 8BitDo Ultimate 2C as a DirectInput device, and many games only look for Xbox (XInput) controllers. Ultimate2CFixer reads the controller and hands its input to Windows as a virtual Xbox 360 gamepad.
Three steps, and a small driver doing the translation in the background.
Connect the 8BitDo Ultimate 2C in Bluetooth mode from Windows' Bluetooth settings.
Open Ultimate2CFixer.exe. It starts working on its own, and the Start Service and Stop Service buttons are there if you'd rather do it by hand. If a driver is missing, the app offers to install it for you.
Games see an Xbox 360 controller that does whatever your Ultimate 2C does. The real one is hidden, so a button press never counts twice.
A small utility with a few settings, so it can be tuned without getting in the way.
Reads the controller's DirectInput state, including the right stick on the lZ and lRz axes and both triggers as analog axes, and feeds it to a virtual Xbox 360 gamepad through ViGEmBus.
Pick a top speed of 125, 250, 500 or 1000 Hz. The app only wakes up when the controller has something to say, so an idle controller costs next to nothing.
Linear (1:1), Smooth Aim (a cubic S-curve) or Aggressive (square root), plus a deadzone of 0, 8, 12 or 20 percent.
An optional setting that treats any trigger pull beyond the deadzone as a full press.
Without this, Steam and games would see two controllers and every press would count twice. So while the app is open, only the virtual gamepad is visible. The real controller is hidden with the HidHide driver, and handed back when you close the app.
Shows the sticks, the A, B, X and Y buttons, the bumpers and the analog depth of both triggers, so you can see what the controller reports.
Reads the battery percentage over Bluetooth Low Energy, with an optional low battery alert.
The _ button tucks the app into the system tray, the X button closes it, and it can start with Windows. The v1.1.0 release notes put the executable at 332 KB and the memory use at about 2 to 5 MB while idle.
A Nintendo layout option swaps A with B and X with Y. The interface comes in English, Turkish or Spanish (the Spanish is a machine translation). Settings are remembered between runs.
How the 8BitDo Ultimate 2C reports its controls over Bluetooth, and where they end up on the virtual Xbox pad. The right stick is on lZ and lRz, not lRx and lRy.
| DirectInput | On the virtual Xbox pad |
|---|---|
lX, lY | Left stick |
lZ, lRz | Right stick |
| Brake axis | Left trigger, analog |
| Accelerator axis | Right trigger, analog |
| Buttons 6 and 7 | Left and right bumper |
| Buttons 8 and 9 | Trigger click, only used if the controller doesn't report an analog pull |
The trigger axes are reported as HID usages (Brake and Accelerator), and DirectInput's standard layout has no place for them. So the app reads the controller in its own format, picking each control by its HID usage.
You need Windows 10 or 11 (64-bit) and two small drivers, ViGEmBus and HidHide. If they're missing, the app offers to install them.
Get Ultimate2CFixer.exe from the releases page. It is a single file, with nothing to unpack.
Open the releases pagePair the controller in Windows' Bluetooth settings and open the app. The file isn't code signed yet, so Windows SmartScreen may warn you the first time you run it.
ViGEmBus creates the virtual gamepad, and HidHide hides the real controller from other programs. If either is missing, the app downloads its installer from the project's GitHub releases and runs it, but only after checking that it's signed by a verified publisher.
You need Visual Studio 2022 with the C++ desktop workload and CMake 3.20 or newer.
git clone https://github.com/bezelye404/Ultimate2CbluetoothFix.git
cd Ultimate2CbluetoothFix
cmake -B build -S .
cmake --build build --config Release
Everything the app changes on your PC, in one place.
While the service runs, Windows has an extra Xbox 360 controller, created through ViGEmBus.
While the app is open, HidHide keeps your 8BitDo controller out of sight of other programs. It's handed back when you close the app.
Your settings live in HKCU\Software\Ultimate2CFixer\Settings. If you turn on start with Windows, a startup entry is added for your user.
The only things it fetches from the internet are the ViGEmBus and HidHide installers, and only when a driver is missing. Battery level comes over Bluetooth, not the network.
In Bluetooth mode, Windows sees the Ultimate 2C as a DirectInput device, with the right stick on the lZ and lRz axes. Many games only support Xbox (XInput) controllers, so they do not see it. Ultimate2CFixer reads the DirectInput state and passes it on through a virtual Xbox 360 controller.
ViGEmBus is an open-source driver that lets programs create virtual gamepads, and Ultimate2CFixer needs it. If it is missing, the app offers to download and install it.
Without it, Steam and games would see two controllers, the real one and the virtual one, and every press would count twice. HidHide is an open-source driver that hides the real controller from other programs. Ultimate2CFixer turns it on whenever it runs (there's no setting for it) and gives the controller back when you close the app. If the driver is missing, the app offers to install it.
Some programs, like a browser tab or Steam, may already be holding the controller when the hiding starts, and Windows doesn't tell them anything changed. If you open the app while the controller is already on, it lets you know: turn the controller off and on once, and reload the browser page. If the app starts with Windows, before the controller connects, you won't run into this.
Windows 10 and 11, 64-bit.
It was written for the 8BitDo Ultimate 2C in Bluetooth mode, and the axis mapping matches that controller. Other controllers are not covered.
In the registry, under HKCU\Software\Ultimate2CFixer\Settings, for your Windows user only.
It treats any trigger pull beyond the deadzone as a full press, so a light touch registers as 255, the maximum.
Yes. There's a start with Windows option, the _ button tucks the app into the system tray, and the X button closes it.
English, Turkish and Spanish. The Spanish text is a machine translation.
Yes. It is released under the MIT license and the source code is on GitHub.