Remove global queuegroup claw_queue

Change-Id: Ie642d5da51f6c0934ee3206d1a50969d6f2e6d33
diff --git a/y2014/actors/autonomous_actor.cc b/y2014/actors/autonomous_actor.cc
index 1a874c2..bb38269 100644
--- a/y2014/actors/autonomous_actor.cc
+++ b/y2014/actors/autonomous_actor.cc
@@ -35,27 +35,40 @@
           ".y2014.sensors.auto_mode")),
       hot_goal_fetcher_(
           event_loop->MakeFetcher<::y2014::HotGoal>(".y2014.hot_goal")),
+      claw_goal_sender_(
+          event_loop->MakeSender<::y2014::control_loops::ClawQueue::Goal>(
+              ".y2014.control_loops.claw_queue.goal")),
+      claw_goal_fetcher_(
+          event_loop->MakeFetcher<::y2014::control_loops::ClawQueue::Goal>(
+              ".y2014.control_loops.claw_queue.goal")),
+      claw_status_fetcher_(
+          event_loop->MakeFetcher<::y2014::control_loops::ClawQueue::Status>(
+              ".y2014.control_loops.claw_queue.status")),
+      shooter_goal_sender_(
+          event_loop->MakeSender<::y2014::control_loops::ShooterQueue::Goal>(
+              ".y2014.control_loops.shooter_queue.goal")),
       shoot_action_factory_(actors::ShootActor::MakeFactory(event_loop)) {}
 
 void AutonomousActor::PositionClawVertically(double intake_power,
                                              double centering_power) {
-  if (!control_loops::claw_queue.goal.MakeWithBuilder()
-           .bottom_angle(0.0)
-           .separation_angle(0.0)
-           .intake(intake_power)
-           .centering(centering_power)
-           .Send()) {
+  auto goal_message = claw_goal_sender_.MakeMessage();
+  goal_message->bottom_angle = 0.0;
+  goal_message->separation_angle = 0.0;
+  goal_message->intake = intake_power;
+  goal_message->centering = centering_power;
+
+  if (!goal_message.Send()) {
     LOG(WARNING, "sending claw goal failed\n");
   }
 }
 
 void AutonomousActor::PositionClawBackIntake() {
-  if (!control_loops::claw_queue.goal.MakeWithBuilder()
-           .bottom_angle(-2.273474)
-           .separation_angle(0.0)
-           .intake(12.0)
-           .centering(12.0)
-           .Send()) {
+  auto goal_message = claw_goal_sender_.MakeMessage();
+  goal_message->bottom_angle = -2.273474;
+  goal_message->separation_angle = 0.0;
+  goal_message->intake = 12.0;
+  goal_message->centering = 12.0;
+  if (!goal_message.Send()) {
     LOG(WARNING, "sending claw goal failed\n");
   }
 }
@@ -63,35 +76,35 @@
 void AutonomousActor::PositionClawUpClosed() {
   // Move the claw to where we're going to shoot from but keep it closed until
   // it gets there.
-  if (!control_loops::claw_queue.goal.MakeWithBuilder()
-           .bottom_angle(0.86)
-           .separation_angle(0.0)
-           .intake(4.0)
-           .centering(1.0)
-           .Send()) {
+  auto goal_message = claw_goal_sender_.MakeMessage();
+  goal_message->bottom_angle = 0.86;
+  goal_message->separation_angle = 0.0;
+  goal_message->intake = 4.0;
+  goal_message->centering = 1.0;
+  if (!goal_message.Send()) {
     LOG(WARNING, "sending claw goal failed\n");
   }
 }
 
 void AutonomousActor::PositionClawForShot() {
-  if (!control_loops::claw_queue.goal.MakeWithBuilder()
-           .bottom_angle(0.86)
-           .separation_angle(0.10)
-           .intake(4.0)
-           .centering(1.0)
-           .Send()) {
+  auto goal_message = claw_goal_sender_.MakeMessage();
+  goal_message->bottom_angle = 0.86;
+  goal_message->separation_angle = 0.10;
+  goal_message->intake = 4.0;
+  goal_message->centering = 1.0;
+  if (!goal_message.Send()) {
     LOG(WARNING, "sending claw goal failed\n");
   }
 }
 
 void AutonomousActor::SetShotPower(double power) {
   LOG(INFO, "Setting shot power to %f\n", power);
-  if (!control_loops::shooter_queue.goal.MakeWithBuilder()
-           .shot_power(power)
-           .shot_requested(false)
-           .unload_requested(false)
-           .load_requested(false)
-           .Send()) {
+  auto goal_message = shooter_goal_sender_.MakeMessage();
+  goal_message->shot_power = power;
+  goal_message->shot_requested = false;
+  goal_message->unload_requested = false;
+  goal_message->load_requested = false;
+  if (!goal_message.Send()) {
     LOG(WARNING, "sending shooter goal failed\n");
   }
 }
@@ -116,22 +129,21 @@
                                         ::std::chrono::milliseconds(10) / 2);
     // Poll the running bit and auto done bits.
     phased_loop.SleepUntilNext();
-    control_loops::claw_queue.status.FetchLatest();
-    control_loops::claw_queue.goal.FetchLatest();
+    claw_status_fetcher_.Fetch();
+    claw_goal_fetcher_.Fetch();
     if (ShouldCancel()) {
       return false;
     }
-    if (control_loops::claw_queue.status.get() == nullptr ||
-        control_loops::claw_queue.goal.get() == nullptr) {
+    if (claw_status_fetcher_.get() == nullptr ||
+        claw_goal_fetcher_.get() == nullptr) {
       continue;
     }
-    bool ans =
-        control_loops::claw_queue.status->zeroed &&
-        (::std::abs(control_loops::claw_queue.status->bottom_velocity) < 1.0) &&
-        (::std::abs(control_loops::claw_queue.status->bottom -
-                    control_loops::claw_queue.goal->bottom_angle) < 0.10) &&
-        (::std::abs(control_loops::claw_queue.status->separation -
-                    control_loops::claw_queue.goal->separation_angle) < 0.4);
+    bool ans = claw_status_fetcher_->zeroed &&
+               (::std::abs(claw_status_fetcher_->bottom_velocity) < 1.0) &&
+               (::std::abs(claw_status_fetcher_->bottom -
+                           claw_goal_fetcher_->bottom_angle) < 0.10) &&
+               (::std::abs(claw_status_fetcher_->separation -
+                           claw_goal_fetcher_->separation_angle) < 0.4);
     if (ans) {
       return true;
     }
diff --git a/y2014/actors/autonomous_actor.h b/y2014/actors/autonomous_actor.h
index 5529d36..e832980 100644
--- a/y2014/actors/autonomous_actor.h
+++ b/y2014/actors/autonomous_actor.h
@@ -10,6 +10,7 @@
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
 #include "frc971/control_loops/drivetrain/drivetrain_config.h"
 #include "y2014/actors/shoot_actor.h"
+#include "y2014/control_loops/shooter/shooter.q.h"
 #include "y2014/queues/auto_mode.q.h"
 #include "y2014/queues/hot_goal.q.h"
 
@@ -40,6 +41,12 @@
 
   ::aos::Fetcher<::y2014::sensors::AutoMode> auto_mode_fetcher_;
   ::aos::Fetcher<::y2014::HotGoal> hot_goal_fetcher_;
+  ::aos::Sender<::y2014::control_loops::ClawQueue::Goal> claw_goal_sender_;
+  ::aos::Fetcher<::y2014::control_loops::ClawQueue::Goal> claw_goal_fetcher_;
+  ::aos::Fetcher<::y2014::control_loops::ClawQueue::Status>
+      claw_status_fetcher_;
+  ::aos::Sender<::y2014::control_loops::ShooterQueue::Goal>
+      shooter_goal_sender_;
 
   actors::ShootActor::Factory shoot_action_factory_;
 };
diff --git a/y2014/actors/shoot_actor.cc b/y2014/actors/shoot_actor.cc
index 5520c49..4a57943 100644
--- a/y2014/actors/shoot_actor.cc
+++ b/y2014/actors/shoot_actor.cc
@@ -4,37 +4,13 @@
 
 #include "aos/logging/logging.h"
 
-#include "y2014/control_loops/shooter/shooter.q.h"
-#include "y2014/control_loops/claw/claw.q.h"
-#include "y2014/constants.h"
 #include "frc971/control_loops/drivetrain/drivetrain.q.h"
+#include "y2014/constants.h"
+#include "y2014/control_loops/claw/claw.q.h"
+#include "y2014/control_loops/shooter/shooter.q.h"
 
 namespace y2014 {
 namespace actors {
-namespace {
-
-bool IntakeOff() {
-  control_loops::claw_queue.goal.FetchLatest();
-  if (!control_loops::claw_queue.goal.get()) {
-    LOG(WARNING, "no claw goal\n");
-    // If it doesn't have a goal, then the intake isn't on so we don't have to
-    // turn it off.
-    return true;
-  } else {
-    if (!control_loops::claw_queue.goal.MakeWithBuilder()
-             .bottom_angle(control_loops::claw_queue.goal->bottom_angle)
-             .separation_angle(control_loops::claw_queue.goal->separation_angle)
-             .intake(0.0)
-             .centering(0.0)
-             .Send()) {
-      LOG(WARNING, "sending claw goal failed\n");
-      return false;
-    }
-  }
-  return true;
-}
-
-}  // namespace
 
 constexpr double ShootActor::kOffsetRadians;
 constexpr double ShootActor::kClawShootingSeparation;
@@ -42,14 +18,46 @@
 
 ShootActor::ShootActor(::aos::EventLoop *event_loop)
     : ::aos::common::actions::ActorBase<actors::ShootActionQueueGroup>(
-          event_loop, ".y2014.actors.shoot_action") {}
+          event_loop, ".y2014.actors.shoot_action"),
+      claw_goal_fetcher_(
+          event_loop->MakeFetcher<::y2014::control_loops::ClawQueue::Goal>(
+              ".y2014.control_loops.claw_queue.goal")),
+      claw_status_fetcher_(
+          event_loop->MakeFetcher<::y2014::control_loops::ClawQueue::Status>(
+              ".y2014.control_loops.claw_queue.status")),
+      claw_goal_sender_(
+          event_loop->MakeSender<::y2014::control_loops::ClawQueue::Goal>(
+              ".y2014.control_loops.claw_queue.goal")) {}
 
 double ShootActor::SpeedToAngleOffset(double speed) {
-  const constants::Values& values = constants::GetValues();
+  const constants::Values &values = constants::GetValues();
   // scale speed to a [0.0-1.0] on something close to the max
   return (speed / values.drivetrain_max_speed) * kOffsetRadians;
 }
 
+bool ShootActor::IntakeOff() {
+  claw_goal_fetcher_.Fetch();
+  if (!claw_goal_fetcher_.get()) {
+    LOG(WARNING, "no claw goal\n");
+    // If it doesn't have a goal, then the intake isn't on so we don't have to
+    // turn it off.
+    return true;
+  } else {
+    auto goal_message = claw_goal_sender_.MakeMessage();
+
+    goal_message->bottom_angle = claw_goal_fetcher_->bottom_angle;
+    goal_message->separation_angle = claw_goal_fetcher_->separation_angle;
+    goal_message->intake = 0.0;
+    goal_message->centering = 0.0;
+
+    if (!goal_message.Send()) {
+      LOG(WARNING, "sending claw goal failed\n");
+      return false;
+    }
+  }
+  return true;
+}
+
 bool ShootActor::RunAction(const double&) {
   InnerRunAction();
 
@@ -105,23 +113,22 @@
   if (!IntakeOff()) return;
 }
 
-bool ClawIsReady() {
-  control_loops::claw_queue.goal.FetchLatest();
+bool ShootActor::ClawIsReady() {
+  claw_goal_fetcher_.Fetch();
 
-  bool ans =
-      control_loops::claw_queue.status->zeroed &&
-      (::std::abs(control_loops::claw_queue.status->bottom_velocity) < 0.5) &&
-      (::std::abs(control_loops::claw_queue.status->bottom -
-                  control_loops::claw_queue.goal->bottom_angle) < 0.10) &&
-      (::std::abs(control_loops::claw_queue.status->separation -
-                  control_loops::claw_queue.goal->separation_angle) < 0.4);
+  bool ans = claw_status_fetcher_->zeroed &&
+             (::std::abs(claw_status_fetcher_->bottom_velocity) < 0.5) &&
+             (::std::abs(claw_status_fetcher_->bottom -
+                         claw_goal_fetcher_->bottom_angle) < 0.10) &&
+             (::std::abs(claw_status_fetcher_->separation -
+                         claw_goal_fetcher_->separation_angle) < 0.4);
   LOG(DEBUG, "Claw is %sready zeroed %d bottom_velocity %f bottom %f sep %f\n",
-      ans ? "" : "not ", control_loops::claw_queue.status->zeroed,
-      ::std::abs(control_loops::claw_queue.status->bottom_velocity),
-      ::std::abs(control_loops::claw_queue.status->bottom -
-                 control_loops::claw_queue.goal->bottom_angle),
-      ::std::abs(control_loops::claw_queue.status->separation -
-                 control_loops::claw_queue.goal->separation_angle));
+      ans ? "" : "not ", claw_status_fetcher_->zeroed,
+      ::std::abs(claw_status_fetcher_->bottom_velocity),
+      ::std::abs(claw_status_fetcher_->bottom -
+                 claw_goal_fetcher_->bottom_angle),
+      ::std::abs(claw_status_fetcher_->separation -
+                 claw_goal_fetcher_->separation_angle));
   return ans;
 }
 
@@ -141,7 +148,7 @@
 
 bool ShootActor::DoneSetupShot() {
   control_loops::shooter_queue.status.FetchAnother();
-  control_loops::claw_queue.status.FetchAnother();
+  claw_status_fetcher_.Fetch();
   // Make sure that both the shooter and claw have reached the necessary
   // states.
   if (ShooterIsReady() && ClawIsReady()) {
@@ -153,8 +160,8 @@
 }
 
 bool ShootActor::DonePreShotOpen() {
-  control_loops::claw_queue.status.FetchAnother();
-  if (control_loops::claw_queue.status->separation > kClawShootingSeparation) {
+  claw_status_fetcher_.Fetch();
+  if (claw_status_fetcher_->separation > kClawShootingSeparation) {
     LOG(INFO, "Opened up enough to shoot.\n");
     return true;
   }
diff --git a/y2014/actors/shoot_actor.h b/y2014/actors/shoot_actor.h
index 9b3bcf1..33a284c 100644
--- a/y2014/actors/shoot_actor.h
+++ b/y2014/actors/shoot_actor.h
@@ -3,10 +3,10 @@
 
 #include <memory>
 
-#include "aos/actions/actor.h"
 #include "aos/actions/actions.h"
-
+#include "aos/actions/actor.h"
 #include "y2014/actors/shoot_action.q.h"
+#include "y2014/control_loops/claw/claw.q.h"
 
 namespace y2014 {
 namespace actors {
@@ -44,6 +44,15 @@
   // in the right place
   bool DoneSetupShot();
 
+  bool IntakeOff();
+  bool ClawIsReady();
+
+ private:
+  ::aos::Fetcher<::y2014::control_loops::ClawQueue::Goal> claw_goal_fetcher_;
+  ::aos::Fetcher<::y2014::control_loops::ClawQueue::Status>
+      claw_status_fetcher_;
+  ::aos::Sender<::y2014::control_loops::ClawQueue::Goal> claw_goal_sender_;
+
   // to track when shot is complete
   int previous_shots_;
 };