diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java index 57c0c8c4b..36e91cb36 100644 --- a/Main/src/main/java/com/chameleonvision/Main.java +++ b/Main/src/main/java/com/chameleonvision/Main.java @@ -38,10 +38,7 @@ public class Main { if (CameraManager.initializeCameras()) { SettingsManager.initialize(); - for (var camSet : CameraManager.getAllCamerasByName().entrySet()) { - new Thread(new VisionProcess(camSet.getValue())).start(); - } - + CameraManager.initializeThreads(); NetworkTableInstance.getDefault().startClientTeam(SettingsManager.GeneralSettings.team_number); // NetworkTableInstance.getDefault().startClient("localhost"); System.out.println("Starting WebServer At Port:" + port); diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java index 098ecf457..891e0e6e6 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java @@ -3,7 +3,9 @@ package com.chameleonvision.vision.camera; import com.chameleonvision.CameraException; import com.chameleonvision.FileHelper; import com.chameleonvision.settings.SettingsManager; +import com.chameleonvision.vision.GeneralSettings; import com.chameleonvision.vision.Pipeline; +import com.chameleonvision.vision.process.VisionProcess; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import edu.wpi.cscore.UsbCamera; @@ -22,6 +24,7 @@ public class CameraManager { private static final Path CamConfigPath = Paths.get(SettingsManager.SettingsPath.toString(), "cameras"); private static HashMap AllCamerasByName = new HashMap<>(); + private static HashMap AllVisionProcessesByName = new HashMap<>(); static HashMap AllUsbCameraInfosByName = new HashMap<>() {{ var suffix = 0; @@ -67,6 +70,14 @@ public class CameraManager { return true; } + public static void initializeThreads(){ + for (var camSet : AllCamerasByName.entrySet()) { + VisionProcess visionProcess = new VisionProcess(camSet.getValue()); + AllVisionProcessesByName.put(camSet.getKey(),visionProcess); + new Thread(visionProcess).start(); + } + } + private static boolean addCamera(Camera camera, String cameraName) { if (AllCamerasByName.containsKey(cameraName)) return false; for (int i = 0; i < 10;i++){ @@ -115,6 +126,12 @@ public class CameraManager { } throw new CameraException(CameraException.CameraExceptionType.NO_CAMERA); } + public static VisionProcess getCurrentCameraProcess() throws CameraException{ + if (!SettingsManager.GeneralSettings.curr_camera.equals("")){ + return AllVisionProcessesByName.get(SettingsManager.GeneralSettings.curr_camera); + } + throw new CameraException(CameraException.CameraExceptionType.NO_CAMERA); + } public static void saveCameras() { for (var entry : AllCamerasByName.entrySet()) { diff --git a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java index fbb04a1b9..20fe45b7f 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -20,8 +20,8 @@ public class VisionProcess implements Runnable { private final String cameraName; private final CameraProcess cameraProcess; // NetworkTables - private NetworkTableEntry ntPipelineEntry; - private NetworkTableEntry ntDriverModeEntry; + public NetworkTableEntry ntPipelineEntry; + public NetworkTableEntry ntDriverModeEntry; private NetworkTableEntry ntYawEntry; private NetworkTableEntry ntPitchEntry; private NetworkTableEntry ntDistanceEntry; diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index 453d6d6c7..3ccc992c2 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -103,7 +103,8 @@ public class ServerHandler { var pipelineNumber = Integer.parseInt(newPipeline.replace("pipeline", "")); System.out.printf("Changing pipeline to %s\n", newPipeline); CameraManager.setCurrentPipeline(pipelineNumber); -// broadcastMessage(allFieldsToMap(CameraManager.getCurrentPipeline())); + var Proccess = CameraManager.getCurrentCameraProcess(); + Proccess.ntPipelineEntry.setString(newPipeline); broadcastMessage(allFieldsToMap(CameraManager.getCurrentPipeline())); break;