diff --git a/hal/src/main/java/edu/wpi/first/hal/HAL.java b/hal/src/main/java/edu/wpi/first/hal/HAL.java index fb51ac02a4..6fd6910aab 100644 --- a/hal/src/main/java/edu/wpi/first/hal/HAL.java +++ b/hal/src/main/java/edu/wpi/first/hal/HAL.java @@ -28,7 +28,36 @@ public final class HAL extends JNIWrapper { private static native void simPeriodicBeforeNative(); - public static final List s_simPeriodicBefore = new ArrayList<>(); + private static final List s_simPeriodicBefore = new ArrayList<>(); + + public static class SimPeriodicBeforeCallback implements AutoCloseable { + private SimPeriodicBeforeCallback(Runnable r) { + m_run = r; + } + + @Override + public void close() { + synchronized (s_simPeriodicBefore) { + s_simPeriodicBefore.remove(m_run); + } + } + + private final Runnable m_run; + } + + /** + * Registers a callback to be run by IterativeRobotBase prior to the user's simulationPeriodic + * code. + * + * @param r runnable + * @return Callback object (must be retained for callback to stay active). + */ + public static SimPeriodicBeforeCallback registerSimPeriodicBeforeCallback(Runnable r) { + synchronized (s_simPeriodicBefore) { + s_simPeriodicBefore.add(r); + } + return new SimPeriodicBeforeCallback(r); + } /** * Runs SimPeriodicBefore callbacks. IterativeRobotBase calls this prior to the user's @@ -45,7 +74,35 @@ public final class HAL extends JNIWrapper { private static native void simPeriodicAfterNative(); - public static final List s_simPeriodicAfter = new ArrayList<>(); + private static final List s_simPeriodicAfter = new ArrayList<>(); + + public static class SimPeriodicAfterCallback implements AutoCloseable { + private SimPeriodicAfterCallback(Runnable r) { + m_run = r; + } + + @Override + public void close() { + synchronized (s_simPeriodicAfter) { + s_simPeriodicAfter.remove(m_run); + } + } + + private final Runnable m_run; + } + + /** + * Registers a callback to be run by IterativeRobotBase after the user's simulationPeriodic code. + * + * @param r runnable + * @return Callback object (must be retained for callback to stay active). + */ + public static SimPeriodicAfterCallback registerSimPeriodicAfterCallback(Runnable r) { + synchronized (s_simPeriodicAfter) { + s_simPeriodicAfter.add(r); + } + return new SimPeriodicAfterCallback(r); + } /** * Runs SimPeriodicAfter callbacks. IterativeRobotBase calls this after the user's diff --git a/hal/src/main/java/edu/wpi/first/hal/simulation/SimulatorJNI.java b/hal/src/main/java/edu/wpi/first/hal/simulation/SimulatorJNI.java index f3c61d7634..3dfeb068a9 100644 --- a/hal/src/main/java/edu/wpi/first/hal/simulation/SimulatorJNI.java +++ b/hal/src/main/java/edu/wpi/first/hal/simulation/SimulatorJNI.java @@ -4,7 +4,6 @@ package edu.wpi.first.hal.simulation; -import edu.wpi.first.hal.HAL; import edu.wpi.first.hal.JNIWrapper; public class SimulatorJNI extends JNIWrapper { @@ -29,48 +28,4 @@ public class SimulatorJNI extends JNIWrapper { public static native void stepTimingAsync(long delta); public static native void resetHandles(); - - public static class SimPeriodicBeforeCallback implements AutoCloseable { - private SimPeriodicBeforeCallback(Runnable r) { - m_run = r; - } - - @Override - public void close() { - synchronized (HAL.s_simPeriodicBefore) { - HAL.s_simPeriodicBefore.remove(m_run); - } - } - - private Runnable m_run; - } - - public static SimPeriodicBeforeCallback registerSimPeriodicBeforeCallback(Runnable r) { - synchronized (HAL.s_simPeriodicBefore) { - HAL.s_simPeriodicBefore.add(r); - } - return new SimPeriodicBeforeCallback(r); - } - - public static class SimPeriodicAfterCallback implements AutoCloseable { - private SimPeriodicAfterCallback(Runnable r) { - m_run = r; - } - - @Override - public void close() { - synchronized (HAL.s_simPeriodicAfter) { - HAL.s_simPeriodicAfter.remove(m_run); - } - } - - private Runnable m_run; - } - - public static SimPeriodicAfterCallback registerSimPeriodicAfterCallback(Runnable r) { - synchronized (HAL.s_simPeriodicAfter) { - HAL.s_simPeriodicAfter.add(r); - } - return new SimPeriodicAfterCallback(r); - } }