Skip to content
This repository was archived by the owner on Oct 3, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion Robot2024/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Robot2024/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Robot2024/lib2813
Submodule lib2813 updated 31 files
+0 −20 .github/workflows/gradle.yml
+0 −3 .gitignore
+1 −1 README.md
+ lib/bin/main/com/team2813/lib2813/control/ControlMode.class
+ lib/bin/main/com/team2813/lib2813/control/DeviceInformation.class
+ lib/bin/main/com/team2813/lib2813/control/imu/Pigeon2Wrapper.class
+ lib/bin/main/com/team2813/lib2813/control/motors/SparkMaxWrapper.class
+ lib/bin/main/com/team2813/lib2813/control/motors/TalonFXWrapper$TalonMotor.class
+ lib/bin/main/com/team2813/lib2813/control/motors/TalonFXWrapper.class
+ lib/bin/main/com/team2813/lib2813/subsystems/MotorSubsystem.class
+ lib/bin/main/com/team2813/lib2813/util/InputValidation.class
+ lib/bin/main/com/team2813/lib2813/util/Port.class
+ lib/bin/test/com/team2813/lib2813/control/motors/TalonFXEqualsTest.class
+ lib/bin/test/com/team2813/lib2813/util/PortTest.class
+11 −5 lib/src/main/java/com/team2813/lib2813/control/ControlMode.java
+8 −36 lib/src/main/java/com/team2813/lib2813/control/DeviceInformation.java
+0 −94 lib/src/main/java/com/team2813/lib2813/control/InvertType.java
+27 −29 lib/src/main/java/com/team2813/lib2813/control/imu/Pigeon2Wrapper.java
+3 −3 lib/src/main/java/com/team2813/lib2813/control/motors/SparkMaxWrapper.java
+120 −95 lib/src/main/java/com/team2813/lib2813/control/motors/TalonFXWrapper.java
+72 −0 lib/src/main/java/com/team2813/lib2813/feature/FeatureControlledCommand.java
+40 −0 lib/src/main/java/com/team2813/lib2813/feature/FeatureIdentifier.java
+77 −0 lib/src/main/java/com/team2813/lib2813/feature/FeatureRegistry.java
+145 −0 lib/src/main/java/com/team2813/lib2813/feature/Features.java
+2 −2 lib/src/main/java/com/team2813/lib2813/subsystems/MotorSubsystem.java
+2 −2 lib/src/main/java/com/team2813/lib2813/util/InputValidation.java
+0 −45 lib/src/test/java/com/team2813/lib2813/control/InvertTypeTest.java
+9 −2 lib/src/test/java/com/team2813/lib2813/control/motors/TalonFXEqualsTest.java
+35 −0 lib/src/test/java/com/team2813/lib2813/feature/FakeFeatures.java
+64 −0 lib/src/test/java/com/team2813/lib2813/feature/FeatureRegistryTest.java
+115 −0 lib/src/test/java/com/team2813/lib2813/feature/FeaturesTest.java
19 changes: 19 additions & 0 deletions Robot2024/src/main/java/com/team2813/Feature.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.team2813;

import com.team2813.lib2813.feature.FeatureIdentifier;

/** Enumeration of all features for this robot. */
public enum Feature implements FeatureIdentifier {
EXAMPLE(FeatureBehavior.INITIALLY_DISABLED);

private final FeatureBehavior behavior;

Feature(FeatureBehavior behavior) {
this.behavior = behavior;
}

@Override
public FeatureBehavior behavior() {
return behavior;
}
}
33 changes: 30 additions & 3 deletions Robot2024/src/main/java/com/team2813/Robot.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,26 @@

package com.team2813;

import com.team2813.lib2813.feature.Features;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.CommandScheduler;

public class Robot extends TimedRobot {
private Command m_autonomousCommand;

private RobotContainer m_robotContainer;
private Object m_featureState;

private RobotContainer getContainer() {
if (m_robotContainer == null) {
m_robotContainer = new RobotContainer();
}
return m_robotContainer;
}

@Override
public void robotInit() {
m_featureState = Features.getState();
m_robotContainer = new RobotContainer();
}

Expand All @@ -26,12 +35,26 @@ public void robotPeriodic() {
@Override
public void disabledInit() {}

@Override
public void disabledExit() {
Object featureState = Features.getState();
if (!featureState.equals(m_featureState)) {
/* Features changed; reset the robot. This may have adverse
* side effects; it's generally not recommend to enable features
* via the UI on a competition day.
*/
m_robotContainer = null;
CommandScheduler.getInstance().getDefaultButtonLoop().clear();
m_featureState = featureState;
}
}

@Override
public void disabledPeriodic() {}

@Override
public void autonomousInit() {
m_autonomousCommand = m_robotContainer.getAutonomousCommand();
m_autonomousCommand = getContainer().getAutonomousCommand();

if (m_autonomousCommand != null) {
m_autonomousCommand.schedule();
Expand All @@ -42,12 +65,16 @@ public void autonomousInit() {
public void autonomousPeriodic() {}

@Override
public void teleopInit() {
public void autonomousExit() {
if (m_autonomousCommand != null) {
m_autonomousCommand.cancel();
m_autonomousCommand = null;
}
}

@Override
public void teleopInit() {}

@Override
public void teleopPeriodic() {}

Expand Down
4 changes: 4 additions & 0 deletions Robot2024/src/main/java/com/team2813/RobotContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@

import com.pathplanner.lib.auto.AutoBuilder;

import com.team2813.lib2813.feature.Features;
import edu.wpi.first.wpilibj.XboxController;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
// import frc.robot.Constants.OperatorConstants;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.Commands;
import edu.wpi.first.wpilibj2.command.InstantCommand;

import com.team2813.commands.DefaultDriveCommand;
Expand Down Expand Up @@ -42,6 +44,8 @@ public RobotContainer() {
shooter.setDefaultCommand(new DefaultShooterCommand(shooter, operatorController::getRightY));
configureBindings();
autoChooser = AutoBuilder.buildAutoChooser();
autoChooser.addOption("Test Feature",
Features.whenAllEnabled(Commands.print("autonomousInit"), Feature.EXAMPLE));
SmartDashboard.putData("Auto", autoChooser);
}

Expand Down