Controller Diagnostic Examples
Use these patterns with Device Monitor and Output Panel to confirm that Helios receives the expected inputs and sends the expected outputs.
Log Button Edges
gpc
main {
if (event_active(BUTTON_15)) {
printf("BUTTON_15 pressed");
}
if (event_release(BUTTON_15)) {
printf("BUTTON_15 released");
}
}Edge logging is easier to read than printing on every main-loop iteration.
Inspect Stick Range
gpc
main {
fix32 x = get_val(STICK_1_X);
fix32 y = get_val(STICK_1_Y);
if (abs(x) > 95.0 || abs(y) > 95.0) {
printf("Stick edge: x=%f y=%f", x, y);
}
}Move the stick slowly through its full range and compare the readings with Device Monitor.
Measure Center Drift
gpc
fix32 center_limit = 5.0;
main {
fix32 x = get_val(STICK_1_X);
fix32 y = get_val(STICK_1_Y);
if (abs(x) > center_limit || abs(y) > center_limit) {
printf("Outside center: x=%f y=%f", x, y);
}
}Leave the stick untouched while checking the log. Adjust center_limit only after observing the controller's normal resting values.
Test an Output Path
gpc
main {
if (event_active(BUTTON_11)) {
combo_restart(OutputTest);
}
}
combo OutputTest {
set_val(BUTTON_15, 100);
wait(150);
set_val(BUTTON_15, 0);
}One press produces one short output pulse, making the result easy to identify in Device Monitor.
Troubleshooting
- If no input appears, confirm that the intended input plugin is running.
- If input appears but output does not, check the output plugin and the active routing path.
- If values are unexpected, verify the controller type and named constants before changing the script.
- Keep Debug logging off unless support asks for it; edge-based messages are usually enough.