From: Arnav495 Date: Tue, 16 Sep 2025 16:28:49 +0000 (-0700) Subject: Support multiple OrangePis to shutdown. X-Git-Url: https://git.taranathan.com/?a=commitdiff_plain;h=2762d2a749fe153d7d95add6abf9e94ab289f7e4;p=FRC2026.git Support multiple OrangePis to shutdown. --- diff --git a/src/main/java/frc/robot/commands/vision/ShutdownAllPis.java b/src/main/java/frc/robot/commands/vision/ShutdownAllPis.java new file mode 100644 index 0000000..a6d7360 --- /dev/null +++ b/src/main/java/frc/robot/commands/vision/ShutdownAllPis.java @@ -0,0 +1,20 @@ +package frc.robot.commands.vision; + +import edu.wpi.first.wpilibj2.command.ParallelCommandGroup; +import frc.robot.constants.VisionConstants; + +/** + * Shutdown all Orange Pis listed by hostname in + * {@link frc.robot.constants.VisionConstants} + */ +public class ShutdownAllPis extends ParallelCommandGroup { + public ShutdownAllPis() { + ShutdownOrangePi[] commands = + new ShutdownOrangePi[VisionConstants.ORANGEPI_HOSTNAMES.length]; + for (int i = 0; i < commands.length; i++) { + commands[i] = new ShutdownOrangePi(VisionConstants.ORANGEPI_HOSTNAMES[i]); + } + + addCommands(commands); + } +} diff --git a/src/main/java/frc/robot/commands/vision/ShutdownOrangePi.java b/src/main/java/frc/robot/commands/vision/ShutdownOrangePi.java index b2c0de1..c9078ca 100644 --- a/src/main/java/frc/robot/commands/vision/ShutdownOrangePi.java +++ b/src/main/java/frc/robot/commands/vision/ShutdownOrangePi.java @@ -13,12 +13,18 @@ import frc.robot.constants.VisionConstants; * Uses the username and password set in {@link frc.robot.constantsVisionConstants}. */ public class ShutdownOrangePi extends Command { + private String hostname; private Process process; private boolean passwordTyped; private Pattern promptMatcher; - public ShutdownOrangePi() { + /** + * @param hostname The hostname or IP of the orangepi to shut down. + */ + public ShutdownOrangePi(String hostname) { promptMatcher = Pattern.compile("password: ?$"); + assert hostname != null; + this.hostname = hostname; } @Override @@ -31,14 +37,15 @@ public class ShutdownOrangePi extends Command { passwordTyped = false; if (Robot.isSimulation()) { // this will probably break on Windows systems so... - System.out.println("What OrangePi? This is simulation!"); + System.out.println("Would shut down OrangePi at " + hostname + " if this was real."); return; + } try { String[] commandString = new String[] { "ssh", "-o", "UserKnownHostsFile /dev/null", "-o", "StrictHostKeyChecking no", - VisionConstants.ORANGEPI_USERNAME + "@" + VisionConstants.ORANGEPI_IP, + VisionConstants.ORANGEPI_USERNAME + "@" + hostname, "sudo", "shutdown", "now" }; this.process = Runtime.getRuntime().exec(commandString); } catch (Exception e) { diff --git a/src/main/java/frc/robot/constants/VisionConstants.java b/src/main/java/frc/robot/constants/VisionConstants.java index 4d61900..1e268b4 100644 --- a/src/main/java/frc/robot/constants/VisionConstants.java +++ b/src/main/java/frc/robot/constants/VisionConstants.java @@ -174,4 +174,9 @@ public class VisionConstants { new Transform3d( new Translation3d(Units.inchesToMeters(10), 0, Units.inchesToMeters(24)), new Rotation3d(0, Units.degreesToRadians(20), 0)))); -} \ No newline at end of file + + // used to cleanly shutdown the OrangePi + public static final String[] ORANGEPI_HOSTNAMES = {"photonfront.local", "photonback.local"}; + public static final String ORANGEPI_USERNAME = "pi"; + public static final String ORANGEPI_PASSWORD = "raspberry"; +}