Move y2017 auton actor to use common class

This should give it the drivetrain helpers right off the bat.

Change-Id: I7f88d30c2451da632acc2a85fd57d2bc1772f041
diff --git a/y2017/BUILD b/y2017/BUILD
index 7730a93..fd32ae2 100644
--- a/y2017/BUILD
+++ b/y2017/BUILD
@@ -43,6 +43,7 @@
     '//aos/common/util:wrapping_counter',
     '//aos/linux_code:init',
     '//third_party:wpilib',
+    '//frc971/autonomous:auto_queue',
     '//frc971/control_loops/drivetrain:drivetrain_queue',
     '//frc971/control_loops:queues',
     '//frc971/wpilib:joystick_sender',
@@ -59,7 +60,6 @@
     '//frc971/wpilib:ADIS16448',
     '//frc971/wpilib:dma',
     '//y2017/control_loops/superstructure:superstructure_queue',
-    '//y2017/actors:autonomous_action_queue',
   ],
 )
 
diff --git a/y2017/actors/BUILD b/y2017/actors/BUILD
index 6766422..b1cacc9 100644
--- a/y2017/actors/BUILD
+++ b/y2017/actors/BUILD
@@ -9,16 +9,6 @@
   ],
 )
 
-queue_library(
-  name = 'autonomous_action_queue',
-  srcs = [
-    'autonomous_action.q',
-  ],
-  deps = [
-    '//aos/common/actions:action_queue',
-  ],
-)
-
 cc_library(
   name = 'autonomous_action_lib',
   srcs = [
@@ -28,12 +18,13 @@
     'autonomous_actor.h',
   ],
   deps = [
-    ':autonomous_action_queue',
     '//aos/common/util:phased_loop',
     '//aos/common/logging',
     '//aos/common/actions:action_lib',
+    '//frc971/autonomous:base_autonomous_actor',
     '//frc971/control_loops/drivetrain:drivetrain_queue',
     '//frc971/control_loops/drivetrain:drivetrain_config',
+    '//y2017/control_loops/drivetrain:drivetrain_base',
   ],
 )
 
@@ -44,7 +35,7 @@
   ],
   deps = [
     ':autonomous_action_lib',
-    ':autonomous_action_queue',
     '//aos/linux_code:init',
+    '//frc971/autonomous:auto_queue',
   ],
-)
\ No newline at end of file
+)
diff --git a/y2017/actors/autonomous_action.q b/y2017/actors/autonomous_action.q
deleted file mode 100644
index 52873ca..0000000
--- a/y2017/actors/autonomous_action.q
+++ /dev/null
@@ -1,29 +0,0 @@
-package y2017.actors;
-
-import "aos/common/actions/actions.q";
-
-message AutonomousMode {
-  // Mode read from the mode setting sensors.
-  int32_t mode;
-};
-
-queue AutonomousMode auto_mode;
-
-struct AutonomousActionParams {
-  // The mode from the sensors when auto starts.
-  int32_t mode;
-};
-
-queue_group AutonomousActionQueueGroup {
-  implements aos.common.actions.ActionQueueGroup;
-
-  message Goal {
-    uint32_t run;
-    AutonomousActionParams params;
-  };
-
-  queue Goal goal;
-  queue aos.common.actions.Status status;
-};
-
-queue_group AutonomousActionQueueGroup autonomous_action;
diff --git a/y2017/actors/autonomous_actor.cc b/y2017/actors/autonomous_actor.cc
index ad4b87c..52f3df2 100644
--- a/y2017/actors/autonomous_actor.cc
+++ b/y2017/actors/autonomous_actor.cc
@@ -9,7 +9,7 @@
 #include "aos/common/logging/logging.h"
 
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
-#include "y2017/actors/autonomous_action.q.h"
+#include "y2017/control_loops/drivetrain/drivetrain_base.h"
 
 namespace y2017 {
 namespace actors {
@@ -25,28 +25,13 @@
 }
 }  // namespace
 
-AutonomousActor::AutonomousActor(actors::AutonomousActionQueueGroup *s)
-    : aos::common::actions::ActorBase<actors::AutonomousActionQueueGroup>(s) {}
+AutonomousActor::AutonomousActor(
+    ::frc971::autonomous::AutonomousActionQueueGroup *s)
+    : frc971::autonomous::BaseAutonomousActor(
+          s, control_loops::drivetrain::GetDrivetrainConfig()) {}
 
