Added ahal

This is a formatted copy of WPILib's default user-visible C++ API, with
a bit of completely unnecessary functionality stripped out. Most of the
stripping so far is only related to weird threading decisions.

Change-Id: Icbfd949b48cd115561862cb909bcc572aba0e753
diff --git a/y2018/wpilib_interface.cc b/y2018/wpilib_interface.cc
index b4ee168..0493bb5 100644
--- a/y2018/wpilib_interface.cc
+++ b/y2018/wpilib_interface.cc
@@ -10,14 +10,14 @@
 #include <mutex>
 #include <thread>
 
-#include "AnalogInput.h"
-#include "Counter.h"
-#include "DigitalGlitchFilter.h"
-#include "DriverStation.h"
-#include "Encoder.h"
-#include "Relay.h"
-#include "Servo.h"
-#include "VictorSP.h"
+#include "frc971/wpilib/ahal/AnalogInput.h"
+#include "frc971/wpilib/ahal/Counter.h"
+#include "frc971/wpilib/ahal/DigitalGlitchFilter.h"
+#include "frc971/wpilib/ahal/DriverStation.h"
+#include "frc971/wpilib/ahal/Encoder.h"
+#include "frc971/wpilib/ahal/Relay.h"
+#include "frc971/wpilib/ahal/Servo.h"
+#include "frc971/wpilib/ahal/VictorSP.h"
 #include "ctre/phoenix/CANifier.h"
 #undef ERROR
 
@@ -169,126 +169,133 @@
   }
 
   // Left drivetrain side.
-  void set_drivetrain_left_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_drivetrain_left_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     fast_encoder_filter_.Add(encoder.get());
     drivetrain_left_encoder_ = ::std::move(encoder);
   }
 
   void set_left_drivetrain_shifter_potentiometer(
-      ::std::unique_ptr<AnalogInput> potentiometer) {
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     left_drivetrain_shifter_ = ::std::move(potentiometer);
   }
 
   // Right drivetrain side.
-  void set_drivetrain_right_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_drivetrain_right_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     fast_encoder_filter_.Add(encoder.get());
     drivetrain_right_encoder_ = ::std::move(encoder);
   }
 
   void set_right_drivetrain_shifter_potentiometer(
-      ::std::unique_ptr<AnalogInput> potentiometer) {
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     right_drivetrain_shifter_ = ::std::move(potentiometer);
   }
 
   // Proximal joint.
-  void set_proximal_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_proximal_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     medium_encoder_filter_.Add(encoder.get());
     proximal_encoder_.set_encoder(::std::move(encoder));
   }
 
-  void set_proximal_absolute_pwm(::std::unique_ptr<DigitalInput> absolute_pwm) {
+  void set_proximal_absolute_pwm(
+      ::std::unique_ptr<frc::DigitalInput> absolute_pwm) {
     proximal_encoder_.set_absolute_pwm(::std::move(absolute_pwm));
   }
 
   void set_proximal_potentiometer(
-      ::std::unique_ptr<AnalogInput> potentiometer) {
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     proximal_encoder_.set_potentiometer(::std::move(potentiometer));
   }
 
   // Distal joint.
-  void set_distal_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_distal_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     medium_encoder_filter_.Add(encoder.get());
     distal_encoder_.set_encoder(::std::move(encoder));
   }
 
