package edu.wpi.first.wpilibj.hal; import jaci.openrio.toast.core.loader.simulation.jni.InterruptContainer; public class InterruptJNI extends JNIWrapper { public interface InterruptJNIHandlerFunction { void apply(int interruptAssertedMask, Object param); } private static InterruptContainer get(int point) { return InterruptContainer.getByIndex(point); } public static int initializeInterrupts(int interruptIndex, byte watcher) { InterruptContainer container = new InterruptContainer(); return getPort((byte) InterruptContainer.interrupts.indexOf(container)); } public static void cleanInterrupts(int interrupt_pointer) { InterruptContainer.interrupts.remove(get(interrupt_pointer)); } public static int waitForInterrupt(int interrupt_pointer, double timeout, boolean ignorePrevious) { get(interrupt_pointer).waitForInterrupt(timeout); return 0; } public static void enableInterrupts(int interrupt_pointer) { get(interrupt_pointer).setEnabled(true); } public static void disableInterrupts(int interrupt_pointer) { get(interrupt_pointer).setEnabled(false); } public static double readRisingTimestamp(int interrupt_pointer) { return get(interrupt_pointer).getTime(true); } public static double readFallingTimestamp(int interrupt_pointer) { return get(interrupt_pointer).getTime(false); } public static void requestInterrupts(int interrupt_pointer, byte routing_module, int routing_pin, byte routing_analog_trigger) { get(interrupt_pointer).setPin(routing_pin); } public static void attachInterruptHandler(int interrupt_pointer, InterruptJNIHandlerFunction handler, Object param) { get(interrupt_pointer).setFunc(handler, param); } public static void setInterruptUpSourceEdge(int interrupt_pointer, byte risingEdge, byte fallingEdge) { get(interrupt_pointer).setup(risingEdge != 0, fallingEdge != 0); } }