diff --git a/photon-server/src/main/java/org/photonvision/vision/processes/PipelineManager.java b/photon-server/src/main/java/org/photonvision/vision/processes/PipelineManager.java index 36e517e72..693c460e1 100644 --- a/photon-server/src/main/java/org/photonvision/vision/processes/PipelineManager.java +++ b/photon-server/src/main/java/org/photonvision/vision/processes/PipelineManager.java @@ -167,13 +167,23 @@ public class PipelineManager { } /** - * Leaves the current built-in pipeline, if applicable, and sets the active pipeline to the most - * recently active user-created pipeline. + * Enters or exits driver mode based on the parameter.
+ *
+ * Exiting returns to the last used user pipeline. + * + * @param state True to enter driver mode, false to exit driver mode. */ - public void exitAuxiliaryPipeline() { - if (currentPipelineIndex < 0) { - setPipelineInternal(lastPipelineIndex); - } + public void setDriverMode(boolean state) { + setPipelineInternal(state ? DRIVERMODE_INDEX : lastPipelineIndex); + } + + /** + * Returns whether or not driver mode is active. + * + * @return Whether or not driver mode is active. + */ + public boolean getDriverMode() { + return currentPipelineIndex == DRIVERMODE_INDEX; } public static final Comparator PipelineSettingsIndexComparator = diff --git a/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java index 120687ac1..88caf640a 100644 --- a/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -63,10 +63,10 @@ public class VisionModule { private long lastUIResultUpdateTime = 0; private long lastRunTime = 0; - private MedianFilter fpsAverager = new MedianFilter(10); + private final MedianFilter fpsAverager = new MedianFilter(10); + private final MJPGFrameConsumer dashboardInputStreamer; private MJPGFrameConsumer dashboardOutputStreamer; - private MJPGFrameConsumer dashboardInputStreamer; public VisionModule(PipelineManager pipelineManager, VisionSource visionSource, int index) { logger = @@ -91,24 +91,16 @@ public class VisionModule { dashboardInputStreamer = new MJPGFrameConsumer(visionSource.getSettables().getConfiguration().uniqueName + "-input"); - addResultConsumer( - result -> { - dashboardInputStreamer.accept(result.inputFrame); - }); - addResultConsumer( - result -> { - dashboardOutputStreamer.accept(result.outputFrame); - }); + addResultConsumer(result -> dashboardInputStreamer.accept(result.inputFrame)); + addResultConsumer(result -> dashboardOutputStreamer.accept(result.outputFrame)); ntConsumer = new NTDataPublisher( visionSource.getSettables().getConfiguration().nickname, pipelineManager::getCurrentPipelineIndex, pipelineManager::setIndex, - () -> pipelineManager.getCurrentPipelineIndex() == -1, - (driverMode) -> { - /* TODO: switch to driver mode */ - }); + pipelineManager::getDriverMode, + pipelineManager::setDriverMode); addResultConsumer(ntConsumer); addResultConsumer( result -> { @@ -225,11 +217,6 @@ public class VisionModule { setPipeline(index); saveAndBroadcast(); return; - case "selectedOutputs": - // 0 indicates normal, 1 indicates thresholded - var outputs = (ArrayList) newPropValue; - // TODO - return; } // special case for camera settables @@ -390,11 +377,7 @@ public class VisionModule { resultConsumers.add(dataConsumer); } - void addFrameConsumer(FrameConsumer consumer) { - frameConsumers.add(consumer); - } - - void consumeResult(CVPipelineResult result) { + private void consumeResult(CVPipelineResult result) { consumePipelineResult(result); var frame = result.outputFrame; @@ -403,13 +386,13 @@ public class VisionModule { result.release(); } - void consumePipelineResult(CVPipelineResult result) { + private void consumePipelineResult(CVPipelineResult result) { for (var dataConsumer : resultConsumers) { dataConsumer.accept(result); } } - void consumeFrame(Frame frame) { + private void consumeFrame(Frame frame) { for (var frameConsumer : frameConsumers) { frameConsumer.accept(frame); }