diff --git a/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java b/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java index 7a3426114..0c76b93d7 100644 --- a/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java +++ b/photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NTDataPublisher.java @@ -142,8 +142,8 @@ public class NTDataPublisher implements CVPipelineResultConsumer { ts.rawBytesEntry.set(packet.getData()); - ts.pipelineIndexPublisher.setDefault(pipelineIndexSupplier.get()); - ts.driverModePublisher.setDefault(driverModeSupplier.getAsBoolean()); + ts.pipelineIndexPublisher.set(pipelineIndexSupplier.get()); + ts.driverModePublisher.set(driverModeSupplier.getAsBoolean()); ts.latencyMillisEntry.set(result.getLatencyMillis()); ts.hasTargetEntry.set(result.hasTargets()); diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index 82dd66812..c8d5e7baa 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -136,7 +136,7 @@ public class VisionModule { new NTDataPublisher( visionSource.getSettables().getConfiguration().nickname, pipelineManager::getCurrentPipelineIndex, - pipelineManager::setIndex, + this::setPipeline, pipelineManager::getDriverMode, this::setDriverMode); uiDataConsumer = new UIDataPublisher(index); diff --git a/photon-lib/src/main/java/org/photonvision/PhotonCamera.java b/photon-lib/src/main/java/org/photonvision/PhotonCamera.java index cccf149d0..4067ef888 100644 --- a/photon-lib/src/main/java/org/photonvision/PhotonCamera.java +++ b/photon-lib/src/main/java/org/photonvision/PhotonCamera.java @@ -24,7 +24,6 @@ package org.photonvision; -import edu.wpi.first.networktables.BooleanEntry; import edu.wpi.first.networktables.BooleanPublisher; import edu.wpi.first.networktables.BooleanSubscriber; import edu.wpi.first.networktables.DoubleArrayPublisher; @@ -50,7 +49,6 @@ public class PhotonCamera { protected final NetworkTable rootTable; RawSubscriber rawBytesEntry; - BooleanEntry driverModeEntry; BooleanPublisher driverModePublisher; BooleanSubscriber driverModeSubscriber; DoublePublisher latencyMillisEntry; @@ -67,7 +65,6 @@ public class PhotonCamera { public void close() { rawBytesEntry.close(); - driverModeEntry.close(); driverModePublisher.close(); driverModeSubscriber.close(); latencyMillisEntry.close(); @@ -121,7 +118,8 @@ public class PhotonCamera { .getRawTopic("rawBytes") .subscribe( "rawBytes", new byte[] {}, PubSubOption.periodic(0.01), PubSubOption.sendAll(true)); - driverModeEntry = rootTable.getBooleanTopic("driverMode").getEntry(false); + driverModePublisher = rootTable.getBooleanTopic("driverMode").publish(); + driverModeSubscriber = rootTable.getBooleanTopic("driverModeRequest").subscribe(false); inputSaveImgEntry = rootTable.getIntegerTopic("inputSaveImgCmd").getEntry(0); outputSaveImgEntry = rootTable.getIntegerTopic("outputSaveImgCmd").getEntry(0); pipelineIndexEntry = rootTable.getIntegerTopic("pipelineIndex").getEntry(0); @@ -179,7 +177,7 @@ public class PhotonCamera { * @return Whether the camera is in driver mode. */ public boolean getDriverMode() { - return driverModeEntry.get(false); + return driverModeSubscriber.get(); } /** @@ -188,7 +186,7 @@ public class PhotonCamera { * @param driverMode Whether to set driver mode. */ public void setDriverMode(boolean driverMode) { - driverModeEntry.set(driverMode); + driverModePublisher.set(driverMode); } /** diff --git a/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp b/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp index 6368a89a0..482267acc 100644 --- a/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp +++ b/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp @@ -42,7 +42,6 @@ PhotonCamera::PhotonCamera(nt::NetworkTableInstance instance, rawBytesEntry( rootTable->GetRawTopic("rawBytes") .Subscribe("rawBytes", {}, {.periodic = 0.01, .sendAll = true})), - driverModeEntry(rootTable->GetBooleanTopic("driverMode").Publish()), inputSaveImgEntry( rootTable->GetIntegerTopic("inputSaveImgCmd").Publish()), inputSaveImgSubscriber( @@ -56,6 +55,8 @@ PhotonCamera::PhotonCamera(nt::NetworkTableInstance instance, versionEntry(mainTable->GetStringTopic("version").Subscribe("")), driverModeSubscriber( rootTable->GetBooleanTopic("driverMode").Subscribe(false)), + driverModePublisher( + rootTable->GetBooleanTopic("driverModeRequest").Publish()), pipelineIndexSubscriber( rootTable->GetIntegerTopic("pipelineIndex").Subscribe(-1)), ledModeSubscriber(mainTable->GetIntegerTopic("ledMode").Subscribe(0)), @@ -92,7 +93,7 @@ PhotonPipelineResult PhotonCamera::GetLatestResult() { } void PhotonCamera::SetDriverMode(bool driverMode) { - driverModeEntry.Set(driverMode); + driverModePublisher.Set(driverMode); } void PhotonCamera::TakeInputSnapshot() { diff --git a/photon-lib/src/main/native/include/photonlib/PhotonCamera.h b/photon-lib/src/main/native/include/photonlib/PhotonCamera.h index 15603409f..781c5727c 100644 --- a/photon-lib/src/main/native/include/photonlib/PhotonCamera.h +++ b/photon-lib/src/main/native/include/photonlib/PhotonCamera.h @@ -168,7 +168,6 @@ class PhotonCamera { std::shared_ptr mainTable; std::shared_ptr rootTable; nt::RawSubscriber rawBytesEntry; - nt::BooleanPublisher driverModeEntry; nt::IntegerPublisher inputSaveImgEntry; nt::IntegerSubscriber inputSaveImgSubscriber; nt::IntegerPublisher outputSaveImgEntry; @@ -178,6 +177,7 @@ class PhotonCamera { nt::StringSubscriber versionEntry; nt::BooleanSubscriber driverModeSubscriber; + nt::BooleanPublisher driverModePublisher; nt::IntegerSubscriber pipelineIndexSubscriber; nt::IntegerSubscriber ledModeSubscriber; diff --git a/photon-targeting/src/main/java/org/photonvision/common/networktables/NTTopicSet.java b/photon-targeting/src/main/java/org/photonvision/common/networktables/NTTopicSet.java index 99011fbc0..edaa65d34 100644 --- a/photon-targeting/src/main/java/org/photonvision/common/networktables/NTTopicSet.java +++ b/photon-targeting/src/main/java/org/photonvision/common/networktables/NTTopicSet.java @@ -75,9 +75,11 @@ public class NTTopicSet { pipelineIndexPublisher = pipelineIndexTopic.publish(); pipelineIndexSubscriber = pipelineIndexTopic.subscribe(0); - driverModeEntry = subTable.getBooleanTopic("driverMode"); - driverModePublisher = driverModeEntry.publish(); - driverModeSubscriber = driverModeEntry.subscribe(false); + driverModePublisher = subTable.getBooleanTopic("driverMode").publish(); + driverModeSubscriber = subTable.getBooleanTopic("driverModeRequest").subscribe(false); + + // Fun little hack to make the request show up + driverModeSubscriber.getTopic().publish().setDefault(false); latencyMillisEntry = subTable.getDoubleTopic("latencyMillis").publish(); hasTargetEntry = subTable.getBooleanTopic("hasTarget").publish();