From a75d2666401ee9f031a0b0faf248317b48ed00a9 Mon Sep 17 00:00:00 2001 From: Bradley Bickford Date: Wed, 11 Mar 2026 07:59:17 -0400 Subject: [PATCH] A number of changes to accomodate some encoder stuff --- .../iocore/abstracts/BooleanSensorIO.java | 9 -- .../iocore/abstracts/DoubleSensorIO.java | 21 --- .../team2648/iocore/abstracts/EncoderIO.java | 11 ++ .../{MotorIO.java => MotorControllerIO.java} | 15 +- .../commons/CommonMotorControllerConfig.java | 19 +++ .../iocore/config/CommonMotorConfig.java | 19 --- .../enums/MotorControllerEncoderType.java | 7 + .../realio/REVLIBAbsoluteEncoderIO.java | 29 ++++ .../realio/REVLIBRelativeEncoderIO.java | 30 ++++ .../team2648/iocore/realio/VictorSPIO.java | 16 ++- vendordeps/REVLib.json | 133 ++++++++++++++++++ 11 files changed, 249 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/com/team2648/iocore/abstracts/BooleanSensorIO.java delete mode 100644 src/main/java/com/team2648/iocore/abstracts/DoubleSensorIO.java create mode 100644 src/main/java/com/team2648/iocore/abstracts/EncoderIO.java rename src/main/java/com/team2648/iocore/abstracts/{MotorIO.java => MotorControllerIO.java} (58%) create mode 100644 src/main/java/com/team2648/iocore/commons/CommonMotorControllerConfig.java delete mode 100644 src/main/java/com/team2648/iocore/config/CommonMotorConfig.java create mode 100644 src/main/java/com/team2648/iocore/enums/MotorControllerEncoderType.java create mode 100644 src/main/java/com/team2648/iocore/realio/REVLIBAbsoluteEncoderIO.java create mode 100644 src/main/java/com/team2648/iocore/realio/REVLIBRelativeEncoderIO.java create mode 100644 vendordeps/REVLib.json diff --git a/src/main/java/com/team2648/iocore/abstracts/BooleanSensorIO.java b/src/main/java/com/team2648/iocore/abstracts/BooleanSensorIO.java deleted file mode 100644 index 5818c28..0000000 --- a/src/main/java/com/team2648/iocore/abstracts/BooleanSensorIO.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.team2648.iocore.abstracts; - -public abstract class BooleanSensorIO extends IOBase { - public BooleanSensorIO(String sensorTypeName) { - super("Sensors/Booleans/" + sensorTypeName); - } - - public abstract boolean get(); -} diff --git a/src/main/java/com/team2648/iocore/abstracts/DoubleSensorIO.java b/src/main/java/com/team2648/iocore/abstracts/DoubleSensorIO.java deleted file mode 100644 index 727ea6a..0000000 --- a/src/main/java/com/team2648/iocore/abstracts/DoubleSensorIO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.team2648.iocore.abstracts; - -import edu.wpi.first.units.Unit; - -public abstract class DoubleSensorIO extends IOBase { - private T unitReference; - - public DoubleSensorIO(String sensorTypeName, T unitReference) { - super("Sensors/Doubles/" + sensorTypeName); - - this.unitReference = unitReference; - } - - public abstract double get(); - - @SuppressWarnings("unchecked") - public T getMeasure() { - return (T) unitReference.of(get()); - } - -} diff --git a/src/main/java/com/team2648/iocore/abstracts/EncoderIO.java b/src/main/java/com/team2648/iocore/abstracts/EncoderIO.java new file mode 100644 index 0000000..704932a --- /dev/null +++ b/src/main/java/com/team2648/iocore/abstracts/EncoderIO.java @@ -0,0 +1,11 @@ +package com.team2648.iocore.abstracts; + +public abstract class EncoderIO extends IOBase { + public EncoderIO(String encoderTypeName) { + super("Encoders/" + encoderTypeName); + } + + public abstract double getPosition(); + public abstract double getVelocity(); + public abstract void setPosition(double position); +} diff --git a/src/main/java/com/team2648/iocore/abstracts/MotorIO.java b/src/main/java/com/team2648/iocore/abstracts/MotorControllerIO.java similarity index 58% rename from src/main/java/com/team2648/iocore/abstracts/MotorIO.java rename to src/main/java/com/team2648/iocore/abstracts/MotorControllerIO.java index 9d79576..edf532a 100644 --- a/src/main/java/com/team2648/iocore/abstracts/MotorIO.java +++ b/src/main/java/com/team2648/iocore/abstracts/MotorControllerIO.java @@ -3,9 +3,10 @@ package com.team2648.iocore.abstracts; import java.util.List; import java.util.function.DoubleSupplier; -import com.team2648.iocore.config.CommonMotorConfig; +import com.team2648.iocore.commons.CommonMotorControllerConfig; +import com.team2648.iocore.enums.MotorControllerEncoderType; -public abstract class MotorIO extends IOBase { +public abstract class MotorControllerIO extends IOBase { public enum ControlTypes { kDutyCycle, kPIDPosition, @@ -14,12 +15,12 @@ public abstract class MotorIO extends IOBase { private List supportedControlTypes; - public MotorIO(String motorTypeName, ControlTypes... supportedControlTypes) { + public MotorControllerIO(String motorTypeName, ControlTypes... supportedControlTypes) { this(motorTypeName, List.of(supportedControlTypes)); } - public MotorIO(String motorTypeName, List supportedControlTypes) { - super("Motor/" + motorTypeName); + public MotorControllerIO(String motorTypeName, List supportedControlTypes) { + super("/Motor/" + motorTypeName); this.supportedControlTypes = supportedControlTypes; } @@ -30,11 +31,13 @@ public abstract class MotorIO extends IOBase { return supportedControlTypes.stream().anyMatch((t) -> t.equals(type)); } - public abstract void applyConfig(CommonMotorConfig config); + public abstract void applyConfig(CommonMotorControllerConfig config); public void run(ControlTypes type, DoubleSupplier controlValueSource) { run(type, controlValueSource.getAsDouble()); } public abstract void run(ControlTypes type, double controlValue); + + public abstract EncoderIO getEncoder(MotorControllerEncoderType type); } diff --git a/src/main/java/com/team2648/iocore/commons/CommonMotorControllerConfig.java b/src/main/java/com/team2648/iocore/commons/CommonMotorControllerConfig.java new file mode 100644 index 0000000..6f5c1f5 --- /dev/null +++ b/src/main/java/com/team2648/iocore/commons/CommonMotorControllerConfig.java @@ -0,0 +1,19 @@ +package com.team2648.iocore.commons; + +public class CommonMotorControllerConfig { + private boolean isInverted; + + public CommonMotorControllerConfig() { + + } + + public boolean isInverted() { + return isInverted; + } + + public CommonMotorControllerConfig setInverted(boolean inverted) { + this.isInverted = inverted; + + return this; + } +} diff --git a/src/main/java/com/team2648/iocore/config/CommonMotorConfig.java b/src/main/java/com/team2648/iocore/config/CommonMotorConfig.java deleted file mode 100644 index 33f6781..0000000 --- a/src/main/java/com/team2648/iocore/config/CommonMotorConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.team2648.iocore.config; - -public class CommonMotorConfig { - private boolean isInverted; - - public CommonMotorConfig() { - - } - - public boolean isInverted() { - return isInverted; - } - - public CommonMotorConfig setInverted(boolean inverted) { - this.isInverted = inverted; - - return this; - } -} diff --git a/src/main/java/com/team2648/iocore/enums/MotorControllerEncoderType.java b/src/main/java/com/team2648/iocore/enums/MotorControllerEncoderType.java new file mode 100644 index 0000000..98a3d77 --- /dev/null +++ b/src/main/java/com/team2648/iocore/enums/MotorControllerEncoderType.java @@ -0,0 +1,7 @@ +package com.team2648.iocore.enums; + +public enum MotorControllerEncoderType { + kInternal, + kAbsolute, + kExternal; +} diff --git a/src/main/java/com/team2648/iocore/realio/REVLIBAbsoluteEncoderIO.java b/src/main/java/com/team2648/iocore/realio/REVLIBAbsoluteEncoderIO.java new file mode 100644 index 0000000..84bfab1 --- /dev/null +++ b/src/main/java/com/team2648/iocore/realio/REVLIBAbsoluteEncoderIO.java @@ -0,0 +1,29 @@ +package com.team2648.iocore.realio; + +import com.revrobotics.AbsoluteEncoder; +import com.team2648.iocore.abstracts.EncoderIO; + +public class REVLIBAbsoluteEncoderIO extends EncoderIO { + private AbsoluteEncoder encoder; + + public REVLIBAbsoluteEncoderIO(String name, AbsoluteEncoder encoder) { + super("/REVLIB/Absolute/" + name); + + this.encoder = encoder; + } + + @Override + public double getPosition() { + return encoder.getPosition(); + } + + @Override + public double getVelocity() { + return encoder.getVelocity(); + } + + @Override + public void setPosition(double position) { + throw new UnsupportedOperationException("The position of an absolute encoder is not resettable"); + } +} diff --git a/src/main/java/com/team2648/iocore/realio/REVLIBRelativeEncoderIO.java b/src/main/java/com/team2648/iocore/realio/REVLIBRelativeEncoderIO.java new file mode 100644 index 0000000..0c630bf --- /dev/null +++ b/src/main/java/com/team2648/iocore/realio/REVLIBRelativeEncoderIO.java @@ -0,0 +1,30 @@ +package com.team2648.iocore.realio; + +import com.revrobotics.RelativeEncoder; +import com.team2648.iocore.abstracts.EncoderIO; + +public class REVLIBRelativeEncoderIO extends EncoderIO { + private RelativeEncoder encoder; + + public REVLIBRelativeEncoderIO(String name, RelativeEncoder encoder) { + super("/REVLIB/Relative/" + name); + + this.encoder = encoder; + } + + @Override + public double getPosition() { + return encoder.getPosition(); + } + + @Override + public double getVelocity() { + return encoder.getVelocity(); + } + + @Override + public void setPosition(double position) { + encoder.setPosition(position); + } + +} diff --git a/src/main/java/com/team2648/iocore/realio/VictorSPIO.java b/src/main/java/com/team2648/iocore/realio/VictorSPIO.java index 39c6e99..eb1d6ef 100644 --- a/src/main/java/com/team2648/iocore/realio/VictorSPIO.java +++ b/src/main/java/com/team2648/iocore/realio/VictorSPIO.java @@ -1,14 +1,16 @@ package com.team2648.iocore.realio; -import com.team2648.iocore.abstracts.MotorIO; -import com.team2648.iocore.config.CommonMotorConfig; +import com.team2648.iocore.abstracts.EncoderIO; +import com.team2648.iocore.abstracts.MotorControllerIO; +import com.team2648.iocore.commons.CommonMotorControllerConfig; +import com.team2648.iocore.enums.MotorControllerEncoderType; import com.team2648.iocore.interfaces.PWMFollowableMotor; import edu.wpi.first.wpilibj.RobotController; import edu.wpi.first.wpilibj.motorcontrol.PWMMotorController; import edu.wpi.first.wpilibj.motorcontrol.VictorSP; -public class VictorSPIO extends MotorIO implements PWMFollowableMotor{ +public class VictorSPIO extends MotorControllerIO implements PWMFollowableMotor{ private VictorSP motor; public VictorSPIO(String motorName, int pwmPort) { @@ -23,7 +25,7 @@ public class VictorSPIO extends MotorIO implements PWMFollowableMotor{ } @Override - public void applyConfig(CommonMotorConfig config) { + public void applyConfig(CommonMotorControllerConfig config) { motor.setInverted(config.isInverted()); } @@ -47,5 +49,9 @@ public class VictorSPIO extends MotorIO implements PWMFollowableMotor{ public PWMMotorController getControllerObject() { return motor; } - + + @Override + public EncoderIO getEncoder(MotorControllerEncoderType type) { + throw new UnsupportedOperationException("VictorSP does not support any encoder type"); + } } diff --git a/vendordeps/REVLib.json b/vendordeps/REVLib.json new file mode 100644 index 0000000..e8196c3 --- /dev/null +++ b/vendordeps/REVLib.json @@ -0,0 +1,133 @@ +{ + "fileName": "REVLib.json", + "name": "REVLib", + "version": "2026.0.4", + "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.4" + } + ], + "jniDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-driver", + "version": "2026.0.4", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibBackendDriver", + "version": "2026.0.4", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.4", + "skipInvalidPlatforms": true, + "isJar": false, + "validPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ], + "cppDependencies": [ + { + "groupId": "com.revrobotics.frc", + "artifactId": "REVLib-cpp", + "version": "2026.0.4", + "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.4", + "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.4", + "libName": "BackendDriver", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + }, + { + "groupId": "com.revrobotics.frc", + "artifactId": "RevLibWpiBackendDriver", + "version": "2026.0.4", + "libName": "REVLibWpi", + "sharedLibrary": true, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxarm64", + "linuxx86-64", + "linuxathena", + "linuxarm32", + "osxuniversal" + ] + } + ] +} \ No newline at end of file