
How to Avoid the “Button 27” Problem When Using a PXN-CB1 USB Button Box with Assetto Corsa Rally
I discovered that other Assetto Corsa Rally users were experiencing the same frustrating symptom as was I:
When attempting to configure Input Settings (assigning buttons from one’s steering wheel and PXN-CB1 “button box” game controller to actions like “Headlights,” “Wipers,” “Increase Traction Control,” etc.) a mysterious “Button 27” would spontaneously be assigned to any Input Action selected for assignment before the user could press the desired button on their game controller. By repeatedly trying to select the input for configuration and quickly pressing a PXN-CB1 button before the phantom Button 27 was captured, it was sometimes possible to capture the intended button, but the success rate was nearly non-existent.
After several attempts at a solution, I’ve come up with a combination of software tools which effectively resolve the problem. The procedure is a bit fussy, and involves adding three pieces of software which must be running in the background - a consequence I don’t really like, as it adds uncertainty to the computing platform. But it works. It might be simpler to buy another button box and ditch the PXN-CB1 (which doesn’t appear to cause problems with the other half-dozen sim-racing titles I regularly used prior to the debut of Assetto Corsa Rally), but I’d guess there’s a significant chance that any other button box might use the same button encoding circuit and code, and produce the same problem. The problem appears to lie in a combination of the PXN-CB1’s operation and the Assetto Corsa Rally (ACR) code base, which uniquely responds to the anomalous button output from the CB1. Perhaps future changes to ACR will resolve it, but meanwhile I present one possible workaround to use ACR with a PXN-CB1.
THE PROBLEM
When attempting to configure input bindings to assign buttons for Assetto Corsa Rally’s “early access” releases in early 2026 (currently at v0.3), I discovered an irritating anomaly: almost immediately after selecting a command to which I wished to assign a button from either a Fanatec wheel/wheel base or PXN-CB1 “button box,” the selected input would be bound to a “Button 27.” Because this behavior sometimes happens as a result of one or more maintained switches in a game controller being left in the closed (ON) position, I didn’t initially recognize this as a bug. I just figured it was a maintained switch accidentally left on.
But I found no maintained switch on any device physically latched. When I monitored the status of the controllers and their buttons and encoder axes using tools like Windows 11’s “Game Controllers” control panel (selecting “Properties” for the PXN-CB1 reveals a “Test” tab with indicators for closed switches) or web page-based gamepad monitors like HardwareTester GamepadTester or Gamepad Tester, there was no visible “Button 27” activity. The PXN-CB1 only has twenty-six buttons - “Button 27” doesn’t appear to exist, while Assetto Corsa Rally was “seeing” a “Button 27” event up to a couple of times per second.
In some Assetto Corsa Rally game menus, I realized you could observe the irregular cadence of the Button 27 events in the flashing/changing of some of the button hints that ACR presents to show keyboard shortcuts for navigation actions. During ACR game replays, a repeated “thunk” sound could be heard with the same rhythm, apparently an alert sound to indicate the repeated and constant application of an invalid keypress. So this phantom button event appeared to be happening all the time while ACR was running, potentially affecting more than just input mapping configuration.
I had never observed these symptoms with any other software title. So whatever is happening might only be “seen” by ACR .
Unplugging the PXN-CB1’s USB cable eliminated the symptom. I got in the habit of unplugging it when I was running ACR . I had never really depended upon the PXN-CB1 button box for Assetto Corsa Rally and hadn’t assigned that many ACR commands to the CB1. But disconnecting/reconnecting the CB1 between sim titles was irritating, and I wondered if the phantom commands might affect gameplay. In searching for solutions online, I discovered that other users of ACR and PXN-CB1 were experiencing the issue, so I was determined to solve the problem for both myself and the community.
After a bunch of research and experiments, I came up with a working solution, which follows.
I am running:
- Windows 11 Home v25H2, build 26200.8037
- Assetto Corsa Rally v0.30
- HidHide v1.5.230.0
- vJoy v2.1.9
- Joystick Gremlin v14.1
SOLUTION AND THEORY OF OPERATION
The goals of this solution:
- Prevent the PXN-CB1 from directly communicating with Assetto Corsa Rally
- Using the HidHide utility to “hide” the PXN-CB1 DirectInput traffic
- This results in hiding the PXN-CB1 from ALL programs except Joystick Gremlin (see below); this is OK, but means that any programs/games previously configured to receive PXN-CB1 inputs will have to be reconfigured for the new vJoy virtual device (below)
- Create a virtual device using the open-source Windows driver vJoy.
- This virtual device will appear in game setup menus as a current Windows game controller that produces button outputs in response to closing switches on the PXN-CB1. Another program Joystick Gremlin (below) remaps the PXN-CB1 buttons to the vJoy virtual device.
- Use the Joystick Gremlin program to remap PXN-CB1 output to the vJoy virtual device
- PXN-CB1 events are passed only to Joystick Gremlin by “whitelisting” Joystick Gremlin in HidHide, which hides the CB1 from being directly viewable by other programs and therefore also prevents them from being exposed to its native DirectInput output.
- Each PXN-CB1 switch/button must be manually assigned to a virtual button in vJoy. Which vJoy buttons you map to doesn’t matter to any software, so you’re free to use whatever assignment strategy works for you.
- The new vJoy virtual device now outputs a unique button output for every unique PXN-CB1 button you configure
- Because the spurious “Button 27” events are never mapped by Joystick Gremlin (indeed, no “Button 27” exists as far as Joystick Gremlin knows), they are effectively filtered out by these processes. So you’ve made a vJoy virtual device representation of the PXN-CB1 that works identically (except the 8-way joystick, see below), but without the “Button 27” anomaly.
STEP BY STEP
- Download and install the following software:
(As always, you should research legitimate software resources yourself and download them from a safe source. Don’t automatically trust a URL provided by someone to be legitimate - including me. That disclaimer given: For your convenience, I provide you the links I myself used to download these utilities.)
- HidHide - https://docs.nefarius.at/projects/HidHide/
- vJoy - https://sourceforge.net/projects/vjoystick/
- Joystick Gremlin - https://whitemagic.github.io/JoystickGremlin/
- Launch HidHide configuration client
- In the HidHide configuration client “Applications” tab, click “+” to add an application which will “see through the cloak” of HidHide.
- Navigate to the joystick_gremlin.exe directory location, select the .exe and click “Open.” The path to Joystick Gremlin now appears in the HidHide configuration client “Applications” tab, along with “HidHideClient.exe” (this allows HidHide to see and modify the devices it hides, preventing the user from being locked out of changing device visibility).
- Leave the “Inverse application cloak” checkbox UN-checked.

