Created WPILibRobotBase

To not depend on WPILib interfaces and make version changes easier

Change-Id: I90abb34c50798dd166bf7eadf359de5f635f6d82
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index c07b7f8..caada86 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -172,3 +172,13 @@
     '//aos/common/logging:queue_logging',
   ],
 )
+
+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 c9aca05..7f9e819 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 0278ebc..ebf2a8b 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"
@@ -677,14 +677,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");
 
@@ -789,4 +789,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 5c3f0d1..63deb98 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',
     '//y2014_bot3/autonomous:auto_queue',
     '//y2014_bot3/control_loops/drivetrain:drivetrain_lib',
diff --git a/y2014_bot3/wpilib/wpilib_interface.cc b/y2014_bot3/wpilib/wpilib_interface.cc
index 4fde0f5..36dd926 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"
 #include "PowerDistributionPanel.h"
@@ -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");
 
@@ -414,4 +414,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 c5c4202..2bd4448 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 0ea4b8d..8d8b3d3 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");
 
@@ -750,4 +750,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 f89a2b4..cdd48e3 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 6b5c3db..45924b0 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");
 
@@ -545,4 +545,4 @@
 }  // namespace wpilib
 }  // namespace y2015_bot3
 
-START_ROBOT_CLASS(::y2015_bot3::wpilib::WPILibRobot);
+AOS_ROBOT_CLASS(::y2015_bot3::wpilib::WPILibRobot);