Squashed 'third_party/allwpilib_2016/' content from commit 7f61816
Change-Id: If9d9245880859cdf580f5d7f77045135d0521ce7
git-subtree-dir: third_party/allwpilib_2016
git-subtree-split: 7f618166ed253a24629934fcf89c3decb0528a3b
diff --git a/wpilibc/Athena/include/RobotBase.h b/wpilibc/Athena/include/RobotBase.h
new file mode 100644
index 0000000..2fcd146
--- /dev/null
+++ b/wpilibc/Athena/include/RobotBase.h
@@ -0,0 +1,70 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008. All Rights Reserved.
+ */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
+/*----------------------------------------------------------------------------*/
+#pragma once
+
+#include "Base.h"
+#include "Task.h"
+
+class DriverStation;
+
+#define START_ROBOT_CLASS(_ClassName_) \
+ int main() { \
+ if (!HALInitialize()) { \
+ std::cerr << "FATAL ERROR: HAL could not be initialized" << std::endl; \
+ return -1; \
+ } \
+ HALReport(HALUsageReporting::kResourceType_Language, \
+ HALUsageReporting::kLanguage_CPlusPlus); \
+ _ClassName_ *robot = new _ClassName_(); \
+ RobotBase::robotSetup(robot); \
+ return 0; \
+ }
+
+/**
+ * Implement a Robot Program framework.
+ * The RobotBase class is intended to be subclassed by a user creating a robot
+ * program.
+ * Overridden Autonomous() and OperatorControl() methods are called at the
+ * appropriate time
+ * as the match proceeds. In the current implementation, the Autonomous code
+ * will run to
+ * completion before the OperatorControl code could start. In the future the
+ * Autonomous code
+ * might be spawned as a task, then killed at the end of the Autonomous period.
+ */
+class RobotBase {
+ friend class RobotDeleter;
+
+ public:
+ static RobotBase &getInstance();
+ static void setInstance(RobotBase *robot);
+
+ bool IsEnabled() const;
+ bool IsDisabled() const;
+ bool IsAutonomous() const;
+ bool IsOperatorControl() const;
+ bool IsTest() const;
+ bool IsNewDataAvailable() const;
+ static void startRobotTask(FUNCPTR factory);
+ static void robotTask(FUNCPTR factory, Task *task);
+ virtual void StartCompetition() = 0;
+
+ static void robotSetup(RobotBase *robot);
+
+ protected:
+ RobotBase();
+ virtual ~RobotBase();
+
+ RobotBase(const RobotBase&) = delete;
+ RobotBase& operator=(const RobotBase&) = delete;
+
+ Task *m_task = nullptr;
+ DriverStation &m_ds;
+
+ private:
+ static RobotBase *m_instance;
+};