- Click on the “Devices” tab of HidHide configuration client.
- CHECK the checkbox for “PXN-CB1” from the list of devices.
- At the bottom of the window, CHECK “Enable device hiding.”

- The PXN-CB1 is NO LONGER VISIBLE to any programs except HidHide and Joystick Gremlin.
- You may now close the HidHide configuration client. These changes will be persistent whenever Windows is running, without the HidHide configuration client actively running.
- Launch Configure vJoy
- The Configure vJoy Devices user interface is obtuse and not at all helpful. After much head-scratching, I eventually:
- changed the “Number of Buttons” from 8 to 36 (24 buttons, plus 8 directions of the 8-way joystick, plus 4 extras just in case)
- Unchecked all the “Axes” checkboxes (I’m assuming these should be for analog joysticks or knobs, which the PXN-CB1 doesn’t have).
- Unchecked “Enable Effects” (this appears to be for haptic “shakers”)
- In the “POV Hat Switch” section, I checked the “Continuous” radio button and “1” POV (though I have no idea what that refers to)
- I then responded to a “Restart Windows” prompt by restarting Windows, although I’m not at all sure it had anything to do with vJoy.

- Launch Joystick Gremlin
- Select the PXN-CB1 in the "Discovered Devices" (my “P2000 Haptic” and “Logical Device” are the other things visible. (I don’t currently have my Fanatec DD1 wheel base powered up, otherwise it would appear in the screenshot below.) The PXN-CB1’s twenty-six buttons and 8-way joystick (“Hat 1”) automatically appear in the left sidebar. So does an “X Axis” item - I just ignored that.
- If you press a physical button on the PXN-CB1 while Joystick Gremlin is running, the associated logical button will highlight in the left sidebar, and any configurations you have created will automatically appear in the large configuration pane to the right. When you first launch Joystick Gremlin, these configuration panes will be empty. For each button, I clicked “Add Action” at upper-right and selected “Map to vJoy,” which automatically populates the left-most pulldown in this configuration pane to “ vJoy Device 1.” I then pulled down the pulldown menu to its right and selected one of the available vJoy Buttons (above I mentioned that I configured vJoy to have 36 buttons - these were now available to assign as ouptuts to associate with the PXN-CB1). In the field above these pulldown menus and to the right of the joystick icon, I typed a nickname for each PXN-CB1 button - using the text silkscreened on the CB1 when possible. (I ended up being careful about not using special symbols or even spaces in these names after a Joystick Gremlin error problem, but that may not have actually been an issue.) In my screenshot below, I’ve typed “HANDLE,” the actual name of the top-left red PXN-CB1 button, which is also the lowest addressed button.
- I was NEVER successful in configuring the 8-way joystick as eight button presses. There is a setting in Joystick Gremlin that seemed to be able to pass along the 8-way joystick (which it calls a “hat switch,” as they’re called in flight control stick multi-directional thumb controllers) as an 8-way hat switch. But I was not successful in getting Assetto Corsa Rally to accept those “hat switch outputs” from vJoy as a valid input, so I tried to assign the joystick to 8 button presses. When I attempted this, Joystick Gremlin threw an error message whenever I attempted to assign a diagonal hat switch (NW, NE, SE, SW) to a vJoy button. It was fine with me assigning the four cardinal directions N, E, S and W (up/right/down/left), so eventually I gave in and set it up as a 4-way hat with N/E/S/W assigned to Buttons 27 through Button 30, just to make the joystick available for use. The configuration in Joystick Gremlin to do this is a bit elaborate. Here’s a screenshot of how I assigned FOUR of the directions of the PXN-CB1 8-way joystick to four vJoy device buttons:
- NOTE: I have not actually used the 8-way joystick since adding the PXN-CB1 to my rig a few years ago, so it’s not a loss to me to lose “hat” functionality. If anything, it can be more useful because I can now assign it to conventional buttons. It may be that for those of you actually using “hat switch” inputs, the option to map the PXN-CB1 8-way hat to a vJoy 8-way hat will work fine. For the brief time I configured the 8-way hat in Joystick Gremlin to the vJoy hat, it transparently and fluidly triggered the vJoy hat outputs - it’s just that Assetto Corsa Rally didn’t appear to recognize them.
- NOTE: The first time I was configuring Joystick Gremlin I eventually had problems with Joystick Gremlin crashing when “saving profile.” (To be fair, I’d tried a bunch of wacky things to try to configure the 8-way joystick as an 8-way joystick, and these many experiments may have led to the corruption of the configuration .xml file for Joystick Gremlin.) This was resolved by starting again from scratch with a new “profile” and assigning all the PXN-CB1 buttons one more time. I did start with the hat first, just because it was the last thing I was trying to configure when I discovered the crashing on save. Not sure why the crashing was happening, but It never recurred after creating a new profile from scratch.
- NOTE: I discovered that if I experimentally changed the vJoy setting for “POV Hat Switch” from “Continuous” to “4 Directions” AFTER configuring Joystick Gremlin, Joystick Gremlin would refuse to launch until I changed the vJoy hat switch setting back to “Continuous.”
- IMPORTANT: Joystick Gremlin needs to be running and ACTIVE (see below) while gaming for the PXN-CB1 to work using this setup.
- Not only must Joystick Gremlin be configured and the application open, but one must click the “Toggle Gremlin” icon (which looks like a joystick) until the lower-left corner prompt reads “Status: Active.” Only then will Joystick Gremlin pass the button presses on the PXN-CB1 you’ve assigned in Joystick Gremlin to the virtual device you created in vJoy.

- The vJoy configuration and monitoring applications do not have to be running, though. installing vJoy installs a kernel-mode driver, which loads with Windows from that point on to provide a virtual game controller device. As previously mentioned, HidHide’s functionality is also persistent without the HidHide Configuration Client actively running.
- If you use the system I’ve described here, you’ll have to assign PXN-CB1 button commands (which will now actually be issued as vJoy virtual controller commands) for every title in which you want it to work. No assignments previously made on the PXN-CB1 will work, as it is now hidden (from your games) as being an available Windows Game Controller by HidHide. The virtual vJoy device to which you’re configured Joystick Gremlin to represent PXN-CB1 button presses represents a new-to-the-WindowsOS device, which you have to set up one time in all your games, etc.
I hope this is helpful to someone.
All content ©2026 Ellsworth Chou - no reuse of copy or artwork without permission of the author.
