[hal] Move registerSimPeriodic functions to HAL package (#3211)

This enables the static lists to be private.
This commit is contained in:
Peter Johnson
2021-03-21 23:21:47 -07:00
committed by GitHub
parent a79faace1b
commit a6f6539691
2 changed files with 59 additions and 47 deletions

View File

@@ -28,7 +28,36 @@ public final class HAL extends JNIWrapper {
private static native void simPeriodicBeforeNative();
public static final List<Runnable> s_simPeriodicBefore = new ArrayList<>();
private static final List<Runnable> 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<Runnable> s_simPeriodicAfter = new ArrayList<>();
private static final List<Runnable> 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

View File

@@ -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);
}
}