diff --git a/photon-core/src/main/java/org/photonvision/common/configuration/HardwareConfig.java b/photon-core/src/main/java/org/photonvision/common/configuration/HardwareConfig.java index 2c8323f15..7d008f94f 100644 --- a/photon-core/src/main/java/org/photonvision/common/configuration/HardwareConfig.java +++ b/photon-core/src/main/java/org/photonvision/common/configuration/HardwareConfig.java @@ -23,109 +23,59 @@ import java.util.Collections; import java.util.List; @JsonIgnoreProperties(ignoreUnknown = true) -public class HardwareConfig { - public final String deviceName; - public final String deviceLogoPath; - public final String supportURL; +public record HardwareConfig( + String deviceName, + String deviceLogoPath, + String supportURL, + // LED control - // LED control - public final ArrayList ledPins; - public final String ledSetCommand; - public final boolean ledsCanDim; - public final ArrayList ledBrightnessRange; - public final String ledDimCommand; - public final String ledBlinkCommand; - public final ArrayList statusRGBPins; + ArrayList ledPins, + String ledSetCommand, + boolean ledsCanDim, + ArrayList ledBrightnessRange, + String ledDimCommand, + String ledBlinkCommand, + ArrayList statusRGBPins, + // Metrics - // Metrics - public final String cpuTempCommand; - public final String cpuMemoryCommand; - public final String cpuUtilCommand; - public final String cpuThrottleReasonCmd; - public final String cpuUptimeCommand; - public final String gpuMemoryCommand; - public final String ramUtilCommand; - public final String gpuMemUsageCommand; - public final String diskUsageCommand; - - // Device stuff - public final String restartHardwareCommand; - public final double vendorFOV; // -1 for unmanaged - public final List blacklistedResIndices; // this happens before the defaults are applied + String cpuTempCommand, + String cpuMemoryCommand, + String cpuUtilCommand, + String cpuThrottleReasonCmd, + String cpuUptimeCommand, + String gpuMemoryCommand, + String ramUtilCommand, + String gpuMemUsageCommand, + String diskUsageCommand, + // Device stuff + String restartHardwareCommand, + double vendorFOV, // -1 for unmanaged + List blacklistedResIndices) { // this happens before the defaults are applied) public HardwareConfig() { - deviceName = ""; - deviceLogoPath = ""; - supportURL = ""; - ledPins = new ArrayList<>(); - ledSetCommand = ""; - ledsCanDim = false; - ledBrightnessRange = new ArrayList<>(); - statusRGBPins = new ArrayList<>(); - ledDimCommand = ""; - - cpuTempCommand = ""; - cpuMemoryCommand = ""; - cpuUtilCommand = ""; - cpuThrottleReasonCmd = ""; - cpuUptimeCommand = ""; - gpuMemoryCommand = ""; - ramUtilCommand = ""; - ledBlinkCommand = ""; - gpuMemUsageCommand = ""; - diskUsageCommand = ""; - - restartHardwareCommand = ""; - vendorFOV = -1; - blacklistedResIndices = Collections.emptyList(); - } - - @SuppressWarnings("unused") - public HardwareConfig( - String deviceName, - String deviceLogoPath, - String supportURL, - ArrayList ledPins, - String ledSetCommand, - boolean ledsCanDim, - ArrayList ledBrightnessRange, - String ledDimCommand, - String ledBlinkCommand, - ArrayList statusRGBPins, - String cpuTempCommand, - String cpuMemoryCommand, - String cpuUtilCommand, - String cpuThrottleReasonCmd, - String cpuUptimeCommand, - String gpuMemoryCommand, - String ramUtilCommand, - String gpuMemUsageCommand, - String diskUsageCommand, - String restartHardwareCommand, - double vendorFOV, - List blacklistedResIndices) { - this.deviceName = deviceName; - this.deviceLogoPath = deviceLogoPath; - this.supportURL = supportURL; - this.ledPins = ledPins; - this.ledSetCommand = ledSetCommand; - this.ledsCanDim = ledsCanDim; - this.ledBrightnessRange = ledBrightnessRange; - this.ledDimCommand = ledDimCommand; - this.ledBlinkCommand = ledBlinkCommand; - this.statusRGBPins = statusRGBPins; - this.cpuTempCommand = cpuTempCommand; - this.cpuMemoryCommand = cpuMemoryCommand; - this.cpuUtilCommand = cpuUtilCommand; - this.cpuThrottleReasonCmd = cpuThrottleReasonCmd; - this.cpuUptimeCommand = cpuUptimeCommand; - this.gpuMemoryCommand = gpuMemoryCommand; - this.ramUtilCommand = ramUtilCommand; - this.gpuMemUsageCommand = gpuMemUsageCommand; - this.diskUsageCommand = diskUsageCommand; - this.restartHardwareCommand = restartHardwareCommand; - this.vendorFOV = vendorFOV; - this.blacklistedResIndices = blacklistedResIndices; + this( + "", // deviceName + "", // deviceLogoPath + "", // supportURL + new ArrayList<>(), // ledPins + "", // ledSetCommand + false, // ledsCanDim + new ArrayList<>(), // ledBrightnessRange + "", // ledDimCommand + "", // ledBlinkCommand + new ArrayList<>(), // statusRGBPins + "", // cpuTempCommand + "", // cpuMemoryCommand + "", // cpuUtilCommand + "", // cpuThrottleReasonCmd + "", // cpuUptimeCommand + "", // gpuMemoryCommand + "", // ramUtilCommand + "", // gpuMemUsageCommand + "", // diskUsageCommand + "", // restartHardwareCommand + -1, // vendorFOV + Collections.emptyList()); // blacklistedResIndices } /** @@ -150,53 +100,4 @@ public class HardwareConfig { || gpuMemUsageCommand != "" || diskUsageCommand != ""; } - - @Override - public String toString() { - return "HardwareConfig [deviceName=" - + deviceName - + ", deviceLogoPath=" - + deviceLogoPath - + ", supportURL=" - + supportURL - + ", ledPins=" - + ledPins - + ", ledSetCommand=" - + ledSetCommand - + ", ledsCanDim=" - + ledsCanDim - + ", ledBrightnessRange=" - + ledBrightnessRange - + ", ledDimCommand=" - + ledDimCommand - + ", ledBlinkCommand=" - + ledBlinkCommand - + ", statusRGBPins=" - + statusRGBPins - + ", cpuTempCommand=" - + cpuTempCommand - + ", cpuMemoryCommand=" - + cpuMemoryCommand - + ", cpuUtilCommand=" - + cpuUtilCommand - + ", cpuThrottleReasonCmd=" - + cpuThrottleReasonCmd - + ", cpuUptimeCommand=" - + cpuUptimeCommand - + ", gpuMemoryCommand=" - + gpuMemoryCommand - + ", ramUtilCommand=" - + ramUtilCommand - + ", gpuMemUsageCommand=" - + gpuMemUsageCommand - + ", diskUsageCommand=" - + diskUsageCommand - + ", restartHardwareCommand=" - + restartHardwareCommand - + ", vendorFOV=" - + vendorFOV - + ", blacklistedResIndices=" - + blacklistedResIndices - + "]"; - } } diff --git a/photon-core/src/main/java/org/photonvision/common/dataflow/websocket/UIPhotonConfiguration.java b/photon-core/src/main/java/org/photonvision/common/dataflow/websocket/UIPhotonConfiguration.java index 97b609f3d..50ec04576 100644 --- a/photon-core/src/main/java/org/photonvision/common/dataflow/websocket/UIPhotonConfiguration.java +++ b/photon-core/src/main/java/org/photonvision/common/dataflow/websocket/UIPhotonConfiguration.java @@ -49,7 +49,7 @@ public class UIPhotonConfiguration { NetworkManager.getInstance().networkingIsDisabled), new UILightingConfig( c.getHardwareSettings().ledBrightnessPercentage, - !c.getHardwareConfig().ledPins.isEmpty()), + !c.getHardwareConfig().ledPins().isEmpty()), new UIGeneralSettings( PhotonVersion.versionString, // TODO add support for other types of GPU accel @@ -57,9 +57,9 @@ public class UIPhotonConfiguration { MrCalJNILoader.getInstance().isLoaded(), NeuralNetworkModelManager.getInstance().getModels(), NeuralNetworkModelManager.getInstance().getSupportedBackends(), - c.getHardwareConfig().deviceName.isEmpty() + c.getHardwareConfig().deviceName().isEmpty() ? Platform.getHardwareModel() - : c.getHardwareConfig().deviceName, + : c.getHardwareConfig().deviceName(), Platform.getPlatformName()), c.getApriltagFieldLayout()), VisionSourceManager.getInstance().getVisionModules().stream() diff --git a/photon-core/src/main/java/org/photonvision/common/hardware/GPIO/CustomGPIO.java b/photon-core/src/main/java/org/photonvision/common/hardware/GPIO/CustomGPIO.java index f67beb97c..36c9d28af 100644 --- a/photon-core/src/main/java/org/photonvision/common/hardware/GPIO/CustomGPIO.java +++ b/photon-core/src/main/java/org/photonvision/common/hardware/GPIO/CustomGPIO.java @@ -92,8 +92,8 @@ public class CustomGPIO extends GPIOBase { public static void setConfig(HardwareConfig config) { if (Platform.isRaspberryPi()) return; - commands.replace("setState", config.ledSetCommand); - commands.replace("dim", config.ledDimCommand); - commands.replace("blink", config.ledBlinkCommand); + commands.replace("setState", config.ledSetCommand()); + commands.replace("dim", config.ledDimCommand()); + commands.replace("blink", config.ledBlinkCommand()); } } diff --git a/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java b/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java index 2c9a95615..e1a217031 100644 --- a/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java +++ b/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java @@ -94,22 +94,22 @@ public class HardwareManager { } statusLED = - hardwareConfig.statusRGBPins.size() == 3 - ? new StatusLED(hardwareConfig.statusRGBPins) + hardwareConfig.statusRGBPins().size() == 3 + ? new StatusLED(hardwareConfig.statusRGBPins()) : null; if (statusLED != null) { TimedTaskManager.getInstance().addTask("StatusLEDUpdate", this::statusLEDUpdate, 150); } - var hasBrightnessRange = hardwareConfig.ledBrightnessRange.size() == 2; + var hasBrightnessRange = hardwareConfig.ledBrightnessRange().size() == 2; visionLED = - hardwareConfig.ledPins.isEmpty() + hardwareConfig.ledPins().isEmpty() ? null : new VisionLED( - hardwareConfig.ledPins, - hasBrightnessRange ? hardwareConfig.ledBrightnessRange.get(0) : 0, - hasBrightnessRange ? hardwareConfig.ledBrightnessRange.get(1) : 100, + hardwareConfig.ledPins(), + hasBrightnessRange ? hardwareConfig.ledBrightnessRange().get(0) : 0, + hasBrightnessRange ? hardwareConfig.ledBrightnessRange().get(1) : 100, pigpioSocket, ledModeState::set); @@ -158,7 +158,7 @@ public class HardwareManager { } } try { - return shellExec.executeBashCommand(hardwareConfig.restartHardwareCommand) == 0; + return shellExec.executeBashCommand(hardwareConfig.restartHardwareCommand()) == 0; } catch (IOException e) { logger.error("Could not restart device!", e); return false; diff --git a/photon-core/src/main/java/org/photonvision/common/hardware/metrics/cmds/FileCmds.java b/photon-core/src/main/java/org/photonvision/common/hardware/metrics/cmds/FileCmds.java index 7a2746903..bda20e0af 100644 --- a/photon-core/src/main/java/org/photonvision/common/hardware/metrics/cmds/FileCmds.java +++ b/photon-core/src/main/java/org/photonvision/common/hardware/metrics/cmds/FileCmds.java @@ -22,17 +22,17 @@ import org.photonvision.common.configuration.HardwareConfig; public class FileCmds extends CmdBase { @Override public void initCmds(HardwareConfig config) { - cpuMemoryCommand = config.cpuMemoryCommand; - cpuTemperatureCommand = config.cpuTempCommand; - cpuUtilizationCommand = config.cpuUtilCommand; - cpuThrottleReasonCmd = config.cpuThrottleReasonCmd; - cpuUptimeCommand = config.cpuUptimeCommand; + cpuMemoryCommand = config.cpuMemoryCommand(); + cpuTemperatureCommand = config.cpuTempCommand(); + cpuUtilizationCommand = config.cpuUtilCommand(); + cpuThrottleReasonCmd = config.cpuThrottleReasonCmd(); + cpuUptimeCommand = config.cpuUptimeCommand(); - gpuMemoryCommand = config.gpuMemoryCommand; - gpuMemUsageCommand = config.gpuMemUsageCommand; + gpuMemoryCommand = config.gpuMemoryCommand(); + gpuMemUsageCommand = config.gpuMemUsageCommand(); - diskUsageCommand = config.diskUsageCommand; + diskUsageCommand = config.diskUsageCommand(); - ramUsageCommand = config.ramUtilCommand; + ramUsageCommand = config.ramUtilCommand(); } } diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java index dcfea72c5..158b2bf43 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameras/GenericUSBCameraSettables.java @@ -308,7 +308,7 @@ public class GenericUSBCameraSettables extends VisionSourceSettables { // On vendor cameras, respect blacklisted indices var indexBlacklist = - ConfigManager.getInstance().getConfig().getHardwareConfig().blacklistedResIndices; + ConfigManager.getInstance().getConfig().getHardwareConfig().blacklistedResIndices(); for (int badIdx : indexBlacklist) { sortedList.remove(badIdx); } diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSource.java b/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSource.java index 28449e9ac..6fa1223db 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSource.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSource.java @@ -100,7 +100,7 @@ public class LibcameraGpuSource extends VisionSource { @Override public boolean hasLEDs() { - return (ConfigManager.getInstance().getConfig().getHardwareConfig().ledPins.size() > 0); + return (ConfigManager.getInstance().getConfig().getHardwareConfig().ledPins().size() > 0); } @Override diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index 34e9976ec..1c013fb8b 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -160,7 +160,7 @@ public class VisionModule { // Set vendor FOV if (isVendorCamera()) { - var fov = ConfigManager.getInstance().getConfig().getHardwareConfig().vendorFOV; + var fov = ConfigManager.getInstance().getConfig().getHardwareConfig().vendorFOV(); logger.info("Setting FOV of vendor camera to " + fov); visionSource.getSettables().setFOV(fov); } diff --git a/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java b/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java index 9cd13e5dd..b9b088e84 100644 --- a/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java +++ b/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java @@ -34,11 +34,11 @@ public class HardwareConfigTest { System.out.println("Loading Hardware configs..."); var config = new ObjectMapper().readValue(TestUtils.getHardwareConfigJson(), HardwareConfig.class); - assertEquals(config.deviceName, "PhotonVision"); - assertEquals(config.deviceLogoPath, "photonvision.png"); - assertEquals(config.supportURL, "https://support.photonvision.com"); + assertEquals(config.deviceName(), "PhotonVision"); + assertEquals(config.deviceLogoPath(), "photonvision.png"); + assertEquals(config.supportURL(), "https://support.photonvision.com"); Assertions.assertArrayEquals( - config.ledPins.stream().mapToInt(i -> i).toArray(), new int[] {2, 13}); + config.ledPins().stream().mapToInt(i -> i).toArray(), new int[] {2, 13}); CustomGPIO.setConfig(config); } catch (IOException e) {