Convert VisionStatus to event loops.
Change-Id: I8b34af5c98a876751651c78ccfad6c456c788274
diff --git a/y2016/actors/autonomous_actor.cc b/y2016/actors/autonomous_actor.cc
index a5621b3..55afeaf 100644
--- a/y2016/actors/autonomous_actor.cc
+++ b/y2016/actors/autonomous_actor.cc
@@ -49,7 +49,10 @@
: frc971::autonomous::BaseAutonomousActor(
event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
vision_align_actor_factory_(
- actors::VisionAlignActor::MakeFactory(event_loop)) {}
+ actors::VisionAlignActor::MakeFactory(event_loop)),
+ vision_status_fetcher_(
+ event_loop->MakeFetcher<::y2016::vision::VisionStatus>(
+ ".y2016.vision.vision_status")) {}
constexpr double kDoNotTurnCare = 2.0;
@@ -211,11 +214,11 @@
while (end_time > monotonic_clock::now()) {
if (ShouldCancel()) break;
- ::y2016::vision::vision_status.FetchLatest();
- if (::y2016::vision::vision_status.get()) {
- vision_valid = (::y2016::vision::vision_status->left_image_valid &&
- ::y2016::vision::vision_status->right_image_valid);
- last_angle = ::y2016::vision::vision_status->horizontal_angle;
+ vision_status_fetcher_.Fetch();
+ if (vision_status_fetcher_.get()) {
+ vision_valid = (vision_status_fetcher_->left_image_valid &&
+ vision_status_fetcher_->right_image_valid);
+ last_angle = vision_status_fetcher_->horizontal_angle;
}
drivetrain_queue.status.FetchLatest();
diff --git a/y2016/actors/autonomous_actor.h b/y2016/actors/autonomous_actor.h
index a2dda27..d905a27 100644
--- a/y2016/actors/autonomous_actor.h
+++ b/y2016/actors/autonomous_actor.h
@@ -86,6 +86,8 @@
actors::VisionAlignActor::Factory vision_align_actor_factory_;
::std::unique_ptr<::aos::common::actions::Action> vision_action_;
+
+ ::aos::Fetcher<::y2016::vision::VisionStatus> vision_status_fetcher_;
};
} // namespace actors
diff --git a/y2016/actors/vision_align_actor.cc b/y2016/actors/vision_align_actor.cc
index 5aebb06..fba545e 100644
--- a/y2016/actors/vision_align_actor.cc
+++ b/y2016/actors/vision_align_actor.cc
@@ -24,7 +24,10 @@
VisionAlignActor::VisionAlignActor(::aos::EventLoop *event_loop)
: aos::common::actions::ActorBase<actors::VisionAlignActionQueueGroup>(
- event_loop, ".y2016.actors.vision_align_action") {}
+ event_loop, ".y2016.actors.vision_align_action"),
+ vision_status_fetcher_(
+ event_loop->MakeFetcher<::y2016::vision::VisionStatus>(
+ ".y2016.vision.vision_status")) {}
bool VisionAlignActor::RunAction(
const actors::VisionAlignActionParams & /*params*/) {
@@ -42,10 +45,10 @@
if (ShouldCancel()) {
return true;
}
- if (!::y2016::vision::vision_status.FetchLatest()) {
+ if (!vision_status_fetcher_.Fetch()) {
continue;
}
- const auto &vision_status = *::y2016::vision::vision_status;
+ const auto &vision_status = *vision_status_fetcher_;
if (!vision_status.left_image_valid || !vision_status.right_image_valid) {
continue;
diff --git a/y2016/actors/vision_align_actor.h b/y2016/actors/vision_align_actor.h
index 7fce07a..f92f507 100644
--- a/y2016/actors/vision_align_actor.h
+++ b/y2016/actors/vision_align_actor.h
@@ -3,11 +3,11 @@
#include <memory>
-#include "aos/actions/actor.h"
#include "aos/actions/actions.h"
+#include "aos/actions/actor.h"
#include "frc971/control_loops/state_feedback_loop.h"
-
#include "y2016/actors/vision_align_action.q.h"
+#include "y2016/vision/vision.q.h"
namespace y2016 {
namespace actors {
@@ -26,6 +26,9 @@
}
bool RunAction(const actors::VisionAlignActionParams ¶ms) override;
+
+ private:
+ ::aos::Fetcher<::y2016::vision::VisionStatus> vision_status_fetcher_;
};
} // namespace actors
diff --git a/y2016/vision/vision.q b/y2016/vision/vision.q
index da028fd..06deb1f 100644
--- a/y2016/vision/vision.q
+++ b/y2016/vision/vision.q
@@ -34,4 +34,3 @@
double drivetrain_left_position;
double drivetrain_right_position;
};
-queue VisionStatus vision_status;