Convert y2014 over to use the new SensorReader class

Another step in converting to event loops.

Change-Id: I1faa643596128b53e1ab166abcf74c8d72fe039b
diff --git a/frc971/wpilib/sensor_reader.cc b/frc971/wpilib/sensor_reader.cc
index 6ce1995..dc33698 100644
--- a/frc971/wpilib/sensor_reader.cc
+++ b/frc971/wpilib/sensor_reader.cc
@@ -53,7 +53,7 @@
 
 void SensorReader::set_pwm_trigger(
     ::std::unique_ptr<frc::DigitalInput> pwm_trigger) {
-  medium_encoder_filter_.Add(pwm_trigger.get());
+  fast_encoder_filter_.Add(pwm_trigger.get());
   pwm_trigger_ = ::std::move(pwm_trigger);
 }
 
@@ -129,7 +129,9 @@
 
   int32_t my_pid = getpid();
 
+  Start();
   dma_synchronizer_->Start();
+
   if (pwm_trigger_) {
     last_period_ = chrono::microseconds(5050);
     LOG(INFO, "Using PWM trigger and a 5.05 ms period\n");
@@ -159,6 +161,7 @@
     ::frc971::wpilib::SendRobotState(my_pid);
     RunIteration();
     dma_synchronizer_->RunIteration();
+    RunDmaIteration();
 
     if (pwm_trigger_) {
       monotonic_clock::time_point last_tick_timepoint;
@@ -181,6 +184,7 @@
       phased_loop.set_interval_and_offset(period, new_offset);
     }
   }
+
   if (pwm_trigger_) {
     pwm_detecter_thread.join();
   }
diff --git a/frc971/wpilib/sensor_reader.h b/frc971/wpilib/sensor_reader.h
index 0ce203c..47ca95c 100644
--- a/frc971/wpilib/sensor_reader.h
+++ b/frc971/wpilib/sensor_reader.h
@@ -20,6 +20,7 @@
 class SensorReader {
  public:
   SensorReader();
+  virtual ~SensorReader() {}
 
   // Updates the fast and medium encoder filter frequencies.
   void UpdateFastEncoderFilterHz(int hz);
@@ -34,6 +35,10 @@
   // Sets the dma.
   void set_dma(::std::unique_ptr<DMA> dma);
 
+  void AddToDMA(DMASampleHandlerInterface *handler) {
+    dma_synchronizer_->Add(handler);
+  }
+
   // Sets the pwm trigger.
   void set_pwm_trigger(::std::unique_ptr<frc::DigitalInput> pwm_trigger);
 
@@ -41,6 +46,7 @@
   void Quit() { run_ = false; }
 
   virtual void RunIteration() = 0;
+  virtual void RunDmaIteration() {}
 
   void operator()();
 
@@ -51,6 +57,9 @@
       drivetrain_right_encoder_;
 
  private:
+  // Gets called right before the DMA synchronizer is up and running.
+  virtual void Start() {}
+
   // Uses the pwm trigger to find the pwm cycle width and offset for that
   // iteration.
   void RunPWMDetecter();