-  void set_distal_absolute_pwm(::std::unique_ptr<DigitalInput> absolute_pwm) {
+  void set_distal_absolute_pwm(
+      ::std::unique_ptr<frc::DigitalInput> absolute_pwm) {
     fast_encoder_filter_.Add(absolute_pwm.get());
     distal_encoder_.set_absolute_pwm(::std::move(absolute_pwm));
   }
 
-  void set_distal_potentiometer(::std::unique_ptr<AnalogInput> potentiometer) {
+  void set_distal_potentiometer(
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     distal_encoder_.set_potentiometer(::std::move(potentiometer));
   }
 
   // Left intake side.
-  void set_left_intake_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_left_intake_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     fast_encoder_filter_.Add(encoder.get());
     left_intake_encoder_.set_encoder(::std::move(encoder));
   }
 
   void set_left_intake_absolute_pwm(
-      ::std::unique_ptr<DigitalInput> absolute_pwm) {
+      ::std::unique_ptr<frc::DigitalInput> absolute_pwm) {
     fast_encoder_filter_.Add(absolute_pwm.get());
     left_intake_encoder_.set_absolute_pwm(::std::move(absolute_pwm));
   }
 
   void set_left_intake_potentiometer(
-      ::std::unique_ptr<AnalogInput> potentiometer) {
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     left_intake_encoder_.set_potentiometer(::std::move(potentiometer));
   }
 
-  void set_left_intake_spring_angle(::std::unique_ptr<AnalogInput> encoder) {
+  void set_left_intake_spring_angle(
+      ::std::unique_ptr<frc::AnalogInput> encoder) {
     left_intake_spring_angle_ = ::std::move(encoder);
   }
 
-  void set_left_intake_cube_detector(::std::unique_ptr<DigitalInput> input) {
+  void set_left_intake_cube_detector(
+      ::std::unique_ptr<frc::DigitalInput> input) {
     left_intake_cube_detector_ = ::std::move(input);
   }
 
   // Right intake side.
-  void set_right_intake_encoder(::std::unique_ptr<Encoder> encoder) {
+  void set_right_intake_encoder(::std::unique_ptr<frc::Encoder> encoder) {
     fast_encoder_filter_.Add(encoder.get());
     right_intake_encoder_.set_encoder(::std::move(encoder));
   }
 
   void set_right_intake_absolute_pwm(
-      ::std::unique_ptr<DigitalInput> absolute_pwm) {
+      ::std::unique_ptr<frc::DigitalInput> absolute_pwm) {
     fast_encoder_filter_.Add(absolute_pwm.get());
     right_intake_encoder_.set_absolute_pwm(::std::move(absolute_pwm));
   }
 
   void set_right_intake_potentiometer(
-      ::std::unique_ptr<AnalogInput> potentiometer) {
+      ::std::unique_ptr<frc::AnalogInput> potentiometer) {
     right_intake_encoder_.set_potentiometer(::std::move(potentiometer));
   }
 
-  void set_right_intake_spring_angle(::std::unique_ptr<AnalogInput> encoder) {
+  void set_right_intake_spring_angle(
+      ::std::unique_ptr<frc::AnalogInput> encoder) {
     right_intake_spring_angle_ = ::std::move(encoder);
   }
 
-  void set_right_intake_cube_detector(::std::unique_ptr<DigitalInput> input) {
+  void set_right_intake_cube_detector(
+      ::std::unique_ptr<frc::DigitalInput> input) {
     right_intake_cube_detector_ = ::std::move(input);
   }
 
-  void set_claw_beambreak(::std::unique_ptr<DigitalInput> input) {
+  void set_claw_beambreak(::std::unique_ptr<frc::DigitalInput> input) {
     claw_beambreak_ = ::std::move(input);
   }
 
-  void set_box_back_beambreak(::std::unique_ptr<DigitalInput> input) {
+  void set_box_back_beambreak(::std::unique_ptr<frc::DigitalInput> input) {
     box_back_beambreak_ = ::std::move(input);
   }
 
   // Auto mode switches.
-  void set_autonomous_mode(int i, ::std::unique_ptr<DigitalInput> sensor) {
+  void set_autonomous_mode(int i, ::std::unique_ptr<frc::DigitalInput> sensor) {
     autonomous_modes_.at(i) = ::std::move(sensor);
   }
 
-  void set_pwm_trigger(::std::unique_ptr<DigitalInput> pwm_trigger) {
+  void set_pwm_trigger(::std::unique_ptr<frc::DigitalInput> pwm_trigger) {
     medium_encoder_filter_.Add(pwm_trigger.get());
     pwm_trigger_ = ::std::move(pwm_trigger);
   }
 
-  void set_lidar_lite_input(::std::unique_ptr<DigitalInput> lidar_lite_input) {
+  void set_lidar_lite_input(::std::unique_ptr<frc::DigitalInput> lidar_lite_input) {
     lidar_lite_input_ = ::std::move(lidar_lite_input);
     lidar_lite_.set_input(lidar_lite_input_.get());
   }
@@ -313,17 +320,17 @@
 
     while (run_) {
       auto ret = pwm_trigger_->WaitForInterrupt(1.0, true);
-      if (ret == InterruptableSensorBase::WaitResult::kRisingEdge) {
+      if (ret == frc::InterruptableSensorBase::WaitResult::kRisingEdge) {
         // Grab all the clocks.
         const double pwm_fpga_time = pwm_trigger_->ReadRisingTimestamp();
 
         aos_compiler_memory_barrier();
-        const double fpga_time_before = GetFPGATime() * 1e-6;
+        const double fpga_time_before = frc::GetFPGATime() * 1e-6;
         aos_compiler_memory_barrier();
         const monotonic_clock::time_point monotonic_now =
             monotonic_clock::now();
         aos_compiler_memory_barrier();
-        const double fpga_time_after = GetFPGATime() * 1e-6;
+        const double fpga_time_after = frc::GetFPGATime() * 1e-6;
         aos_compiler_memory_barrier();
 
         const double fpga_offset =
@@ -545,13 +552,13 @@
 
   ::std::unique_ptr<::frc971::wpilib::DMASynchronizer> dma_synchronizer_;
 
-  DigitalGlitchFilter fast_encoder_filter_, medium_encoder_filter_,
+  frc::DigitalGlitchFilter fast_encoder_filter_, medium_encoder_filter_,
       hall_filter_;
 
-  ::std::unique_ptr<Encoder> drivetrain_left_encoder_,
+  ::std::unique_ptr<frc::Encoder> drivetrain_left_encoder_,
       drivetrain_right_encoder_;
 
-  ::std::unique_ptr<AnalogInput> left_drivetrain_shifter_,
+  ::std::unique_ptr<frc::AnalogInput> left_drivetrain_shifter_,
       right_drivetrain_shifter_;
 
   ::frc971::wpilib::AbsoluteEncoderAndPotentiometer proximal_encoder_,
@@ -560,19 +567,19 @@
   ::frc971::wpilib::AbsoluteEncoderAndPotentiometer left_intake_encoder_,
       right_intake_encoder_;
 
-  ::std::unique_ptr<AnalogInput> left_intake_spring_angle_,
+  ::std::unique_ptr<frc::AnalogInput> left_intake_spring_angle_,
       right_intake_spring_angle_;
-  ::std::unique_ptr<DigitalInput> left_intake_cube_detector_,
+  ::std::unique_ptr<frc::DigitalInput> left_intake_cube_detector_,
       right_intake_cube_detector_;
 
-  ::std::unique_ptr<DigitalInput> claw_beambreak_;
-  ::std::unique_ptr<DigitalInput> box_back_beambreak_;
+  ::std::unique_ptr<frc::DigitalInput> claw_beambreak_;
+  ::std::unique_ptr<frc::DigitalInput> box_back_beambreak_;
 
-  ::std::unique_ptr<DigitalInput> pwm_trigger_;
+  ::std::unique_ptr<frc::DigitalInput> pwm_trigger_;
 
-  ::std::array<::std::unique_ptr<DigitalInput>, 4> autonomous_modes_;
+  ::std::array<::std::unique_ptr<frc::DigitalInput>, 4> autonomous_modes_;
 
-  ::std::unique_ptr<DigitalInput> lidar_lite_input_;
+  ::std::unique_ptr<frc::DigitalInput> lidar_lite_input_;
   ::frc971::wpilib::DMAPulseWidthReader lidar_lite_;
 
   ::std::atomic<bool> run_{true};
@@ -870,9 +877,9 @@
 
 class WPILibRobot : public ::frc971::wpilib::WPILibRobotBase {
  public:
-  ::std::unique_ptr<Encoder> make_encoder(int index) {
-    return make_unique<Encoder>(10 + index * 2, 11 + index * 2, false,
-                                Encoder::k4X);
+  ::std::unique_ptr<frc::Encoder> make_encoder(int index) {
+    return make_unique<frc::Encoder>(10 + index * 2, 11 + index * 2, false,
+                                     frc::Encoder::k4X);
   }
 
   void Run() override {
@@ -889,45 +896,46 @@
     // TODO(Sabina): Update port numbers(Sensors and Victors)
     reader.set_drivetrain_left_encoder(make_encoder(0));
     reader.set_left_drivetrain_shifter_potentiometer(
-        make_unique<AnalogInput>(6));
+        make_unique<frc::AnalogInput>(6));
     reader.set_drivetrain_right_encoder(make_encoder(1));
     reader.set_right_drivetrain_shifter_potentiometer(
-        make_unique<AnalogInput>(7));
+        make_unique<frc::AnalogInput>(7));
 
     reader.set_proximal_encoder(make_encoder(4));
-    reader.set_proximal_absolute_pwm(make_unique<DigitalInput>(2));
-    reader.set_proximal_potentiometer(make_unique<AnalogInput>(2));
+    reader.set_proximal_absolute_pwm(make_unique<frc::DigitalInput>(2));
+    reader.set_proximal_potentiometer(make_unique<frc::AnalogInput>(2));
 
     reader.set_distal_encoder(make_encoder(2));
-    reader.set_distal_absolute_pwm(make_unique<DigitalInput>(3));
-    reader.set_distal_potentiometer(make_unique<AnalogInput>(3));
+    reader.set_distal_absolute_pwm(make_unique<frc::DigitalInput>(3));
+    reader.set_distal_potentiometer(make_unique<frc::AnalogInput>(3));
 
     reader.set_right_intake_encoder(make_encoder(5));
-    reader.set_right_intake_absolute_pwm(make_unique<DigitalInput>(7));
-    reader.set_right_intake_potentiometer(make_unique<AnalogInput>(1));
-    reader.set_right_intake_spring_angle(make_unique<AnalogInput>(5));
-    reader.set_right_intake_cube_detector(make_unique<DigitalInput>(1));
+    reader.set_right_intake_absolute_pwm(make_unique<frc::DigitalInput>(7));
+    reader.set_right_intake_potentiometer(make_unique<frc::AnalogInput>(1));
+    reader.set_right_intake_spring_angle(make_unique<frc::AnalogInput>(5));
+    reader.set_right_intake_cube_detector(make_unique<frc::DigitalInput>(1));
 
     reader.set_left_intake_encoder(make_encoder(3));
-    reader.set_left_intake_absolute_pwm(make_unique<DigitalInput>(4));
-    reader.set_left_intake_potentiometer(make_unique<AnalogInput>(0));
-    reader.set_left_intake_spring_angle(make_unique<AnalogInput>(4));
-    reader.set_left_intake_cube_detector(make_unique<DigitalInput>(0));
+    reader.set_left_intake_absolute_pwm(make_unique<frc::DigitalInput>(4));
+    reader.set_left_intake_potentiometer(make_unique<frc::AnalogInput>(0));
+    reader.set_left_intake_spring_angle(make_unique<frc::AnalogInput>(4));
+    reader.set_left_intake_cube_detector(make_unique<frc::DigitalInput>(0));
 
-    reader.set_claw_beambreak(make_unique<DigitalInput>(8));
-    reader.set_box_back_beambreak(make_unique<DigitalInput>(9));
+    reader.set_claw_beambreak(make_unique<frc::DigitalInput>(8));
+    reader.set_box_back_beambreak(make_unique<frc::DigitalInput>(9));
 
-    reader.set_pwm_trigger(make_unique<DigitalInput>(25));
+    reader.set_pwm_trigger(make_unique<frc::DigitalInput>(25));
 
-    reader.set_lidar_lite_input(make_unique<DigitalInput>(22));
+    reader.set_lidar_lite_input(make_unique<frc::DigitalInput>(22));
 
     reader.set_dma(make_unique<DMA>());
     ::std::thread reader_thread(::std::ref(reader));
 
-    auto imu_trigger = make_unique<DigitalInput>(5);
-    ::frc971::wpilib::ADIS16448 imu(SPI::Port::kOnboardCS1, imu_trigger.get());
-    imu.SetDummySPI(SPI::Port::kOnboardCS2);
-    auto imu_reset = make_unique<DigitalOutput>(6);
+    auto imu_trigger = make_unique<frc::DigitalInput>(5);
+    ::frc971::wpilib::ADIS16448 imu(frc::SPI::Port::kOnboardCS1,
+                                    imu_trigger.get());
+    imu.SetDummySPI(frc::SPI::Port::kOnboardCS2);
+    auto imu_reset = make_unique<frc::DigitalOutput>(6);
     imu.set_reset(imu_reset.get());
     ::std::thread imu_thread(::std::ref(imu));