-void AutonomousActor::WaitUntilDoneOrCanceled(
-    ::std::unique_ptr<aos::common::actions::Action> action) {
-  if (!action) {
-    LOG(ERROR, "No action, not waiting\n");
-    return;
-  }
-
-  ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
-                                      ::std::chrono::milliseconds(5) / 2);
-  while (true) {
-    // Poll the running bit and see if we should cancel.
-    phased_loop.SleepUntilNext();
-    if (!action->Running() || ShouldCancel()) {
-      return;
-    }
-  }
-}
-
-bool AutonomousActor::RunAction(const actors::AutonomousActionParams &params) {
+bool AutonomousActor::RunAction(
+    const ::frc971::autonomous::AutonomousActionParams &params) {
   monotonic_clock::time_point start_time = monotonic_clock::now();
   LOG(INFO, "Starting autonomous action with mode %" PRId32 "\n", params.mode);
 
@@ -72,11 +57,5 @@
   return true;
 }
 
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
-    const ::y2017::actors::AutonomousActionParams &params) {
-  return ::std::unique_ptr<AutonomousAction>(
-      new AutonomousAction(&::y2017::actors::autonomous_action, params));
-}
-
 }  // namespace actors
 }  // namespace y2017
diff --git a/y2017/actors/autonomous_actor.h b/y2017/actors/autonomous_actor.h
index ef63b8e..3c179ed 100644
--- a/y2017/actors/autonomous_actor.h
+++ b/y2017/actors/autonomous_actor.h
@@ -6,32 +6,24 @@
 
 #include "aos/common/actions/actions.h"
 #include "aos/common/actions/actor.h"
+#include "frc971/autonomous/base_autonomous_actor.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
-#include "y2017/actors/autonomous_action.q.h"
 
 namespace y2017 {
 namespace actors {
 using ::frc971::ProfileParameters;
 
-class AutonomousActor
-    : public ::aos::common::actions::ActorBase<AutonomousActionQueueGroup> {
+class AutonomousActor : public ::frc971::autonomous::BaseAutonomousActor {
  public:
-  explicit AutonomousActor(AutonomousActionQueueGroup *s);
+  explicit AutonomousActor(::frc971::autonomous::AutonomousActionQueueGroup *s);
 
-  bool RunAction(const actors::AutonomousActionParams &params) override;
+  bool RunAction(
+      const ::frc971::autonomous::AutonomousActionParams &params) override;
  private:
-  void WaitUntilDoneOrCanceled(::std::unique_ptr<aos::common::actions::Action>
-      action);
+  // TODO(phil): Implement this.
 };
 
-typedef ::aos::common::actions::TypedAction<AutonomousActionQueueGroup>
-    AutonomousAction;
-
-// Makes a new AutonomousActor action.
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
-    const ::y2017::actors::AutonomousActionParams &params);
-
 }  // namespace actors
 }  // namespace y2017
 
diff --git a/y2017/actors/autonomous_actor_main.cc b/y2017/actors/autonomous_actor_main.cc
index 21c7e7a..eb18c58 100644
--- a/y2017/actors/autonomous_actor_main.cc
+++ b/y2017/actors/autonomous_actor_main.cc
@@ -1,14 +1,14 @@
 #include <stdio.h>
 
 #include "aos/linux_code/init.h"
-#include "y2017/actors/autonomous_action.q.h"
+#include "frc971/autonomous/auto.q.h"
 #include "y2017/actors/autonomous_actor.h"
 
 int main(int /*argc*/, char * /*argv*/ []) {
   ::aos::Init(-1);
 
   ::y2017::actors::AutonomousActor autonomous(
-      &::y2017::actors::autonomous_action);
+      &::frc971::autonomous::autonomous_action);
   autonomous.Run();
 
   ::aos::Cleanup();
diff --git a/y2017/wpilib_interface.cc b/y2017/wpilib_interface.cc
index cf2dcad..b8fdd62 100644
--- a/y2017/wpilib_interface.cc
+++ b/y2017/wpilib_interface.cc
@@ -31,11 +31,11 @@
 #include "aos/common/messages/robot_state.q.h"
 #include "aos/common/commonmath.h"
 
+#include "frc971/autonomous/auto.q.h"
 #include "frc971/control_loops/control_loops.q.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "y2017/constants.h"
 #include "y2017/control_loops/superstructure/superstructure.q.h"
-#include "y2017/actors/autonomous_action.q.h"
 
 #include "frc971/wpilib/wpilib_robot_base.h"
 #include "frc971/wpilib/joystick_sender.h"
@@ -354,7 +354,7 @@
     }
 
     {
-      auto auto_mode_message = ::y2017::actors::auto_mode.MakeMessage();
+      auto auto_mode_message = ::frc971::autonomous::auto_mode.MakeMessage();
       auto_mode_message->mode = 0;
       for (size_t i = 0; i < autonomous_modes_.size(); ++i) {
         if (autonomous_modes_[i]->Get()) {