When you run the calibration tool (python src/calibration.py), the software attempts to automatically detect which HID interface on your controller carries the actual button/axis inputs. It does this by observing the inputs you press during the 15-second discovery stage.
However, if your controller has complex features (e.g. built-in mice, system keyboards, or firmware quirks) or if you want absolute control over which interfaces are read, you can skip the auto-discovery or use the manual fallback.
- The calibration tool says "No activity detected on any interface." even though you pressed buttons.
- You are missing certain "extra" buttons (e.g. back paddles) because they are sent on a different interface that wasn't detected.
- The controller sends "ghost" inputs on a specific interface that interferes with your gameplay.
During the manual selection stage, the tool will list all available interfaces for your controller:
[0] Interface: 0 | Usage Page: 1 | Usage: 4
[1] Interface: 1 | Usage Page: 1 | Usage: 5
[2] Interface: 2 | Usage Page: 65280 | Usage: 1
If you don't know which interfaces to use, you can test them:
- Run the calibration tool with the raw dump flag:
python src/calibration.py --dump-raw - Wait 2 seconds for the baseline to establish.
- Press the problematic buttons (e.g. back paddles, extra face buttons).
- Observe the console output. It will tell you exactly which
IFace(Interface number) reported the change. - Note down all the interface numbers that report the buttons you care about.
When you run the standard calibration again and are presented with the Auto-Discovery prompt:
- Simply press ENTER immediately without pressing any buttons on your controller.
- Because no activity was detected, the tool will trigger the Stage 2: Manual Interface Selection fallback.
- You will be prompted to enter comma-separated choices for the interfaces you want to enable.
- Type the index numbers (the numbers in brackets
[ ], not the interface numbers themselves) that correspond to the interfaces you found in the raw dump mode. - Example: If you want to enable index
0and index2, type0,2and press Enter.
The tool will now simultaneously read from all the interfaces you selected and merge their inputs into a single controller state!
If you receive the warning WARNING: No trigger signal detected!:
- This means the script was unable to find a byte that smoothly ramps up in value when you press the trigger, and it also failed to detect a digital button press.
- Make sure your controller is set to DInput mode. Many controllers act entirely differently in XInput mode.
- If you have trigger stops enabled or your controller only has digital triggers (like the Nintendo Switch Pro controller), the tool should automatically detect them via the digital fallback. If it fails, press the trigger more firmly and ensure it's registering.
- Make sure the correct interface was selected! Some controllers send the analog trigger data on Interface 1, but digital button data on Interface 0. Use the raw dump mode to verify!