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_;