Added DMA and DMA synchronizer.

Pulled the dma setters out of year specific.

Change-Id: I4e797df52aa07edb5515f941113e7b43747622c9
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index 910de08..00cd77d 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -287,9 +287,11 @@
     ],
     restricted_to = ["//tools:roborio"],
     deps = [
-        "//aos:init",
-        "//aos/time:time",
         "//aos/stl_mutex",
+        "//aos/time:time",
+        "//aos:init",
         "//third_party:wpilib",
+        ":dma",
+        ":dma_edge_counting",
     ],
 )
diff --git a/frc971/wpilib/sensor_reader.cc b/frc971/wpilib/sensor_reader.cc
index f2123a1..38989a4 100644
--- a/frc971/wpilib/sensor_reader.cc
+++ b/frc971/wpilib/sensor_reader.cc
@@ -10,6 +10,11 @@
 
 SensorReader::SensorReader() {}
 
+void SensorReader::set_dma(::std::unique_ptr<DMA> dma) {
+  dma_synchronizer_.reset(
+      new ::frc971::wpilib::DMASynchronizer(::std::move(dma)));
+}
+
 void SensorReader::set_pwm_trigger(
     ::std::unique_ptr<frc::DigitalInput> pwm_trigger) {
   medium_encoder_filter_.Add(pwm_trigger.get());
diff --git a/frc971/wpilib/sensor_reader.h b/frc971/wpilib/sensor_reader.h
index 23646f1..a5c90ac 100644
--- a/frc971/wpilib/sensor_reader.h
+++ b/frc971/wpilib/sensor_reader.h
@@ -8,6 +8,8 @@
 #include "aos/time/time.h"
 #include "frc971/wpilib/ahal/DigitalGlitchFilter.h"
 #include "frc971/wpilib/ahal/DigitalInput.h"
+#include "frc971/wpilib/dma.h"
+#include "frc971/wpilib/dma_edge_counting.h"
 
 using ::aos::monotonic_clock;
 namespace chrono = ::std::chrono;
@@ -19,6 +21,10 @@
  public:
   SensorReader();
 
+  // All of the DMA-related set_* calls must be made before this, and it
+  // doesn't hurt to do all of them.
+  void set_dma(::std::unique_ptr<DMA> dma);
+
   void set_pwm_trigger(::std::unique_ptr<frc::DigitalInput> pwm_trigger);
 
  protected:
@@ -35,6 +41,8 @@
       monotonic_clock::min_time;
   chrono::nanoseconds last_period_ = chrono::microseconds(5050);
 
+  ::std::unique_ptr<::frc971::wpilib::DMASynchronizer> dma_synchronizer_;
+
   ::std::atomic<bool> run_{true};
 };
 
diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index 2483f40..b362487 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -32,7 +32,6 @@
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "frc971/wpilib/ADIS16448.h"
 #include "frc971/wpilib/dma.h"
-#include "frc971/wpilib/dma_edge_counting.h"
 #include "frc971/wpilib/encoder_and_potentiometer.h"
 #include "frc971/wpilib/joystick_sender.h"
 #include "frc971/wpilib/logging.q.h"
@@ -129,13 +128,6 @@
     drivetrain_right_encoder_ = ::std::move(encoder);
   }
 
-  // All of the DMA-related set_* calls must be made before this, and it
-  // doesn't hurt to do all of them.
-  void set_dma(::std::unique_ptr<DMA> dma) {
-    dma_synchronizer_.reset(
-        new ::frc971::wpilib::DMASynchronizer(::std::move(dma)));
-  }
-
   void operator()() {
     ::aos::SetCurrentThreadName("SensorReader");
 
@@ -214,8 +206,6 @@
 
   int32_t my_pid_;
 
-  ::std::unique_ptr<::frc971::wpilib::DMASynchronizer> dma_synchronizer_;
-
   ::std::unique_ptr<frc::Encoder> drivetrain_left_encoder_,
       drivetrain_right_encoder_;
 };