diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..6d262aa Binary files /dev/null and b/.DS_Store differ diff --git a/.gradle/8.11/checksums/checksums.lock b/.gradle/8.11/checksums/checksums.lock new file mode 100644 index 0000000..a9e50bd Binary files /dev/null and b/.gradle/8.11/checksums/checksums.lock differ diff --git a/.gradle/8.11/checksums/md5-checksums.bin b/.gradle/8.11/checksums/md5-checksums.bin new file mode 100644 index 0000000..e266fc5 Binary files /dev/null and b/.gradle/8.11/checksums/md5-checksums.bin differ diff --git a/.gradle/8.11/checksums/sha1-checksums.bin b/.gradle/8.11/checksums/sha1-checksums.bin new file mode 100644 index 0000000..2ec2320 Binary files /dev/null and b/.gradle/8.11/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.11/executionHistory/executionHistory.lock b/.gradle/8.11/executionHistory/executionHistory.lock new file mode 100644 index 0000000..380fc15 Binary files /dev/null and b/.gradle/8.11/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.11/fileChanges/last-build.bin b/.gradle/8.11/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/.gradle/8.11/fileChanges/last-build.bin differ diff --git a/.gradle/8.11/fileHashes/fileHashes.lock b/.gradle/8.11/fileHashes/fileHashes.lock new file mode 100644 index 0000000..61e23c8 Binary files /dev/null and b/.gradle/8.11/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.11/gc.properties b/.gradle/8.11/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..34d8b48 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..f4d8512 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sat Feb 07 15:30:15 EST 2026 +gradle.version=8.11 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000..31095c3 Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.wpilib/wpilib_preferences.json b/.wpilib/wpilib_preferences.json new file mode 100644 index 0000000..5cef20d --- /dev/null +++ b/.wpilib/wpilib_preferences.json @@ -0,0 +1,6 @@ +{ + "currentLanguage": "none", + "enableCppIntellisense": false, + "projectYear": "none", + "teamNumber": 2706 +} \ No newline at end of file diff --git a/2026-2706-Robot-Code-Imported/src/main/java/frc/robot/subsystems/ShooterStateMachine.java b/2026-2706-Robot-Code-Imported/src/main/java/frc/robot/subsystems/ShooterStateMachine.java new file mode 100644 index 0000000..e69de29 diff --git a/2026-2706-Robot-Code/simgui-ds.json b/2026-2706-Robot-Code/simgui-ds.json new file mode 100644 index 0000000..73cc713 --- /dev/null +++ b/2026-2706-Robot-Code/simgui-ds.json @@ -0,0 +1,92 @@ +{ + "keyboardJoysticks": [ + { + "axisConfig": [ + { + "decKey": 65, + "incKey": 68 + }, + { + "decKey": 87, + "incKey": 83 + }, + { + "decKey": 69, + "decayRate": 0.0, + "incKey": 82, + "keyRate": 0.009999999776482582 + } + ], + "axisCount": 3, + "buttonCount": 4, + "buttonKeys": [ + 90, + 88, + 67, + 86 + ], + "povConfig": [ + { + "key0": 328, + "key135": 323, + "key180": 322, + "key225": 321, + "key270": 324, + "key315": 327, + "key45": 329, + "key90": 326 + } + ], + "povCount": 1 + }, + { + "axisConfig": [ + { + "decKey": 74, + "incKey": 76 + }, + { + "decKey": 73, + "incKey": 75 + } + ], + "axisCount": 2, + "buttonCount": 4, + "buttonKeys": [ + 77, + 44, + 46, + 47 + ], + "povCount": 0 + }, + { + "axisConfig": [ + { + "decKey": 263, + "incKey": 262 + }, + { + "decKey": 265, + "incKey": 264 + } + ], + "axisCount": 2, + "buttonCount": 6, + "buttonKeys": [ + 260, + 268, + 266, + 261, + 269, + 267 + ], + "povCount": 0 + }, + { + "axisCount": 0, + "buttonCount": 0, + "povCount": 0 + } + ] +} diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/Constants.java b/2026-2706-Robot-Code/src/main/java/frc/robot/Constants.java index c50ba05..8d00451 100644 --- a/2026-2706-Robot-Code/src/main/java/frc/robot/Constants.java +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/Constants.java @@ -14,6 +14,45 @@ */ public final class Constants { public static class OperatorConstants { - public static final int kDriverControllerPort = 0; + public static final int kDriverControllerPort = 0; + public static final int kOperatorControllerPort = 1; } + public static class RobotConstants { + public static final int kSelectorSwitchPort = 0; + } + + public static final class CANID { + + public static final int SHOOTER1 = 31; + public static final int SHOOTER2 = 15; + public static final int FEEDER = 40; + //public static final int INDEXER = 27; + + } + + public static final class shooterConstants { + + public static final byte MOTOR1_ID = CANID.SHOOTER1; + public static final byte MOTOR2_ID = CANID.SHOOTER2; + public static final byte FEEDER_MOTOR_ID = CANID.FEEDER; + //public static final byte INDEXER_MOTOR_ID = CANID.INDEXER; + + // PID VALUES + + public static final double kP1 = 0, + kI1 = 0, + kD1 = 0, + kFF1 = 0, + kP2 = 0, + kI2 = 0, + kD2 = 0, + kFF2 = 0, + kP3 = 0, + kI3 = 0, + kD3 = 0, + kFF3 = 0; + } + + + } diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/Robot.java b/2026-2706-Robot-Code/src/main/java/frc/robot/Robot.java index 9abb975..e77d9d1 100644 --- a/2026-2706-Robot-Code/src/main/java/frc/robot/Robot.java +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/Robot.java @@ -8,6 +8,7 @@ import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.CommandScheduler; + /** * The methods in this class are called automatically corresponding to each mode, as described in * the TimedRobot documentation. If you change the name of this class or the package after creating @@ -16,6 +17,8 @@ public class Robot extends TimedRobot { private Command m_autonomousCommand; + + private final RobotContainer m_robotContainer; /** @@ -25,9 +28,13 @@ public class Robot extends TimedRobot { public Robot() { // Instantiate our RobotContainer. This will perform all our button bindings, and put our // autonomous chooser on the dashboard. + System.out.println("shooter system initialized"); m_robotContainer = new RobotContainer(); + + } + /** * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics * that you want ran during disabled, autonomous, teleoperated and test. @@ -79,7 +86,8 @@ public void teleopInit() { /** This function is called periodically during operator control. */ @Override - public void teleopPeriodic() {} + public void teleopPeriodic() { + } @Override public void testInit() { diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/RobotContainer.java b/2026-2706-Robot-Code/src/main/java/frc/robot/RobotContainer.java index a33249e..57d742d 100644 --- a/2026-2706-Robot-Code/src/main/java/frc/robot/RobotContainer.java +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/RobotContainer.java @@ -5,12 +5,28 @@ package frc.robot; import frc.robot.Constants.OperatorConstants; + import frc.robot.commands.Autos; import frc.robot.commands.ExampleCommand; +import edu.wpi.first.wpilibj2.command.PrintCommand; + + import frc.robot.subsystems.ExampleSubsystem; +import frc.robot.subsystems.AutoSelectorKnobSubsystem; +import frc.robot.subsystems.ShooterSubsystem; + import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.Commands; import edu.wpi.first.wpilibj2.command.button.CommandXboxController; import edu.wpi.first.wpilibj2.command.button.Trigger; +import frc.robot.commands.startShooter; +import frc.robot.commands.stopShooter; + + + + + + /** * This class is where the bulk of the robot should be declared. Since Command-based is a @@ -20,11 +36,16 @@ */ public class RobotContainer { // The robot's subsystems and commands are defined here... - private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem(); + //private final ExampleSubsystem m_exampleSubsystem = new ExampleSubsystem(); + private final AutoSelectorKnobSubsystem m_AutoSelectorKnobSubsystem = new AutoSelectorKnobSubsystem(); + + + private final CommandXboxController m_operatorController = new CommandXboxController(OperatorConstants.kOperatorControllerPort); + private final ShooterSubsystem m_ShooterSubsystem = new ShooterSubsystem(); // Replace with CommandPS4Controller or CommandJoystick if needed - private final CommandXboxController m_driverController = - new CommandXboxController(OperatorConstants.kDriverControllerPort); + // private final CommandXboxController m_driverController = + // new CommandXboxController(OperatorConstants.kDriverControllerPort); /** The container for the robot. Contains subsystems, OI devices, and commands. */ public RobotContainer() { @@ -43,21 +64,62 @@ public RobotContainer() { */ private void configureBindings() { // Schedule `ExampleCommand` when `exampleCondition` changes to `true` - new Trigger(m_exampleSubsystem::exampleCondition) - .onTrue(new ExampleCommand(m_exampleSubsystem)); + //new Trigger(m_exampleSubsystem::exampleCondition) + //.onTrue(new ExampleCommand(m_exampleSubsystem)); // Schedule `exampleMethodCommand` when the Xbox controller's B button is pressed, // cancelling on release. - m_driverController.b().whileTrue(m_exampleSubsystem.exampleMethodCommand()); + //m_driverController.b().whileTrue(m_exampleSubsystem.exampleMethodCommand()); + + m_operatorController.a().whileTrue(new startShooter(m_ShooterSubsystem)).onFalse(new stopShooter(m_ShooterSubsystem)); + + } - /** - * Use this to pass the autonomous command to the main {@link Robot} class. - * - * @return the command to run in autonomous - */ + + + /** This function returns the autonomous command based on the knob position. */ public Command getAutonomousCommand() { - // An example command will be run in autonomous - return Autos.exampleAuto(m_exampleSubsystem); - } -} + int mode = m_AutoSelectorKnobSubsystem.getAutoMode(); + System.out.println("Auto Mode = " + mode); // debug print + + switch (mode) { + case 0: + return null; // do nothing + case 1: + return new PrintCommand("1"); + //DriveDistance(39, 0.3, m_robotDrive); + case 2: + return new PrintCommand("2"); + //DriveTimed(2.0, 0.3, m_robotDrive); + case 3: + return new PrintCommand("3"); + //null; + case 4: + return new PrintCommand("4"); + //null; + case 5: + return new PrintCommand("5"); + //null; + case 6: + return new PrintCommand("6"); + //null; + case 7: + return new PrintCommand("7"); + //null; + case 8: + return new PrintCommand("8"); + //null; + case 9: + return new PrintCommand("9"); + //null; + case 10: + return new PrintCommand("10"); + //null; + case 11: + return new PrintCommand("11"); + //null; + default: + return null; + }}} + diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/commands/startShooter.java b/2026-2706-Robot-Code/src/main/java/frc/robot/commands/startShooter.java new file mode 100644 index 0000000..bc2ab9c --- /dev/null +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/commands/startShooter.java @@ -0,0 +1,60 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package frc.robot.commands; + +import frc.robot.subsystems.ShooterSubsystem; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.RunCommand; + +import java.util.concurrent.TimeUnit; + + +/** An example command that uses an example subsystem. */ +public class startShooter extends Command { + @SuppressWarnings("PMD.UnusedPrivateField") + private final ShooterSubsystem m_ShooterSubystsem; + + /** + * Creates a new ExampleCommand. + * + * @param subsystem The subsystem used by this command. + */ + public startShooter(ShooterSubsystem subsystem) { + m_ShooterSubystsem = subsystem; + // Use addRequirements() here to declare subsystem dependencies. + addRequirements(m_ShooterSubystsem); + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + + } + + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() { + System.out.println("in startShooter command"); + if (m_ShooterSubystsem.isRPMinRange()) { + m_ShooterSubystsem.ready(); + } else { + m_ShooterSubystsem.spinningUp(); + } + } + + + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) {} + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return false; + } +} + diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/commands/stopShooter.java b/2026-2706-Robot-Code/src/main/java/frc/robot/commands/stopShooter.java new file mode 100644 index 0000000..7725833 --- /dev/null +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/commands/stopShooter.java @@ -0,0 +1,45 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package frc.robot.commands; + +import frc.robot.subsystems.ShooterSubsystem; +import edu.wpi.first.wpilibj2.command.Command; + +/** An example command that uses an example subsystem. */ +public class stopShooter extends Command { + @SuppressWarnings("PMD.UnusedPrivateField") + private final ShooterSubsystem m_ShooterSubsystem; + + /** + * Creates a new ExampleCommand. + * + * @param subsystem The subsystem used by this command. + */ + public stopShooter(ShooterSubsystem subsystem) { + m_ShooterSubsystem = subsystem; + // Use addRequirements() here to declare subsystem dependencies. + addRequirements(m_ShooterSubsystem); + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + m_ShooterSubsystem.stop(); + } + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() {} + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) {} + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return true; + } +} diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/AutoSelectorKnobSubsystem.java b/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/AutoSelectorKnobSubsystem.java new file mode 100644 index 0000000..4c6d8bd --- /dev/null +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/AutoSelectorKnobSubsystem.java @@ -0,0 +1,53 @@ +package frc.robot.subsystems; + +import edu.wpi.first.wpilibj.AnalogInput; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import frc.robot.Constants; + +public class AutoSelectorKnobSubsystem extends SubsystemBase { + + private final AnalogInput m_knob = new AnalogInput(Constants.RobotConstants.kSelectorSwitchPort); + + public AutoSelectorKnobSubsystem() { + + } + + public double getVoltage() { + return m_knob.getVoltage(); + } + + /** + * Read the knob voltage and convert it into an autonomous mode number (0-11). + */ + public int getAutoMode() { + double voltage = getVoltage(); // 0-5V + System.out.println(voltage); + if (voltage <= 2.64) { + return 0; + } else if (voltage <= 3.01) { + return 1; + } else if (voltage <= 3.27) { + return 2; + } else if (voltage <= 3.62) { + return 3; + } else if (voltage <= 3.86) { + return 4; + } else if (voltage <= 4.01) { + return 5; + } else if (voltage <= 4.13) { + return 6; + } else if (voltage <= 4.22) { + return 7; + } else if (voltage <= 4.29) { + return 8; + } else if (voltage <= 4.38) { + return 9; + } else if (voltage <= 4.45) { + return 10; + } else if (voltage <= 4.60) { + return 11; + } else { + return 0; + } + } +} \ No newline at end of file diff --git a/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/ShooterSubsystem.java b/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/ShooterSubsystem.java new file mode 100644 index 0000000..00ecf15 --- /dev/null +++ b/2026-2706-Robot-Code/src/main/java/frc/robot/subsystems/ShooterSubsystem.java @@ -0,0 +1,176 @@ +package frc.robot.subsystems; +import com.revrobotics.spark.SparkBase; +import com.revrobotics.spark.SparkMax; +import com.revrobotics.spark.config.SparkMaxConfig; +import frc.robot.Constants; +import com.revrobotics.spark.SparkLowLevel.MotorType; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import com.revrobotics.RelativeEncoder; + + + +public class ShooterSubsystem extends SubsystemBase { + private SparkMax shooterMotor1; + private SparkMax shooterMotor2; + private SparkMax feederMotor; // CANNOT be faster than shooterMotor RPM + private SparkMax indexerMotor; + private RelativeEncoder m_encoder; + + public ShooterSubsystem() { + shooterMotor1 = new SparkMax(Constants.shooterConstants.MOTOR1_ID, MotorType.kBrushless); + m_encoder = shooterMotor1.getEncoder(); + SparkMaxConfig shooterConfig = new SparkMaxConfig(); + // Determines which way the motor spins + shooterConfig.inverted(false); + shooterMotor1.configure( + shooterConfig, + SparkBase.ResetMode.kResetSafeParameters, + SparkBase.PersistMode.kPersistParameters + ); + shooterMotor1.setCANTimeout(500);//Units in miliseconds + + + + //@SuppressWarnings("resource") + shooterMotor2 = new SparkMax(Constants.shooterConstants.MOTOR2_ID, MotorType.kBrushless); + // Determines which way the motor spins + shooterConfig.inverted(false); + shooterMotor2.configure( + shooterConfig, + SparkBase.ResetMode.kResetSafeParameters, + SparkBase.PersistMode.kPersistParameters + ); + shooterMotor2.setCANTimeout(500);//Units in miliseconds + SparkMaxConfig followerConfig = new SparkMaxConfig(); + followerConfig.follow(shooterMotor1); + shooterMotor2.configure(followerConfig, SparkBase.ResetMode.kResetSafeParameters, SparkBase.PersistMode.kPersistParameters); + + + + + + + //@SuppressWarnings("resource") + feederMotor = new SparkMax(Constants.shooterConstants.FEEDER_MOTOR_ID, MotorType.kBrushless); + // Determines which way the motor spins + shooterConfig.inverted(false); + feederMotor.configure( + shooterConfig, + SparkBase.ResetMode.kResetSafeParameters, + SparkBase.PersistMode.kPersistParameters + ); + feederMotor.setCANTimeout(500);//Units in miliseconds + + + + // @SuppressWarnings("resource") + // SparkMax indexerMotor = new SparkMax(Constants.shooterConstants.INDEXER_MOTOR_ID, MotorType.kBrushless); + // // Determines which way the motor spins + // shooterConfig.inverted(false); + // indexerMotor.configure( + // shooterConfig, + // SparkBase.ResetMode.kResetSafeParameters, + // SparkBase.PersistMode.kPersistParameters + // ); + // indexerMotor.setCANTimeout(500);//Units in miliseconds + + //----------------------------------------------- + + + } + + public void testMotor() { // purely for testing + System.out.println(shooterMotor1); + System.out.println(shooterMotor2); + System.out.println(feederMotor); + + shooterMotor1.set(getDesiredVoltage()); + System.out.println("motor 1 works"); + shooterMotor2.set(getDesiredVoltage()); + System.out.println("motor 2 works"); + feederMotor.set(getDesiredVoltage()); + System.out.println("motor feeder works"); + } + + /** + + * @return + */ + + public Boolean isRPMinRange() { + double currentRPM = m_encoder.getVelocity(); + + double rangeLowEnd = getDesiredVelocityRPM() - 100; + double rangeHighEnd = getDesiredVelocityRPM() + 100; + System.out.println(currentRPM); + if (rangeLowEnd < currentRPM && currentRPM < rangeHighEnd) { + return true; + } else { + return false; + } + } + + + + public double getDesiredVoltage(){ + return 0.17; // for testing purposes + //return getDesiredVoltage(); + // Use calculated RPM to set voltage used by motors + } + + public double getDesiredVelocityRPM (){ + return 1000; // for test purposes + + //return getDesiredVelocityRPM (); + //Goal: Get average shooting distance from hardware and set an average RPM + //Reach goal: Use data provided by vision snensors (distance from hub) to calculate speed needed + } + + + + public void stop(){ + System.out.println("stop cmd called"); + shooterMotor1.stopMotor(); + feederMotor.stopMotor(); + //indexerMotor.stopMotor(); + } + + public void spinningUp(){ + System.out.println("spining up cmd called"); + //shooterMotor1.set(ShooterModes.SHOOT.getDesiredVoltage()); //set desired voltage + //shooterMotor2.set(ShooterModes.SHOOT.getDesiredVoltage()); //set desired voltage + shooterMotor1.set(getDesiredVoltage()); + feederMotor.stopMotor(); + //indexerMotor.stopMotor(); + } + + public void ready(){ + System.out.println("ready cmd called"); + //shooterMotor1.set(ShooterModes.SHOOT.getDesiredVoltage()); //set desired voltage + //shooterMotor2.set(ShooterModes.SHOOT.getDesiredVoltage()); //set desired voltage + shooterMotor1.set(getDesiredVoltage()); + // divide by 2 is placeholder but need to figure out difference in voltage for feeder+indexer vs shooter motors + + //feederMotor.set(ShooterModes.SHOOT.getDesiredVoltage()/2); + //indexerMotor.set(ShooterModes.SHOOT.getDesiredVoltage()/2); + + feederMotor.set(getDesiredVoltage()/2); + //indexerMotor.set(getDesiredVoltage()/2); + } + + //@Override + // public void periodic() { + // System.out.println("in start shooter if condition"); + // if (isRPMinRange()) { + // ready(); + // } else { + // spinningUp(); + // } + + // } + + @Override + public void simulationPeriodic() { + + } +} \ No newline at end of file diff --git a/2026-2706-Robot-Code/vendordeps/REVLib.json b/2026-2706-Robot-Code/vendordeps/REVLib.json new file mode 100644 index 0000000..d35e593 --- /dev/null +++ b/2026-2706-Robot-Code/vendordeps/REVLib.json @@ -0,0 +1,133 @@ +{ + "fileName": "REVLib.json", + "name": "REVLib", + "version": "2026.0.1", + "frcYear": "2026", + "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", + "mavenUrls": [ + "https://maven.revrobotics.com/" + ], + "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2026.json", + "javaDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-java", + "version": "2026.0.1" + } + ], + "jniDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2026.0.1", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibBackendDriver", + "version": "2026.0.1", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.1", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-cpp", + "version": "2026.0.1", + "libName": "REVLib", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2026.0.1", + "libName": "REVLibDriver", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibBackendDriver", + "version": "2026.0.1", + "libName": "BackendDriver", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.1", + "libName": "REVLibWpi", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ] +} \ No newline at end of file diff --git a/vendordeps/REVLib.json b/vendordeps/REVLib.json new file mode 100644 index 0000000..d8ba7ce --- /dev/null +++ b/vendordeps/REVLib.json @@ -0,0 +1,133 @@ +{ + "fileName": "REVLib.json", + "name": "REVLib", + "version": "2026.0.2", + "frcYear": "2026", + "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", + "mavenUrls": [ + "https://maven.revrobotics.com/" + ], + "jsonUrl": "https://software-metadata.revrobotics.com/REVLib-2026.json", + "javaDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-java", + "version": "2026.0.2" + } + ], + "jniDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2026.0.2", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibBackendDriver", + "version": "2026.0.2", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.2", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-cpp", + "version": "2026.0.2", + "libName": "REVLib", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2026.0.2", + "libName": "REVLibDriver", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibBackendDriver", + "version": "2026.0.2", + "libName": "BackendDriver", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.2", + "libName": "REVLibWpi", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ] +} \ No newline at end of file