Merge changes I16b5b2e9,Ib0cfb846,I43d96838

* changes:
  Add code for prototyping with the 2012 drivebase
  Make fetching PDP values optional
  Add a LOG at init time to help with debugging
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index 7a7d7bb..4844cd3 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -189,3 +189,13 @@
     '//aos/linux_code:init',
   ],
 )
+
+cc_library(
+  name = 'wpilib_robot_base',
+  hdrs = [
+    'wpilib_robot_base.h',
+  ],
+  deps = [
+    '//aos/externals:wpilib',
+  ],
+)
diff --git a/frc971/wpilib/wpilib_robot_base.h b/frc971/wpilib/wpilib_robot_base.h
new file mode 100644
index 0000000..231a21a
--- /dev/null
+++ b/frc971/wpilib/wpilib_robot_base.h
@@ -0,0 +1,30 @@
+#ifndef FRC971_WPILIB_NEWROBOTBASE_H_
+#define FRC971_WPILIB_NEWROBOTBASE_H_
+
+#include "RobotBase.h"
+
+namespace frc971 {
+namespace wpilib {
+
+class WPILibRobotBase {
+public:
+  virtual void Run() = 0;
+};
+
+#define AOS_ROBOT_CLASS(_ClassName_) \
+  START_ROBOT_CLASS(::frc971::wpilib::WPILibAdapterRobot<_ClassName_>)
+
+template <typename T>
+class WPILibAdapterRobot : public RobotBase {
+ public:
+  void StartCompetition() override { robot_.Run(); }
+
+ private:
+  T robot_;
+};
+
+}
+}
+
+#endif // FRC971_WPILIB_NEWROBOTBASE_H_
+
diff --git a/y2014/wpilib/BUILD b/y2014/wpilib/BUILD
index 499049d..38853ca 100644
--- a/y2014/wpilib/BUILD
+++ b/y2014/wpilib/BUILD
@@ -28,6 +28,7 @@
     '//frc971/wpilib:gyro_sender',
     '//frc971/wpilib:dma_edge_counting',
     '//frc971/wpilib:interrupt_edge_counting',
+    '//frc971/wpilib:wpilib_robot_base',
     '//frc971/wpilib:encoder_and_potentiometer',
     '//frc971/control_loops:queues',
     '//frc971/wpilib:logging_queue',
diff --git a/y2014/wpilib/wpilib_interface.cc b/y2014/wpilib/wpilib_interface.cc
index fdd9b5c..a399601 100644
--- a/y2014/wpilib/wpilib_interface.cc
+++ b/y2014/wpilib/wpilib_interface.cc
@@ -13,7 +13,7 @@
 #include "AnalogInput.h"
 #include "Compressor.h"
 #include "Relay.h"
-#include "RobotBase.h"
+#include "frc971/wpilib/wpilib_robot_base.h"
 #include "dma.h"
 #ifndef WPILIB2015
 #include "DigitalGlitchFilter.h"
@@ -685,14 +685,14 @@
   ::std::unique_ptr<Talon> intake2_talon_;
 };
 
-class WPILibRobot : public RobotBase {
+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);
   }
 
-  virtual void StartCompetition() {
+  void Run() override {
     ::aos::InitNRT();
     ::aos::SetCurrentThreadName("StartCompetition");
 
@@ -801,4 +801,4 @@
 }  // namespace y2014
 
 
-START_ROBOT_CLASS(::y2014::wpilib::WPILibRobot);
+AOS_ROBOT_CLASS(::y2014::wpilib::WPILibRobot);
diff --git a/y2014_bot3/wpilib/BUILD b/y2014_bot3/wpilib/BUILD
index ea8409a..ff64e60 100644
--- a/y2014_bot3/wpilib/BUILD
+++ b/y2014_bot3/wpilib/BUILD
@@ -24,6 +24,7 @@
     '//frc971/wpilib:gyro_sender',
     '//frc971/control_loops:queues',
     '//frc971/wpilib:logging_queue',
+    '//frc971/wpilib:wpilib_robot_base',
     '//frc971/wpilib:wpilib_interface',
     '//frc971/wpilib:pdp_fetcher',
     '//y2014_bot3/autonomous:auto_queue',
diff --git a/y2014_bot3/wpilib/wpilib_interface.cc b/y2014_bot3/wpilib/wpilib_interface.cc
index 3b6c8b1..814bfe2 100644
--- a/y2014_bot3/wpilib/wpilib_interface.cc
+++ b/y2014_bot3/wpilib/wpilib_interface.cc
@@ -13,7 +13,7 @@
 #include "AnalogInput.h"
 #include "Compressor.h"
 #include "Relay.h"
-#include "RobotBase.h"
+#include "frc971/wpilib/wpilib_robot_base.h"
 #include "dma.h"
 #include "DigitalInput.h"
 #undef ERROR
@@ -330,13 +330,13 @@
   return std::unique_ptr<T>(new T(std::forward<U>(u)...));
 }
 
