Highly advanced game controller mapping
Check out the ControllerBuddy Homepage for getting started.
For further support join the ControllerBuddy Discord.
ControllerBuddy is a highly advanced gamepad mapping software, which supports the creation of input profiles for complex target applications such as flight simulators.
In addition to the simplistic mapping of buttons and axes of a physical game-controller to keyboard and mouse input, ControllerBuddy also supports the feeding of input commands to a virtual joystick device (vJoy / uinput).
ControllerBuddy's goal is to enable the user to control target applications solely via a gamepad and not having to reach for a keyboard or mouse at any point in time.
Tip: Check out the ControllerBuddy-Install-Script, it automates all the steps below and much more!
ControllerBuddy
directory from the archive to any desired location on your hard-drive.ControllerBuddy.exe
inside the extracted ControllerBuddy
directory.sudo apt-get install libsdl2-2.0
sudo yum install SDL2
sudo pacman -S sdl2
sudo groupadd -f uinput
sudo gpasswd -a "$USER" uinput
/etc/udev/rules.d/99-input.rules
with the following content:
KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="uinput"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0666"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0666"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ba0", MODE="0666"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0666"
/etc/modules-load.d/uinput.conf
with the following content:uinput
ControllerBuddy
directory from the archive to any desired location on your hard-drive.ControllerBuddy
inside the extracted ControllerBuddy/bin
directory.Profiles are used to configure your gamepad for a certain target application.
A profile has the following general structure:
Profile (.json file)
├── Default Mode
│ ├── X Axis
│ │ ├── some Action
│ │ └── another Action
│ ├── Y Axis
│ │ └── some Action
│ ├── A Button
│ │ ├── some Action
│ │ └── another Action
│ ├── B Button
│ │ └── Switch Mode Action (switches to 'Another Mode' and back)
│ ├── X Button
│ │ └── Switch Mode Action (switches to 'Yet another Mode' and back)
│ └── Y Button
│ └── Cycle Action (performs 'Action 1', when pressed again 'Action 2', then 'Action 3', then starts over)
│ ├── Action 1
│ ├── Action 2
│ └── Action 3
├── Another Mode
│ ├── X Axis
│ │ └── some Action
│ └── A Button
│ └── some Action
└── Yet another Mode
└── X Axis
└── some Action
When switching from one Mode to another, all the axes and buttons that are not used by the other mode retain their function from the previous mode. This works over multiple levels of Modes.
Mode switching can be configured to operate in two different ways:
A set of well-thought-out profiles for the most popular flight simulators are available in the ControllerBuddy-Profiles repository.
Local mode:
Local:
Physical Controller
|
|
v
ControllerBuddy
| |
| |
v v
vJoy / uinput Win32 / X11
| |
| |
v v
Target Application
Server-Client mode:
Server: Client:
Physical Controller
|
|
v UDP
ControllerBuddy --------------------> ControllerBuddy
| |
| |
v v
vJoy / uinput Win32 / X11
| |
| |
v v
Target Application
Parameter | Arguments | Description | Available for scripting |
---|---|---|---|
-autostart | local / client / server | starts the specified mode of operation after launch | yes |
-export | file destination | exports a visualization of the current profile to the specified path | yes |
-help | prints the help and exits | no | |
-profile | file source | loads the specified profile after launch | yes |
-gamecontrollerdb | file source | adds the SDL controller mappings from the specified file | yes |
-quit | quits the application | yes | |
-save | file destination | save the current profile to the specified path | yes |
-skipMessageDialogs | skips all message dialogs | no | |
-tray | launches the application in the system tray | yes | |
-version | prints the version information and exits | no |
If an instance of ControllerBuddy is already running, launching a second instance with the parameters denoted as "available for scripting" will trigger the corresponding action in the first instance and immediately shutdown the second instance.
This can be used to integrate ControllerBuddy into third party applications.
For more information please check out ControllerBuddy-DCS-Integration, an exemplary integration of ControllerBuddy into DCS World.
ControllerBuddy uses the following awesome software technologies and libraries:
If you want to build ControllerBuddy from its source code this section might be helpful to get you started.
ControllerBuddy uses the Gradle build system, the following Gradle tasks are supported:
Task | Command |
---|---|
Generate version source file | gradlew generateVersion |
Run SpotBugs and Spotless | gradlew check |
Apply Spotless formatting | gradlew spotlessApply |
Run ControllerBuddy | gradlew run |
Install a jpackage image | gradlew installDist |
Create a ZIP-compressed jpackage image | gradlew distZip |
Create a TGZ-compressed jpackage image | gradlew distTar |
Delete build and gen directories | gradlew clean |
GNU General Public License v3.0