Added y2018 wpilib_interface, and constants
Change-Id: I9499fc4fbb34434372583e8e2a572740b60a4715
diff --git a/y2017/wpilib_interface.cc b/y2017/wpilib_interface.cc
index 659f11c..158f7a1 100644
--- a/y2017/wpilib_interface.cc
+++ b/y2017/wpilib_interface.cc
@@ -125,70 +125,6 @@
static_assert(kMaxSlowEncoderPulsesPerSecond < kMaxMediumEncoderPulsesPerSecond,
"slow encoders are faster than medium?");
-// Handles reading the duty cycle on a DigitalInput.
-class DutyCycleReader {
- public:
- void set_input(::std::unique_ptr<DigitalInput> input) {
- high_counter_.reset(new Counter(input.get()));
- high_counter_->SetMaxPeriod(kMaxPeriod);
- high_counter_->SetSemiPeriodMode(true);
-
- period_length_counter_.reset(new Counter(input.get()));
- period_length_counter_->SetMaxPeriod(kMaxPeriod);
- period_length_counter_->SetUpSourceEdge(true, false);
-
- input_ = ::std::move(input);
- }
-
- double Read() const {
- const double high_time = high_counter_->GetPeriod();
- const double period_length = period_length_counter_->GetPeriod();
- if (!::std::isfinite(high_time) || !::std::isfinite(period_length)) {
- return ::std::numeric_limits<double>::quiet_NaN();
- }
- return high_time / period_length;
- }
-
- private:
- static constexpr ::std::chrono::nanoseconds kNominalPeriod =
- ::std::chrono::microseconds(4096);
- static constexpr double kMaxPeriod =
- (::std::chrono::duration_cast<::std::chrono::duration<double>>(
- kNominalPeriod) *
- 2).count();
-
- ::std::unique_ptr<Counter> high_counter_, period_length_counter_;
- ::std::unique_ptr<DigitalInput> input_;
-};
-
-class AbsoluteEncoderAndPotentiometer {
- public:
- void set_absolute_pwm(::std::unique_ptr<DigitalInput> input) {
- duty_cycle_.set_input(::std::move(input));
- }
-
- void set_encoder(::std::unique_ptr<Encoder> encoder) {
- encoder_ = ::std::move(encoder);
- }
-
- void set_potentiometer(::std::unique_ptr<AnalogInput> potentiometer) {
- potentiometer_ = ::std::move(potentiometer);
- }
-
- double ReadAbsoluteEncoder() const { return duty_cycle_.Read(); }
-
- int32_t ReadRelativeEncoder() const { return encoder_->GetRaw(); }
-
- double ReadPotentiometerVoltage() const {
- return potentiometer_->GetVoltage();
- }
-
- private:
- DutyCycleReader duty_cycle_;
- ::std::unique_ptr<Encoder> encoder_;
- ::std::unique_ptr<AnalogInput> potentiometer_;
-};
-
// Class to send position messages with sensor readings to our loops.
class SensorReader {
public:
@@ -492,11 +428,12 @@
position->index_pulses = encoder.index_posedge_count();
}
- void CopyPosition(const AbsoluteEncoderAndPotentiometer &encoder,
- ::frc971::PotAndAbsolutePosition *position,
- double encoder_counts_per_revolution, double encoder_ratio,
- ::std::function<double(double)> potentiometer_translate,
- bool reverse, double pot_offset) {
+ void CopyPosition(
+ const ::frc971::wpilib::AbsoluteEncoderAndPotentiometer &encoder,
+ ::frc971::PotAndAbsolutePosition *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->pot = multiplier * potentiometer_translate(
encoder.ReadPotentiometerVoltage()) +
@@ -551,7 +488,7 @@
::std::unique_ptr<Encoder> drivetrain_left_encoder_,
drivetrain_right_encoder_;
- AbsoluteEncoderAndPotentiometer intake_encoder_;
+ ::frc971::wpilib::AbsoluteEncoderAndPotentiometer intake_encoder_;
::std::unique_ptr<Encoder> indexer_encoder_;
::std::unique_ptr<DigitalInput> indexer_hall_;