-class WPILibRobot : public RobotBase {
+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);
   }
-  virtual void StartCompetition() {
+  void Run() override {
     ::aos::InitNRT();
     ::aos::SetCurrentThreadName("StartCompetition");
 
@@ -419,4 +419,4 @@
 }  // namespace wpilib
 }  // namespace frc971
 
-START_ROBOT_CLASS(::frc971::wpilib::WPILibRobot);
+AOS_ROBOT_CLASS(::frc971::wpilib::WPILibRobot);
diff --git a/y2015/wpilib/BUILD b/y2015/wpilib/BUILD
index 6966c9f..0bdf7b3 100644
--- a/y2015/wpilib/BUILD
+++ b/y2015/wpilib/BUILD
@@ -30,6 +30,7 @@
     '//frc971/wpilib:dma_edge_counting',
     '//frc971/wpilib:interrupt_edge_counting',
     '//frc971/wpilib:encoder_and_potentiometer',
+    '//frc971/wpilib:wpilib_robot_base',
     '//frc971/control_loops:queues',
     '//frc971/wpilib:logging_queue',
     '//frc971/wpilib:wpilib_interface',
diff --git a/y2015/wpilib/wpilib_interface.cc b/y2015/wpilib/wpilib_interface.cc
index 4d49b41..9a6097e 100644
--- a/y2015/wpilib/wpilib_interface.cc
+++ b/y2015/wpilib/wpilib_interface.cc
@@ -13,7 +13,7 @@
 #include "AnalogInput.h"
 #include "Compressor.h"
 #include "Relay.h"
-#include "RobotBase.h"
+#include "frc971/wpilib/wpilib_robot_base.h"
 #include "dma.h"
 #ifndef WPILIB2015
 #include "DigitalGlitchFilter.h"
@@ -633,13 +633,13 @@
   return std::unique_ptr<T>(new T(std::forward<U>(u)...));
 }
 
-class WPILibRobot : public RobotBase {
+class WPILibRobot : public ::frc971::wpilib::WPILibRobotBase {
  public:
   ::std::unique_ptr<Encoder> encoder(int index) {
     return make_unique<Encoder>(10 + index * 2, 11 + index * 2, false,
                                 Encoder::k4X);
   }
-  virtual void StartCompetition() {
+  virtual void Run() {
     ::aos::InitNRT();
     ::aos::SetCurrentThreadName("StartCompetition");
 
@@ -755,4 +755,4 @@
 }  // namespace frc971
 
 
-START_ROBOT_CLASS(::frc971::wpilib::WPILibRobot);
+AOS_ROBOT_CLASS(::frc971::wpilib::WPILibRobot);
diff --git a/y2015_bot3/wpilib/BUILD b/y2015_bot3/wpilib/BUILD
index 6fae2e4..89742c9 100644
--- a/y2015_bot3/wpilib/BUILD
+++ b/y2015_bot3/wpilib/BUILD
@@ -22,6 +22,7 @@
     '//frc971/wpilib:loop_output_handler',
     '//frc971/wpilib:buffered_pcm',
     '//frc971/wpilib:gyro_sender',
+    '//frc971/wpilib:wpilib_robot_base',
     '//frc971/wpilib:wpilib_interface',
     '//frc971/control_loops:queues',
     '//frc971/wpilib:logging_queue',
diff --git a/y2015_bot3/wpilib/wpilib_interface.cc b/y2015_bot3/wpilib/wpilib_interface.cc
index de694ab..02230f0 100644
--- a/y2015_bot3/wpilib/wpilib_interface.cc
+++ b/y2015_bot3/wpilib/wpilib_interface.cc
@@ -13,7 +13,7 @@
 #include "AnalogInput.h"
 #include "Compressor.h"
 #include "Relay.h"
-#include "RobotBase.h"
+#include "frc971/wpilib/wpilib_robot_base.h"
 #include "dma.h"
 #ifndef WPILIB2015
 #include "DigitalGlitchFilter.h"
@@ -450,13 +450,13 @@
   return std::unique_ptr<T>(new T(std::forward<U>(u)...));
 }
 
-class WPILibRobot : public RobotBase {
+class WPILibRobot : public ::frc971::wpilib::WPILibRobotBase {
  public:
   ::std::unique_ptr<Encoder> encoder(int index) {
     return make_unique<Encoder>(10 + index * 2, 11 + index * 2, false,
                                 Encoder::k4X);
   }
-  virtual void StartCompetition() {
+  virtual void Run() {
     ::aos::InitNRT();
     ::aos::SetCurrentThreadName("StartCompetition");
 
@@ -549,4 +549,4 @@
 }  // namespace wpilib
 }  // namespace y2015_bot3
 
-START_ROBOT_CLASS(::y2015_bot3::wpilib::WPILibRobot);
+AOS_ROBOT_CLASS(::y2015_bot3::wpilib::WPILibRobot);