Add a DMAAbsoluteEncoderAndPotentiometer subsystem
This lets us use AbsoluteEncoderAndPotentiometer with a DMA absolute_pwm
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: I44a402688fd15e945d8bbf9535d0c126408f9f50
diff --git a/frc971/wpilib/sensor_reader.h b/frc971/wpilib/sensor_reader.h
index 455ed0e..da650a5 100644
--- a/frc971/wpilib/sensor_reader.h
+++ b/frc971/wpilib/sensor_reader.h
@@ -102,6 +102,27 @@
encoder_ratio * (2.0 * M_PI));
}
+ void CopyPosition(
+ const ::frc971::wpilib::DMAAbsoluteEncoderAndPotentiometer &encoder,
+ ::frc971::PotAndAbsolutePositionStatic *position,
+ double encoder_counts_per_revolution, double encoder_ratio,
+ ::std::function<double(double)> potentiometer_translate, bool reverse,
+ double pot_offset) {
+ const double multiplier = reverse ? -1.0 : 1.0;
+ position->set_pot(multiplier * potentiometer_translate(
+ encoder.ReadPotentiometerVoltage()) +
+ pot_offset);
+ position->set_encoder(multiplier *
+ encoder_translate(encoder.ReadRelativeEncoder(),
+ encoder_counts_per_revolution,
+ encoder_ratio));
+
+ position->set_absolute_encoder((reverse
+ ? (1.0 - encoder.ReadAbsoluteEncoder())
+ : encoder.ReadAbsoluteEncoder()) *
+ encoder_ratio * (2.0 * M_PI));
+ }
+
// Copies an AbsoluteEncoderAndPotentiometer to an AbsoluteAndAbsolutePosition
// with the correct unit and direction changes.
void CopyPosition(const ::frc971::wpilib::AbsoluteAndAbsoluteEncoder &encoder,