mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Merge branch 'dev' into class-abstraction
# Conflicts: # .gitignore # Main/src/main/java/com/chameleonvision/vision/camera/Camera.java # Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java # Main/src/main/java/com/chameleonvision/vision/enums/StreamDivisor.java # Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java # Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java # Main/src/main/java/com/chameleonvision/web/Server.java # Main/src/main/java/com/chameleonvision/web/SocketHandler.java
This commit is contained in:
@@ -24,7 +24,7 @@ public class Main {
|
||||
private static final String IGNORE_ROOT_KEY = "--ignore-root"; // no args for this setting
|
||||
private static final String TEST_MODE_KEY = "--cv-development";
|
||||
|
||||
private static final int DEFAULT_PORT = 8888;
|
||||
private static final int DEFAULT_PORT = 5800;
|
||||
|
||||
private static boolean ntServerMode = false;
|
||||
private static boolean manageNetwork = true;
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.chameleonvision.web;
|
||||
|
||||
import com.chameleonvision.network.NetworkIPMode;
|
||||
import com.chameleonvision.settings.GeneralSettings;
|
||||
import com.chameleonvision.settings.SettingsManager;
|
||||
import com.chameleonvision.vision.camera.CameraException;
|
||||
import com.chameleonvision.vision.camera.CameraManager;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.javalin.http.Context;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Requesthandler {
|
||||
|
||||
public static void onGeneralSettings(Context ctx) {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
try {
|
||||
Map map = objectMapper.readValue(ctx.body(), Map.class);
|
||||
SettingsManager.GeneralSettings.teamNumber = (int) map.get("teamNumber");
|
||||
SettingsManager.GeneralSettings.connectionType = NetworkIPMode.values()[(int) map.get("connectionType")];
|
||||
SettingsManager.GeneralSettings.ip = (String) map.get("ip");
|
||||
SettingsManager.GeneralSettings.netmask = (String) map.get("netmask");
|
||||
SettingsManager.GeneralSettings.gateway = (String) map.get("gateway");
|
||||
SettingsManager.GeneralSettings.hostname = (String) map.get("hostname");
|
||||
SettingsManager.saveSettings();
|
||||
SocketHandler.sendFullSettings();
|
||||
ctx.status(200);
|
||||
} catch (JsonProcessingException e) {
|
||||
ctx.status(500);
|
||||
}
|
||||
}
|
||||
|
||||
public static void onCameraSettings(Context ctx) {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
try {
|
||||
Map camSettings = objectMapper.readValue(ctx.body(), Map.class);
|
||||
var curCam = CameraManager.getCurrentCamera();
|
||||
|
||||
Number newFOV = (Number) camSettings.get("fov");
|
||||
Integer newStreamDivisor = (Integer) camSettings.get("streamDivisor");
|
||||
Integer newResolution = (Integer) camSettings.get("resolution");
|
||||
|
||||
curCam.setFOV(newFOV);
|
||||
|
||||
var currentStreamDivisorOrdinal = curCam.getStreamDivisor().ordinal();
|
||||
if (currentStreamDivisorOrdinal != newStreamDivisor) {
|
||||
curCam.setStreamDivisor(newStreamDivisor, true);
|
||||
}
|
||||
|
||||
var currentResolutionIndex = curCam.getVideoModeIndex();
|
||||
if (currentResolutionIndex != newResolution) {
|
||||
curCam.setCamVideoMode(newResolution, true);
|
||||
}
|
||||
|
||||
CameraManager.saveCameras();
|
||||
SocketHandler.sendFullSettings();
|
||||
ctx.status(200);
|
||||
} catch (JsonProcessingException | CameraException e) {
|
||||
e.printStackTrace();
|
||||
ctx.status(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,30 +3,33 @@ package com.chameleonvision.web;
|
||||
import com.chameleonvision.config.ConfigManager;
|
||||
import io.javalin.Javalin;
|
||||
|
||||
|
||||
public class Server {
|
||||
public static ServerHandler handler;
|
||||
private static SocketHandler socketHandler;
|
||||
|
||||
public static void main(int port) {
|
||||
handler = new ServerHandler();
|
||||
socketHandler = new SocketHandler();
|
||||
|
||||
Javalin app = Javalin.create(javalinConfig -> javalinConfig.showJavalinBanner = false);
|
||||
app.config.addStaticFiles("web");
|
||||
Javalin app = Javalin.create(javalinConfig -> {
|
||||
javalinConfig.showJavalinBanner = false;
|
||||
javalinConfig.addStaticFiles("web");
|
||||
javalinConfig.enableCorsForAllOrigins();
|
||||
});
|
||||
app.ws("/websocket", ws -> {
|
||||
ws.onConnect(ctx -> {
|
||||
handler.onConnect(ctx);
|
||||
socketHandler.onConnect(ctx);
|
||||
System.out.println("Socket Connected");
|
||||
});
|
||||
ws.onClose(ctx -> {
|
||||
handler.onClose(ctx);
|
||||
socketHandler.onClose(ctx);
|
||||
System.out.println("Socket Disconnected");
|
||||
ConfigManager.saveGeneralSettings();
|
||||
});
|
||||
ws.onBinaryMessage(ctx -> {
|
||||
handler.onBinaryMessage(ctx);
|
||||
socketHandler.onBinaryMessage(ctx);
|
||||
});
|
||||
});
|
||||
|
||||
app.post("/api/settings/general", Requesthandler::onGeneralSettings);
|
||||
app.post("/api/settings/camera", Requesthandler::onCameraSettings);
|
||||
app.start(port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@ import java.nio.ByteBuffer;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class ServerHandler {
|
||||
public class SocketHandler {
|
||||
|
||||
private static List<WsContext> users;
|
||||
private static ObjectMapper objectMapper;
|
||||
|
||||
ServerHandler() {
|
||||
SocketHandler() {
|
||||
users = new ArrayList<>();
|
||||
objectMapper = new ObjectMapper(new MessagePackFactory());
|
||||
}
|
||||
@@ -53,15 +53,6 @@ public class ServerHandler {
|
||||
CVPipeline currentPipeline = currentProcess.getCurrentPipeline();
|
||||
|
||||
switch (entry.getKey()) {
|
||||
case "generalSettings": {
|
||||
HashMap<String, Object> data = (HashMap<String, Object>) entry.getValue();
|
||||
for (HashMap.Entry<String, Object> e : data.entrySet()) {
|
||||
setField(ConfigManager.settings, e.getKey(), e.getValue());
|
||||
}
|
||||
ConfigManager.saveGeneralSettings();
|
||||
sendFullSettings();
|
||||
break;
|
||||
}
|
||||
case "driverMode": {
|
||||
HashMap<String, Object> data = (HashMap<String, Object>) entry.getValue();
|
||||
currentProcess.getDriverModeSettings().exposure = (Integer) data.get("exposure");
|
||||
@@ -71,29 +62,6 @@ public class ServerHandler {
|
||||
VisionManager.saveCurrentCameraDriverMode();
|
||||
break;
|
||||
}
|
||||
case "cameraSettings": {
|
||||
HashMap camSettings = (HashMap) entry.getValue();
|
||||
|
||||
Number newFOV = (Number) camSettings.get("fov");
|
||||
StreamDivisor newStreamDivisor = StreamDivisor.values()[(Integer) camSettings.get("streamDivisor")];
|
||||
// Integer newResolution = (Integer) camSettings.get("resolution");
|
||||
|
||||
currentCamera.getProperties().FOV = (double) newFOV;
|
||||
|
||||
if (currentProcess.cameraStreamer.getDivisor() != newStreamDivisor) {
|
||||
currentProcess.cameraStreamer.setDivisor(newStreamDivisor, false);
|
||||
}
|
||||
|
||||
// TODO (HIGH) get and set video modes!
|
||||
// var currentResolutionIndex = currentPipeline.getVideoModeIndex();
|
||||
// if (currentResolutionIndex != newResolution) {
|
||||
// currentCamera.getProperties().setCamVideoMode(newResolution, true);
|
||||
// }
|
||||
|
||||
VisionManager.saveCurrentCameraSettings();
|
||||
sendFullSettings();
|
||||
break;
|
||||
}
|
||||
case "changeCameraName": {
|
||||
currentCamera.getProperties().setNickname((String) entry.getValue());
|
||||
sendFullSettings();
|
||||
Reference in New Issue
Block a user