Skip to content

Commit

Permalink
add javadoc
Browse files Browse the repository at this point in the history
  • Loading branch information
nlaverdure committed Oct 19, 2024
1 parent 018e9c0 commit 24ee080
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 30 deletions.
43 changes: 36 additions & 7 deletions src/main/java/frc/lib/AllianceSelector.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,36 @@
package frc.lib;

import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.event.BooleanEvent;
import edu.wpi.first.wpilibj.event.EventLoop;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import frc.robot.Constants.AutoConstants.AllianceColor;
import java.util.Optional;

public class AllianceSelector {

private AllianceColor m_currentColor;
private Alliance m_currentColor;
private DigitalInput m_allianceSelectionSwitch;
private EventLoop m_loop;

/**
* Constructs an alliance color selector switch
*
* @param port DIO port for reading the alliance color input
*/
public AllianceSelector(int port) {
this.m_allianceSelectionSwitch = new DigitalInput(port);
}

private Alliance getAllianceFromSwitch() {
return m_allianceSelectionSwitch.get() ? Alliance.Red : Alliance.Blue;
}

private boolean updateAlliance() {
AllianceColor m_newColor =
m_allianceSelectionSwitch.get() ? AllianceColor.Red : AllianceColor.Blue;
if (m_newColor == m_currentColor) return false;
Alliance m_newColor = getAllianceFromSwitch();

if (m_newColor.equals(m_currentColor)) return false;
else {
m_currentColor = m_newColor;
return true;
Expand All @@ -28,11 +39,29 @@ private boolean updateAlliance() {

public BooleanEvent changedAlliance = new BooleanEvent(m_loop, () -> updateAlliance());

private boolean agreementInAllianceInputs() {
Optional<Alliance> allianceFromFMS = DriverStation.getAlliance();
Alliance allianceFromSwitch = getAllianceFromSwitch();

if (allianceFromFMS.isPresent()) {
return allianceFromSwitch.equals(allianceFromFMS.get());
} else return false;
}

public BooleanEvent agreementInAllianceInputs =
new BooleanEvent(m_loop, () -> agreementInAllianceInputs());

/**
* @return Whether the field is rotated from the driver's perspective
*/
public boolean fieldRotated() {
return m_currentColor.equals(AllianceColor.Red);
return m_currentColor.equals(Alliance.Red);
}

public AllianceColor getAllianceColor() {
/**
* @return The current alliance
*/
public Alliance getAllianceColor() {
return m_currentColor;
}

Expand Down
32 changes: 27 additions & 5 deletions src/main/java/frc/lib/AutoOption.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,55 @@
package frc.lib;

import frc.robot.Constants.AutoConstants.AllianceColor;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import frc.robot.autos.ChoreoAuto;

public class AutoOption {
private AllianceColor m_color;
private Alliance m_color;
private int m_option;
private ChoreoAuto m_auto;

public AutoOption(AllianceColor color, int option, ChoreoAuto auto) {
/**
* Constructs a selectable autonomous mode option
*
* @param color Alliance for which the option is valid
* @param option Selector switch index for which the option is valid
* @param auto Command which runs the autonomous mode
*/
public AutoOption(Alliance color, int option, ChoreoAuto auto) {
this.m_color = color;
this.m_option = option;
this.m_auto = auto;
}

public AutoOption(AllianceColor color, int option) {
/**
* Constructs a null autonomous mode option
*
* @param color Alliance for which the option is valid
* @param option Selector switch index for which the option is valid
*/
public AutoOption(Alliance color, int option) {
this.m_color = color;
this.m_option = option;
this.m_auto = null;
}

public AllianceColor getColor() {
/**
* @return Alliance for which the option is valid
*/
public Alliance getColor() {
return this.m_color;
}

/**
* @return Selector switch index for which the option is valid
*/
public int getOption() {
return this.m_option;
}

/**
* @return The command which runs the selected autonomous mode
*/
public ChoreoAuto getChoreoAuto() {
return this.m_auto;
}
Expand Down
24 changes: 16 additions & 8 deletions src/main/java/frc/lib/AutoSelector.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
package frc.lib;

import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.event.BooleanEvent;
import edu.wpi.first.wpilibj.event.EventLoop;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import frc.robot.Constants.AutoConstants.AllianceColor;
import frc.robot.autos.ChoreoAuto;
import java.util.List;
import java.util.function.Supplier;

public class AutoSelector {

private ChoreoAuto m_currentAuto;
private DigitalInput[] m_switchPositions;
private AllianceSelector m_allianceSelector;
private Supplier<Alliance> m_allianceColorSupplier;
private List<AutoOption> m_autoOptions;
private EventLoop m_loop;

/**
* Constructs an autonomous selector switch
*
* @param ports An array of DIO ports for selecting an autonomous mode
* @param allianceColorSupplier A method that supplies the current alliance color
* @param autoOptions An array of autonomous mode options
*/
public AutoSelector(
int[] ports, AllianceSelector allianceSelector, List<AutoOption> autoOptions) {
this.m_allianceSelector = allianceSelector;
int[] ports, Supplier<Alliance> allianceColorSupplier, List<AutoOption> autoOptions) {
this.m_allianceColorSupplier = allianceColorSupplier;
this.m_autoOptions = autoOptions;

m_switchPositions = new DigitalInput[ports.length];
Expand All @@ -39,7 +47,7 @@ private int getSwitchPosition() {

private ChoreoAuto findMatchingOption() {
int switchPosition = getSwitchPosition();
AllianceColor color = m_allianceSelector.getAllianceColor();
Alliance color = m_allianceColorSupplier.get();

for (int i = 0; i < m_autoOptions.size(); i++) {
if (m_autoOptions.get(i).getColor() == color)
Expand All @@ -52,7 +60,7 @@ private ChoreoAuto findMatchingOption() {

private boolean updateAuto() {
ChoreoAuto m_newAuto = findMatchingOption();
if (m_newAuto == m_currentAuto) return false;
if (m_newAuto.equals(m_currentAuto)) return false;
else {
m_currentAuto = m_newAuto;
return true;
Expand All @@ -61,19 +69,19 @@ private boolean updateAuto() {

public BooleanEvent changedAuto = new BooleanEvent(m_loop, () -> updateAuto());

/** Schedules the command corresponding to the selected autonomous mode */
public void scheduleAuto() {
if (m_currentAuto != null) m_currentAuto.schedule();
}

/** Deschedules the command corresponding to the selected autonomous mode */
public void cancelAuto() {
if (m_currentAuto != null) m_currentAuto.cancel();
}

public void disabledPeriodic() {
m_loop.poll();

m_allianceSelector.changedAlliance.ifHigh(() -> updateAuto());

if (m_currentAuto != null) {
SmartDashboard.putString("Auto", m_currentAuto.getName());
} else {
Expand Down
6 changes: 0 additions & 6 deletions src/main/java/frc/robot/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,6 @@ public static final class XBox {
}

public static final class AutoConstants {

public static enum AllianceColor {
Red,
Blue
}

public static final int kAllianceColorSelectorPort = 10;

// max length is 8
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/frc/robot/Robot.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import edu.wpi.first.wpilibj.DataLogManager;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.DriverStation.Alliance;
import edu.wpi.first.wpilibj.PowerDistribution;
import edu.wpi.first.wpilibj.PowerDistribution.ModuleType;
import edu.wpi.first.wpilibj.TimedRobot;
Expand All @@ -18,7 +19,6 @@
import frc.lib.ControllerPatroller;
import frc.lib.SendableZorroController;
import frc.robot.Constants.AutoConstants;
import frc.robot.Constants.AutoConstants.AllianceColor;
import frc.robot.Constants.DriveConstants;
import frc.robot.Constants.OIConstants;
import frc.robot.Constants.OIConstants.Zorro;
Expand Down Expand Up @@ -49,7 +49,9 @@ public Robot() {
m_allianceSelector = new AllianceSelector(AutoConstants.kAllianceColorSelectorPort);
m_autoSelector =
new AutoSelector(
AutoConstants.kAutonomousModeSelectorPorts, m_allianceSelector, m_autoOptions);
AutoConstants.kAutonomousModeSelectorPorts,
m_allianceSelector::getAllianceColor,
m_autoOptions);

m_swerve = new Drivetrain(m_allianceSelector::fieldRotated);

Expand Down Expand Up @@ -158,8 +160,8 @@ private void configureDriverButtonBindings() {
private void configureOperatorButtonBindings() {}

private void configureAutoOptions() {
m_autoOptions.add(new AutoOption(AllianceColor.Red, 1, new ExampleAuto()));
m_autoOptions.add(new AutoOption(AllianceColor.Blue, 1));
m_autoOptions.add(new AutoOption(Alliance.Red, 1, new ExampleAuto()));
m_autoOptions.add(new AutoOption(Alliance.Blue, 1));
}

/**
Expand Down

0 comments on commit 24ee080

Please sign in to comment.