package swervelib.encoders; import com.revrobotics.AbsoluteEncoder; import com.revrobotics.CANSparkMax; import com.revrobotics.SparkMaxAbsoluteEncoder.Type; import swervelib.motors.SwerveMotor; /** * SparkMax absolute encoder, attached through the data port. */ public class SparkMaxEncoderSwerve extends SwerveAbsoluteEncoder { /** * The {@link AbsoluteEncoder} representing the duty cycle encoder attached to the SparkMax. */ public AbsoluteEncoder encoder; /** * Create the {@link AbsoluteEncoder} object as a duty cycle. from the {@link CANSparkMax} motor. * * @param motor Motor to create the encoder from. */ public SparkMaxEncoderSwerve(SwerveMotor motor) { if (motor.getMotor() instanceof CANSparkMax) { encoder = ((CANSparkMax) motor.getMotor()).getAbsoluteEncoder(Type.kDutyCycle); } else { throw new RuntimeException("Motor given to instantiate SparkMaxEncoder is not a CANSparkMax"); } } /** * Reset the encoder to factory defaults. */ @Override public void factoryDefault() { // Do nothing } /** * Clear sticky faults on the encoder. */ @Override public void clearStickyFaults() { // Do nothing } /** * Configure the absolute encoder to read from [0, 360) per second. * * @param inverted Whether the encoder is inverted. */ @Override public void configure(boolean inverted) { encoder.setInverted(inverted); } /** * Get the absolute position of the encoder. * * @return Absolute position in degrees from [0, 360). */ @Override public double getAbsolutePosition() { return encoder.getPosition(); } /** * Get the instantiated absolute encoder Object. * * @return Absolute encoder object. */ @Override public Object getAbsoluteEncoder() { return encoder; } }