diff --git a/photon-lib/src/main/java/org/photonvision/PhotonCamera.java b/photon-lib/src/main/java/org/photonvision/PhotonCamera.java index 813ee806d..ad83ceb32 100644 --- a/photon-lib/src/main/java/org/photonvision/PhotonCamera.java +++ b/photon-lib/src/main/java/org/photonvision/PhotonCamera.java @@ -28,6 +28,7 @@ import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableEntry; import edu.wpi.first.networktables.NetworkTableInstance; import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Timer; import org.photonvision.common.dataflow.structures.Packet; import org.photonvision.common.hardware.VisionLEDMode; import org.photonvision.targeting.PhotonPipelineResult; @@ -46,6 +47,8 @@ public class PhotonCamera { private final String path; private static boolean VERSION_CHECK_ENABLED = true; + private static long VERSION_CHECK_INTERVAL = 1; + private double lastVersionCheckTime = 0; public static void setVersionCheckEnabled(boolean enabled) { VERSION_CHECK_ENABLED = enabled; @@ -207,6 +210,9 @@ public class PhotonCamera { private void verifyVersion() { if (!VERSION_CHECK_ENABLED) return; + if ((Timer.getFPGATimestamp() - lastVersionCheckTime) < VERSION_CHECK_INTERVAL) return; + lastVersionCheckTime = Timer.getFPGATimestamp(); + String versionString = versionEntry.getString(""); if (versionString.equals("")) { DriverStation.reportError( diff --git a/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp b/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp index 5cbf562ae..1af6f0ed9 100644 --- a/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp +++ b/photon-lib/src/main/native/cpp/photonlib/PhotonCamera.cpp @@ -25,11 +25,15 @@ #include "photonlib/PhotonCamera.h" #include +#include #include "PhotonVersion.h" #include "photonlib/Packet.h" namespace photonlib { + +constexpr const units::second_t VERSION_CHECK_INTERVAL = 5_s; + PhotonCamera::PhotonCamera(std::shared_ptr instance, const std::string& cameraName) : mainTable(instance->GetTable("photonvision")), @@ -48,7 +52,7 @@ PhotonCamera::PhotonCamera(const std::string& cameraName) nt::NetworkTableInstance::GetDefault()), cameraName) {} -PhotonPipelineResult PhotonCamera::GetLatestResult() const { +PhotonPipelineResult PhotonCamera::GetLatestResult() { // Prints warning if not connected VerifyVersion(); @@ -99,9 +103,14 @@ void PhotonCamera::SetLEDMode(LEDMode mode) { ledModeEntry.SetDouble(static_cast(static_cast(mode))); } -void PhotonCamera::VerifyVersion() const { +void PhotonCamera::VerifyVersion() { if (!PhotonCamera::VERSION_CHECK_ENABLED) return; + if ((frc::Timer::GetFPGATimestamp() - lastVersionCheckTime) < + VERSION_CHECK_INTERVAL) + return; + this->lastVersionCheckTime = frc::Timer::GetFPGATimestamp(); + const std::string& versionString = versionEntry.GetString(""); if (versionString.empty()) { std::string path_ = path; diff --git a/photon-lib/src/main/native/include/photonlib/PhotonCamera.h b/photon-lib/src/main/native/include/photonlib/PhotonCamera.h index 0d5cd77a6..123aee95a 100644 --- a/photon-lib/src/main/native/include/photonlib/PhotonCamera.h +++ b/photon-lib/src/main/native/include/photonlib/PhotonCamera.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "photonlib/PhotonPipelineResult.h" @@ -66,7 +67,7 @@ class PhotonCamera { * Returns the latest pipeline result. * @return The latest pipeline result. */ - PhotonPipelineResult GetLatestResult() const; + PhotonPipelineResult GetLatestResult(); /** * Toggles driver mode. @@ -136,7 +137,7 @@ class PhotonCamera { */ WPI_DEPRECATED( "This method should be replaced with PhotonPipelineResult::HasTargets()") - bool HasTargets() const { return GetLatestResult().HasTargets(); } + bool HasTargets() { return GetLatestResult().HasTargets(); } inline static void SetVersionCheckEnabled(bool enabled) { PhotonCamera::VERSION_CHECK_ENABLED = enabled; @@ -158,9 +159,10 @@ class PhotonCamera { mutable Packet packet; private: + units::second_t lastVersionCheckTime = 0_s; inline static bool VERSION_CHECK_ENABLED = true; - void VerifyVersion() const; + void VerifyVersion(); }; } // namespace photonlib