added port handling and pipline change sync wth ui

- added port hash map
- putting port into hashmap from camera class
- added sending port from full settings and camera change 
- nt pipe change now sends pipe name to ui
This commit is contained in:
ori agranat
2019-09-21 18:52:28 +03:00
parent 4c315ac554
commit d97f3c1e1a
5 changed files with 14 additions and 6 deletions

View File

@@ -12,11 +12,12 @@ import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
public class SettingsManager {
public static final Path SettingsPath = Paths.get(System.getProperty("user.dir"), "Settings");
public static com.chameleonvision.vision.GeneralSettings GeneralSettings;
// public static HashMap<String, String> CameraPorts = new HashMap<>();//TODO Implement ports
public static HashMap<String, Integer> CameraPorts = new HashMap<>();
private SettingsManager() {}

View File

@@ -1,5 +1,6 @@
package com.chameleonvision.vision.camera;
import com.chameleonvision.settings.SettingsManager;
import com.chameleonvision.vision.Pipeline;
import edu.wpi.cscore.*;
import edu.wpi.first.cameraserver.CameraServer;
@@ -68,6 +69,8 @@ public class Camera {
cvSink = cs.getVideo(UsbCam);
cvSource = cs.putVideo(name, camVals.ImageWidth, camVals.ImageHeight);
var s = (MjpegServer) cs.getServer("serve_" + name);
SettingsManager.CameraPorts.put(name, s.getPort());
}
public void setCamVideoMode(int videoMode) {

View File

@@ -65,7 +65,10 @@ public class CameraProcess implements Runnable {
camera.setExposure(pipeline.exposure);
camera.setBrightness(pipeline.brightness);
//TODO Send Pipeline change using websocket to client
HashMap<String,Object> pipeChange = new HashMap<>();
pipeChange.put("curr_pipeline",ntPipelineIndex);
Server.handler.broadcastMessage(pipeChange);
} else {
ntPipelineEntry.setString("pipeline" + camera.getCurrentPipelineIndex());
}
@@ -113,7 +116,6 @@ public class CameraProcess implements Runnable {
ntTimeStampEntry.setNumber(TimeStamp);
}
// TODO: Separate video output to separate function, maybe even second thread
private PipelineResult runVisionProcess(Mat inputImage, Mat outputImage) {
var pipelineResult = new PipelineResult();
@@ -155,7 +157,6 @@ public class CameraProcess implements Runnable {
}
pipelineResult.Pitch = camera.getCamVals().CalculatePitch(finalRect.center.y, pipelineResult.CalibratedY);
pipelineResult.Yaw = camera.getCamVals().CalculateYaw(finalRect.center.x, pipelineResult.CalibratedX);
// TODO Send pitch yaw distance and Raw Point using websockets to client for calib calc
drawContour(outputImage, finalRect);
}
}

View File

@@ -83,8 +83,9 @@ public class ServerHandler {
String newCamera = (String) value;
System.out.printf("Changing camera to %s\n", newCamera);
CameraManager.setCurrentCamera(newCamera);
//broadcastMessage((Map<String, Object>) new HashMap<String, Object>(){}.put("port",SettingsManager.CameraPorts.get(SettingsManager.GeneralSettings.curr_camera)));
broadcastMessage(new HashMap<String, Object>(){}.put("port",SettingsManager.CameraPorts.get(SettingsManager.GeneralSettings.curr_camera)));
broadcastMessage(CameraManager.getCurrentCamera()); //TODO CHECK JSON FOR CAMERA CHANGE
break;
case "curr_pipeline":
String newPipeline = (String) value;
@@ -182,7 +183,7 @@ public class ServerHandler {
fullSettings.put("resolutionList", CameraManager.getResolutionList());
fullSettings.put("resolution", currentCamera.getVideoModeIndex());
fullSettings.put("FOV", currentCamera.getFOV());
// fullSettings.put("port", SettingsManager.CameraPorts.get(SettingsManager.GeneralSettings.curr_camera));
fullSettings.put("port", SettingsManager.CameraPorts.get(SettingsManager.GeneralSettings.curr_camera));
} catch (CameraException e) {
System.err.println("No camera found!");
//TODO: add message to ui to inform that there are no cameras