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.