From 06d41dbd8174c10e5221eb3420327250db5c292b Mon Sep 17 00:00:00 2001 From: thatcomputerguy0101 Date: Mon, 27 Apr 2026 18:50:28 -0400 Subject: [PATCH] Refactor isConnected/checkCameraConnected to be shared for Libcamera provider to only init on camera connection --- .../vision/frame/FrameProvider.java | 15 ++++++++++++++- .../provider/LibcameraGpuFrameProvider.java | 17 ++++++++--------- .../vision/frame/provider/USBFrameProvider.java | 14 ++------------ 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/frame/FrameProvider.java b/photon-core/src/main/java/org/photonvision/vision/frame/FrameProvider.java index 66b90423c3..c0fdbbb5bb 100644 --- a/photon-core/src/main/java/org/photonvision/vision/frame/FrameProvider.java +++ b/photon-core/src/main/java/org/photonvision/vision/frame/FrameProvider.java @@ -35,9 +35,22 @@ protected void onCameraConnected() { cameraPropertiesCached = true; } + /** + * Returns if the camera is currently connected. Use checkCameraConnected instead to properly + * handle camera connection. + */ public abstract boolean isConnected(); - public abstract boolean checkCameraConnected(); + /** Checks if the camera is currently connected. Also handles connection events. */ + public boolean checkCameraConnected() { + boolean connected = this.isConnected(); + + if (!cameraPropertiesCached && connected) { + onCameraConnected(); + } + + return connected; + } /** * Returns if the camera has connected at some point. This is not if it is currently connected. diff --git a/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java b/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java index e805602fe0..d12ed556e9 100644 --- a/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java +++ b/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java @@ -37,11 +37,6 @@ public class LibcameraGpuFrameProvider extends FrameProvider { public LibcameraGpuFrameProvider(LibcameraGpuSettables visionSettables) { this.settables = visionSettables; - - var vidMode = settables.getCurrentVideoMode(); - settables.setVideoMode(vidMode); - this.cameraPropertiesCached = - true; // Camera properties are not able to be changed so they are always cached } @Override @@ -150,7 +145,7 @@ public void release() { } @Override - public boolean checkCameraConnected() { + public boolean isConnected() { String[] cameraNames = LibCameraJNI.getCameraNames(); for (String name : cameraNames) { if (name.equals(settables.getConfiguration().getDevicePath())) { @@ -160,9 +155,13 @@ public boolean checkCameraConnected() { return false; } - // To our knowledge the camera is always connected (after boot) with csi cameras @Override - public boolean isConnected() { - return checkCameraConnected(); + protected void onCameraConnected() { + logger.info("Camera connected! running callback"); + + super.onCameraConnected(); + + var vidMode = settables.getCurrentVideoMode(); + settables.setVideoMode(vidMode); } } diff --git a/photon-core/src/main/java/org/photonvision/vision/frame/provider/USBFrameProvider.java b/photon-core/src/main/java/org/photonvision/vision/frame/provider/USBFrameProvider.java index 85d461ca18..64b51edf70 100644 --- a/photon-core/src/main/java/org/photonvision/vision/frame/provider/USBFrameProvider.java +++ b/photon-core/src/main/java/org/photonvision/vision/frame/provider/USBFrameProvider.java @@ -57,18 +57,6 @@ public USBFrameProvider( this.connectedCallback = connectedCallback; } - @Override - public boolean checkCameraConnected() { - boolean connected = camera.isConnected(); - - if (!cameraPropertiesCached && connected) { - logger.info("Camera connected! running callback"); - onCameraConnected(); - } - - return connected; - } - final double CSCORE_DEFAULT_FRAME_TIMEOUT = 1.0 / 4.0; @Override @@ -145,6 +133,8 @@ public void release() { @Override public void onCameraConnected() { + logger.info("Camera connected! running callback"); + super.onCameraConnected(); this.connectedCallback.run();