diff --git a/src/main/java/swervelib/SwerveDrive.java b/src/main/java/swervelib/SwerveDrive.java index f34cce7f9..d4833dfaf 100644 --- a/src/main/java/swervelib/SwerveDrive.java +++ b/src/main/java/swervelib/SwerveDrive.java @@ -71,7 +71,7 @@ /** * Swerve Drive class representing and controlling the swerve drive. */ -public class SwerveDrive +public class SwerveDrive implements AutoCloseable { /** @@ -334,6 +334,16 @@ public SwerveDrive( HAL.report(kResourceType_RobotDrive, kRobotDriveSwerve_YAGSL); } + @Override + public void close() { + imu.close(); + tunerXRecommendation.close(); + + for (var module : swerveModules) { + module.close(); + } + } + /** * Update the cache validity period for the robot. * diff --git a/src/main/java/swervelib/SwerveModule.java b/src/main/java/swervelib/SwerveModule.java index d0ad53568..67b751d23 100644 --- a/src/main/java/swervelib/SwerveModule.java +++ b/src/main/java/swervelib/SwerveModule.java @@ -34,7 +34,7 @@ /** * The Swerve Module class which represents and controls Swerve Modules for the swerve drive. */ -public class SwerveModule +public class SwerveModule implements AutoCloseable { /** @@ -267,6 +267,13 @@ public SwerveModule(int moduleNumber, SwerveModuleConfiguration moduleConfigurat "swerve/modules/" + configuration.name + "/Angle Setpoint").publish(); } + @Override + public void close() { + angleMotor.close(); + driveMotor.close(); + absoluteEncoder.close(); + } + /** * Get the default {@link SimpleMotorFeedforward} for the swerve module drive motor. * diff --git a/src/main/java/swervelib/encoders/AnalogAbsoluteEncoderSwerve.java b/src/main/java/swervelib/encoders/AnalogAbsoluteEncoderSwerve.java index 11016f652..3d91c6f22 100644 --- a/src/main/java/swervelib/encoders/AnalogAbsoluteEncoderSwerve.java +++ b/src/main/java/swervelib/encoders/AnalogAbsoluteEncoderSwerve.java @@ -47,6 +47,12 @@ public AnalogAbsoluteEncoderSwerve(AnalogInput encoder) AlertType.kWarning); } + @Override + public void close() + { + encoder.close(); + } + /** * Construct the Encoder given the analog input channel. * diff --git a/src/main/java/swervelib/encoders/CANCoderSwerve.java b/src/main/java/swervelib/encoders/CANCoderSwerve.java index a22c785c7..782012dea 100644 --- a/src/main/java/swervelib/encoders/CANCoderSwerve.java +++ b/src/main/java/swervelib/encoders/CANCoderSwerve.java @@ -112,6 +112,12 @@ public CANCoderSwerve(int id, String canbus) AlertType.kWarning); } + @Override + public void close() + { + encoder.close(); + } + /** * Reset the encoder to factory defaults. */ diff --git a/src/main/java/swervelib/encoders/CanAndMagSwerve.java b/src/main/java/swervelib/encoders/CanAndMagSwerve.java index 429715812..d33f04934 100644 --- a/src/main/java/swervelib/encoders/CanAndMagSwerve.java +++ b/src/main/java/swervelib/encoders/CanAndMagSwerve.java @@ -29,6 +29,12 @@ public CanAndMagSwerve(int canid) settings = encoder.getSettings(); } + @Override + public void close() + { + encoder.close(); + } + /** * Reset the encoder to factory defaults. *
diff --git a/src/main/java/swervelib/encoders/DIODutyCycleEncoderSwerve.java b/src/main/java/swervelib/encoders/DIODutyCycleEncoderSwerve.java
index 2f2b16d82..770902d0d 100644
--- a/src/main/java/swervelib/encoders/DIODutyCycleEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/DIODutyCycleEncoderSwerve.java
@@ -47,6 +47,12 @@ public DIODutyCycleEncoderSwerve(int pin)
}
+ @Override
+ public void close()
+ {
+ encoder.close();
+ }
+
/**
* Configure the inversion state of the encoder.
*
diff --git a/src/main/java/swervelib/encoders/SparkFlexEncoderSwerve.java b/src/main/java/swervelib/encoders/SparkFlexEncoderSwerve.java
index 00ef7d4b7..4a0869a6f 100644
--- a/src/main/java/swervelib/encoders/SparkFlexEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/SparkFlexEncoderSwerve.java
@@ -62,6 +62,15 @@ public SparkFlexEncoderSwerve(SwerveMotor motor, int conversionFactor)
}
}
+ @Override
+ public void close()
+ {
+ // SPARK Flex encoder gets closed with the motor
+ // I don't think an encoder getting closed should
+ // close the entire motor so i will keep this empty
+ // sparkFlex.close();
+ }
+
/**
* Run the configuration until it succeeds or times out.
*
diff --git a/src/main/java/swervelib/encoders/SparkMaxAnalogEncoderSwerve.java b/src/main/java/swervelib/encoders/SparkMaxAnalogEncoderSwerve.java
index 84c6b6c6b..bda63039f 100644
--- a/src/main/java/swervelib/encoders/SparkMaxAnalogEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/SparkMaxAnalogEncoderSwerve.java
@@ -64,6 +64,15 @@ public SparkMaxAnalogEncoderSwerve(SwerveMotor motor, double maxVoltage)
}
+ @Override
+ public void close()
+ {
+ // SPARK MAX Analog encoder gets closed with the motor
+ // I don't think an encoder getting closed should
+ // close the entire motor so i will keep this empty
+ // sparkMax.close();
+ }
+
/**
* Run the configuration until it succeeds or times out.
*
diff --git a/src/main/java/swervelib/encoders/SparkMaxEncoderSwerve.java b/src/main/java/swervelib/encoders/SparkMaxEncoderSwerve.java
index c822dfc20..d530a7365 100644
--- a/src/main/java/swervelib/encoders/SparkMaxEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/SparkMaxEncoderSwerve.java
@@ -64,6 +64,15 @@ public SparkMaxEncoderSwerve(SwerveMotor motor, int conversionFactor)
}
}
+ @Override
+ public void close()
+ {
+ // SPARK MAX encoder gets closed with the motor
+ // I don't think an encoder getting closed should
+ // close the entire motor so i will keep this empty
+ // sparkFlex.close();
+ }
+
/**
* Run the configuration until it succeeds or times out.
*
diff --git a/src/main/java/swervelib/encoders/SwerveAbsoluteEncoder.java b/src/main/java/swervelib/encoders/SwerveAbsoluteEncoder.java
index c398c7448..e89439ae6 100644
--- a/src/main/java/swervelib/encoders/SwerveAbsoluteEncoder.java
+++ b/src/main/java/swervelib/encoders/SwerveAbsoluteEncoder.java
@@ -3,9 +3,15 @@
/**
* Swerve abstraction class to define a standard interface with absolute encoders for swerve modules..
*/
-public abstract class SwerveAbsoluteEncoder
+public abstract class SwerveAbsoluteEncoder implements AutoCloseable
{
+ // This is a bit weird because some encoders are closable
+ // while some get closed with the motor controller
+ // so for some encoders this will be an empty function
+ @Override
+ public abstract void close();
+
/**
* The maximum amount of times the swerve encoder will attempt to configure itself if failures occur.
*/
diff --git a/src/main/java/swervelib/encoders/TalonSRXEncoderSwerve.java b/src/main/java/swervelib/encoders/TalonSRXEncoderSwerve.java
index d2449ed78..aa4271bac 100644
--- a/src/main/java/swervelib/encoders/TalonSRXEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/TalonSRXEncoderSwerve.java
@@ -44,6 +44,15 @@ public TalonSRXEncoderSwerve(SwerveMotor motor, FeedbackDevice feedbackDevice)
}
}
+ @Override
+ public void close()
+ {
+ // TalonSRX encoder gets closed with the motor
+ // I don't think an encoder getting closed should
+ // close the entire motor so i will keep this empty
+ // sparkFlex.close();
+ }
+
@Override
public void factoryDefault()
{
diff --git a/src/main/java/swervelib/encoders/ThriftyNovaEncoderSwerve.java b/src/main/java/swervelib/encoders/ThriftyNovaEncoderSwerve.java
index b548bd513..cacb1a3ca 100644
--- a/src/main/java/swervelib/encoders/ThriftyNovaEncoderSwerve.java
+++ b/src/main/java/swervelib/encoders/ThriftyNovaEncoderSwerve.java
@@ -34,6 +34,15 @@ public ThriftyNovaEncoderSwerve(SwerveMotor motor)
motor.setAbsoluteEncoder(null);
}
+ @Override
+ public void close()
+ {
+ // ThriftyNova encoder gets closed with the motor
+ // I don't think an encoder getting closed should
+ // close the entire motor so i will keep this empty
+ // sparkFlex.close();
+ }
+
/**
* Set factory default.
*/
diff --git a/src/main/java/swervelib/imu/ADIS16448Swerve.java b/src/main/java/swervelib/imu/ADIS16448Swerve.java
index 23573fd3d..fcea48293 100644
--- a/src/main/java/swervelib/imu/ADIS16448Swerve.java
+++ b/src/main/java/swervelib/imu/ADIS16448Swerve.java
@@ -42,6 +42,11 @@ public ADIS16448Swerve()
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/ADIS16470Swerve.java b/src/main/java/swervelib/imu/ADIS16470Swerve.java
index d24af92f0..0da821120 100644
--- a/src/main/java/swervelib/imu/ADIS16470Swerve.java
+++ b/src/main/java/swervelib/imu/ADIS16470Swerve.java
@@ -44,6 +44,11 @@ public ADIS16470Swerve()
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/ADXRS450Swerve.java b/src/main/java/swervelib/imu/ADXRS450Swerve.java
index d0dd2cbbf..85c7523f8 100644
--- a/src/main/java/swervelib/imu/ADXRS450Swerve.java
+++ b/src/main/java/swervelib/imu/ADXRS450Swerve.java
@@ -42,6 +42,11 @@ public ADXRS450Swerve()
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/AnalogGyroSwerve.java b/src/main/java/swervelib/imu/AnalogGyroSwerve.java
index 01ce760e5..b5450f55f 100644
--- a/src/main/java/swervelib/imu/AnalogGyroSwerve.java
+++ b/src/main/java/swervelib/imu/AnalogGyroSwerve.java
@@ -49,6 +49,11 @@ public AnalogGyroSwerve(int channel)
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/NavXSwerve.java b/src/main/java/swervelib/imu/NavXSwerve.java
index c032d6c50..b0f837b4c 100644
--- a/src/main/java/swervelib/imu/NavXSwerve.java
+++ b/src/main/java/swervelib/imu/NavXSwerve.java
@@ -60,6 +60,10 @@ public NavXSwerve(NavXComType port)
}
}
+ @Override
+ public void close() {
+ imu.close();
+ }
/**
* Reset offset to current gyro reading. Does not call NavX({@link AHRS#reset()}) because it has been reported to be
diff --git a/src/main/java/swervelib/imu/Pigeon2Swerve.java b/src/main/java/swervelib/imu/Pigeon2Swerve.java
index 3f59502f8..7d4af3adf 100644
--- a/src/main/java/swervelib/imu/Pigeon2Swerve.java
+++ b/src/main/java/swervelib/imu/Pigeon2Swerve.java
@@ -85,6 +85,12 @@ public Pigeon2Swerve(int canid)
this(canid, "");
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
+
/**
* Reset {@link Pigeon2} to factory default.
*/
diff --git a/src/main/java/swervelib/imu/PigeonSwerve.java b/src/main/java/swervelib/imu/PigeonSwerve.java
index b844d03d2..f6cfe3c36 100644
--- a/src/main/java/swervelib/imu/PigeonSwerve.java
+++ b/src/main/java/swervelib/imu/PigeonSwerve.java
@@ -45,6 +45,12 @@ public PigeonSwerve(int canid)
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/PigeonViaTalonSRXSwerve.java b/src/main/java/swervelib/imu/PigeonViaTalonSRXSwerve.java
index 9d1b9f4ea..a92e4c395 100644
--- a/src/main/java/swervelib/imu/PigeonViaTalonSRXSwerve.java
+++ b/src/main/java/swervelib/imu/PigeonViaTalonSRXSwerve.java
@@ -54,6 +54,11 @@ public PigeonViaTalonSRXSwerve(int canid)
SmartDashboard.putData(imu);
}
+ @Override
+ public void close() {
+ imu.close();
+ }
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/imu/SwerveIMU.java b/src/main/java/swervelib/imu/SwerveIMU.java
index 9af3cc6e3..d16999b77 100644
--- a/src/main/java/swervelib/imu/SwerveIMU.java
+++ b/src/main/java/swervelib/imu/SwerveIMU.java
@@ -8,9 +8,12 @@
/**
* Swerve IMU abstraction to define a standard interface with a swerve drive.
*/
-public abstract class SwerveIMU
+public abstract class SwerveIMU implements AutoCloseable
{
+ @Override
+ public abstract void close();
+
/**
* Reset IMU to factory default.
*/
diff --git a/src/main/java/swervelib/motors/SparkFlexSwerve.java b/src/main/java/swervelib/motors/SparkFlexSwerve.java
index 75c16fd25..fe273e438 100644
--- a/src/main/java/swervelib/motors/SparkFlexSwerve.java
+++ b/src/main/java/swervelib/motors/SparkFlexSwerve.java
@@ -129,6 +129,11 @@ private void configureSparkFlex(Supplier