From d9b86a718e147b0fe2e3d5d061b6390d611a0a3c Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:56:17 -0400 Subject: [PATCH] Revert "Make HardwareConfig a record" (#2142) --- .../common/configuration/HardwareConfig.java | 186 +++++++++++++----- .../websocket/UIPhotonConfiguration.java | 6 +- .../common/hardware/GPIO/CustomGPIO.java | 6 +- .../common/hardware/HardwareManager.java | 16 +- .../hardware/metrics/cmds/FileCmds.java | 18 +- .../vision/camera/csi/LibcameraGpuSource.java | 2 +- .../vision/processes/VisionModule.java | 2 +- .../hardware/HardwareConfigTest.java | 11 +- 8 files changed, 171 insertions(+), 76 deletions(-) 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 be053241a..f4712ad0e 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 @@ -21,57 +21,102 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.ArrayList; @JsonIgnoreProperties(ignoreUnknown = true) -public record HardwareConfig( - String deviceName, - String deviceLogoPath, - String supportURL, - // LED control +public class HardwareConfig { + public final String deviceName; + public final String deviceLogoPath; + public final String supportURL; - ArrayList ledPins, - String ledSetCommand, - boolean ledsCanDim, - ArrayList ledBrightnessRange, - String ledDimCommand, - String ledBlinkCommand, - ArrayList statusRGBPins, - // Metrics + // 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; - 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 + // 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 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) { + 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; + } public HardwareConfig() { - 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 + deviceName = ""; + deviceLogoPath = ""; + supportURL = ""; + ledPins = new ArrayList<>(); + ledSetCommand = ""; + ledsCanDim = false; + ledBrightnessRange = new ArrayList<>(); + ledDimCommand = ""; + ledBlinkCommand = ""; + statusRGBPins = new ArrayList<>(); + cpuTempCommand = ""; + cpuMemoryCommand = ""; + cpuUtilCommand = ""; + cpuThrottleReasonCmd = ""; + cpuUptimeCommand = ""; + gpuMemoryCommand = ""; + ramUtilCommand = ""; + gpuMemUsageCommand = ""; + diskUsageCommand = ""; + restartHardwareCommand = ""; + vendorFOV = -1; } /** @@ -96,4 +141,51 @@ public record 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 + + "]"; + } } 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 2a996af8a..14dc59033 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(), c.neuralNetworkPropertyManager().getModels(), NeuralNetworkModelManager.getInstance().getSupportedBackends(), - c.getHardwareConfig().deviceName().isEmpty() + c.getHardwareConfig().deviceName.isEmpty() ? Platform.getHardwareModel() - : c.getHardwareConfig().deviceName(), + : c.getHardwareConfig().deviceName, Platform.getPlatformName(), NetworkTablesManager.getInstance().conflictingHostname, NetworkTablesManager.getInstance().conflictingCameras), 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 36c9d28af..f67beb97c 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 8e8035169..81205d25c 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 @@ -97,22 +97,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); @@ -161,7 +161,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 6c988feeb..5210453b7 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,18 +22,18 @@ import org.photonvision.common.configuration.HardwareConfig; public class FileCmds extends CmdBase { @Override public void initCmds(HardwareConfig config) { - cpuTemperatureCommand = config.cpuTempCommand(); - cpuUtilizationCommand = config.cpuUtilCommand(); - cpuThrottleReasonCmd = config.cpuThrottleReasonCmd(); + cpuTemperatureCommand = config.cpuTempCommand; + cpuUtilizationCommand = config.cpuUtilCommand; + cpuThrottleReasonCmd = config.cpuThrottleReasonCmd; - ramMemCommand = config.cpuMemoryCommand(); - ramUtilCommand = config.ramUtilCommand(); + ramMemCommand = config.cpuMemoryCommand; + ramUtilCommand = config.ramUtilCommand; - gpuMemCommand = config.gpuMemoryCommand(); - gpuMemUtilCommand = config.gpuMemUsageCommand(); + gpuMemCommand = config.gpuMemoryCommand; + gpuMemUtilCommand = config.gpuMemUsageCommand; - diskUsageCommand = config.diskUsageCommand(); + diskUsageCommand = config.diskUsageCommand; - uptimeCommand = config.cpuUptimeCommand(); + uptimeCommand = config.cpuUptimeCommand; } } 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 6fa1223db..28449e9ac 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 69fb69870..5086563a2 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 67822816b..66de90150 100644 --- a/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java +++ b/photon-core/src/test/java/org/photonvision/hardware/HardwareConfigTest.java @@ -34,10 +34,13 @@ 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"); - assertArrayEquals(config.ledPins().stream().mapToInt(i -> i).toArray(), new int[] {2, 13}); + assertEquals(config.deviceName, "PhotonVision"); + assertEquals(config.deviceLogoPath, "photonvision.png"); + assertEquals(config.supportURL, "https://support.photonvision.com"); + // Ensure defaults are not null + assertEquals(config.cpuThrottleReasonCmd, ""); + assertEquals(config.diskUsageCommand, ""); + assertArrayEquals(config.ledPins.stream().mapToInt(i -> i).toArray(), new int[] {2, 13}); CustomGPIO.setConfig(config); } catch (IOException e) {