Convert actions to event loops
The logic gets significantly simpler due to Watchers. But we also get
to port all the users over as well.
Change-Id: Ib4e75951e65f7431acc6c1548b7f1d20da3da295
diff --git a/y2016/actors/autonomous_actor.cc b/y2016/actors/autonomous_actor.cc
index 4f68f20..a5621b3 100644
--- a/y2016/actors/autonomous_actor.cc
+++ b/y2016/actors/autonomous_actor.cc
@@ -45,11 +45,11 @@
} // namespace
-AutonomousActor::AutonomousActor(
- ::aos::EventLoop *event_loop,
- ::frc971::autonomous::AutonomousActionQueueGroup *s)
+AutonomousActor::AutonomousActor(::aos::EventLoop *event_loop)
: frc971::autonomous::BaseAutonomousActor(
- event_loop, s, control_loops::drivetrain::GetDrivetrainConfig()) {}
+ event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
+ vision_align_actor_factory_(
+ actors::VisionAlignActor::MakeFactory(event_loop)) {}
constexpr double kDoNotTurnCare = 2.0;
@@ -194,7 +194,7 @@
void AutonomousActor::AlignWithVisionGoal() {
actors::VisionAlignActionParams params;
- vision_action_ = actors::MakeVisionAlignAction(params);
+ vision_action_ = vision_align_actor_factory_.Make(params);
vision_action_->Start();
}
diff --git a/y2016/actors/autonomous_actor.h b/y2016/actors/autonomous_actor.h
index 4a220ed..a2dda27 100644
--- a/y2016/actors/autonomous_actor.h
+++ b/y2016/actors/autonomous_actor.h
@@ -18,8 +18,7 @@
class AutonomousActor : public ::frc971::autonomous::BaseAutonomousActor {
public:
- explicit AutonomousActor(::aos::EventLoop *event_loop,
- ::frc971::autonomous::AutonomousActionQueueGroup *s);
+ explicit AutonomousActor(::aos::EventLoop *event_loop);
bool RunAction(
const ::frc971::autonomous::AutonomousActionParams ¶ms) override;
@@ -85,7 +84,8 @@
void TwoBallAuto();
- ::std::unique_ptr<actors::VisionAlignAction> vision_action_;
+ actors::VisionAlignActor::Factory vision_align_actor_factory_;
+ ::std::unique_ptr<::aos::common::actions::Action> vision_action_;
};
} // namespace actors
diff --git a/y2016/actors/autonomous_actor_main.cc b/y2016/actors/autonomous_actor_main.cc
index 16fc5c4..1e2628b 100644
--- a/y2016/actors/autonomous_actor_main.cc
+++ b/y2016/actors/autonomous_actor_main.cc
@@ -8,9 +8,8 @@
::aos::Init(-1);
::aos::ShmEventLoop event_loop;
- ::y2016::actors::AutonomousActor autonomous(
- &event_loop, &::frc971::autonomous::autonomous_action);
- autonomous.Run();
+ ::y2016::actors::AutonomousActor autonomous(&event_loop);
+ event_loop.Run();
::aos::Cleanup();
return 0;
diff --git a/y2016/actors/superstructure_action.q b/y2016/actors/superstructure_action.q
index eb23397..1b937aa 100644
--- a/y2016/actors/superstructure_action.q
+++ b/y2016/actors/superstructure_action.q
@@ -21,5 +21,3 @@
queue Goal goal;
queue aos.common.actions.Status status;
};
-
-queue_group SuperstructureActionQueueGroup superstructure_action;
diff --git a/y2016/actors/superstructure_actor.cc b/y2016/actors/superstructure_actor.cc
index d8537ce..f65d05a 100644
--- a/y2016/actors/superstructure_actor.cc
+++ b/y2016/actors/superstructure_actor.cc
@@ -12,10 +12,9 @@
namespace chrono = ::std::chrono;
-SuperstructureActor::SuperstructureActor(
- actors::SuperstructureActionQueueGroup *s)
+SuperstructureActor::SuperstructureActor(::aos::EventLoop *event_loop)
: aos::common::actions::ActorBase<actors::SuperstructureActionQueueGroup>(
- s) {}
+ event_loop, ".y2016.actors.superstructure_action") {}
bool SuperstructureActor::RunAction(
const actors::SuperstructureActionParams ¶ms) {
@@ -105,11 +104,5 @@
}
}
-::std::unique_ptr<SuperstructureAction> MakeSuperstructureAction(
- const ::y2016::actors::SuperstructureActionParams& params) {
- return ::std::unique_ptr<SuperstructureAction>(new SuperstructureAction(
- &::y2016::actors::superstructure_action, params));
-}
-
} // namespace actors
} // namespace y2016
diff --git a/y2016/actors/superstructure_actor.h b/y2016/actors/superstructure_actor.h
index d48fc71..be02a33 100644
--- a/y2016/actors/superstructure_actor.h
+++ b/y2016/actors/superstructure_actor.h
@@ -13,7 +13,15 @@
class SuperstructureActor
: public ::aos::common::actions::ActorBase<SuperstructureActionQueueGroup> {
public:
- explicit SuperstructureActor(SuperstructureActionQueueGroup *s);
+ typedef ::aos::common::actions::TypedActionFactory<
+ SuperstructureActionQueueGroup>
+ Factory;
+
+ explicit SuperstructureActor(::aos::EventLoop *event_loop);
+
+ static Factory MakeFactory(::aos::EventLoop *event_loop) {
+ return Factory(event_loop, ".y2016.actors.superstructure_action");
+ }
// Internal struct holding superstructure goals sent by autonomous to the
// loop.
@@ -30,13 +38,6 @@
bool SuperstructureDone();
};
-using SuperstructureAction =
- ::aos::common::actions::TypedAction<SuperstructureActionQueueGroup>;
-
-// Makes a new SuperstructureActor action.
-::std::unique_ptr<SuperstructureAction> MakeSuperstructureAction(
- const ::y2016::actors::SuperstructureActionParams ¶ms);
-
} // namespace actors
} // namespace y2016
diff --git a/y2016/actors/superstructure_actor_main.cc b/y2016/actors/superstructure_actor_main.cc
index 69bea8a..a97802c 100644
--- a/y2016/actors/superstructure_actor_main.cc
+++ b/y2016/actors/superstructure_actor_main.cc
@@ -1,5 +1,6 @@
#include <stdio.h>
+#include "aos/events/shm-event-loop.h"
#include "aos/init.h"
#include "y2016/actors/superstructure_action.q.h"
#include "y2016/actors/superstructure_actor.h"
@@ -7,9 +8,9 @@
int main(int /*argc*/, char* /*argv*/ []) {
::aos::Init(-1);
- ::y2016::actors::SuperstructureActor superstructure(
- &::y2016::actors::superstructure_action);
- superstructure.Run();
+ ::aos::ShmEventLoop event_loop;
+ ::y2016::actors::SuperstructureActor superstructure(&event_loop);
+ event_loop.Run();
::aos::Cleanup();
return 0;
diff --git a/y2016/actors/vision_align_action.q b/y2016/actors/vision_align_action.q
index e822bf4..f9f3024 100644
--- a/y2016/actors/vision_align_action.q
+++ b/y2016/actors/vision_align_action.q
@@ -18,5 +18,3 @@
queue Goal goal;
queue aos.common.actions.Status status;
};
-
-queue_group VisionAlignActionQueueGroup vision_align_action;
diff --git a/y2016/actors/vision_align_actor.cc b/y2016/actors/vision_align_actor.cc
index b805747..5aebb06 100644
--- a/y2016/actors/vision_align_actor.cc
+++ b/y2016/actors/vision_align_actor.cc
@@ -22,8 +22,9 @@
namespace actors {
using ::frc971::control_loops::drivetrain_queue;
-VisionAlignActor::VisionAlignActor(actors::VisionAlignActionQueueGroup *s)
- : aos::common::actions::ActorBase<actors::VisionAlignActionQueueGroup>(s) {}
+VisionAlignActor::VisionAlignActor(::aos::EventLoop *event_loop)
+ : aos::common::actions::ActorBase<actors::VisionAlignActionQueueGroup>(
+ event_loop, ".y2016.actors.vision_align_action") {}
bool VisionAlignActor::RunAction(
const actors::VisionAlignActionParams & /*params*/) {
@@ -76,11 +77,5 @@
return true;
}
-::std::unique_ptr<VisionAlignAction> MakeVisionAlignAction(
- const ::y2016::actors::VisionAlignActionParams ¶ms) {
- return ::std::unique_ptr<VisionAlignAction>(
- new VisionAlignAction(&::y2016::actors::vision_align_action, params));
-}
-
} // namespace actors
} // namespace y2016
diff --git a/y2016/actors/vision_align_actor.h b/y2016/actors/vision_align_actor.h
index a1f07fa..7fce07a 100644
--- a/y2016/actors/vision_align_actor.h
+++ b/y2016/actors/vision_align_actor.h
@@ -15,18 +15,19 @@
class VisionAlignActor
: public ::aos::common::actions::ActorBase<VisionAlignActionQueueGroup> {
public:
- explicit VisionAlignActor(VisionAlignActionQueueGroup *s);
+ typedef ::aos::common::actions::TypedActionFactory<
+ VisionAlignActionQueueGroup>
+ Factory;
+
+ explicit VisionAlignActor(::aos::EventLoop *event_loop);
+
+ static Factory MakeFactory(::aos::EventLoop *event_loop) {
+ return Factory(event_loop, ".y2016.actors.vision_align_action");
+ }
bool RunAction(const actors::VisionAlignActionParams ¶ms) override;
};
-typedef ::aos::common::actions::TypedAction<VisionAlignActionQueueGroup>
- VisionAlignAction;
-
-// Makes a new VisionAlignActor action.
-::std::unique_ptr<VisionAlignAction> MakeVisionAlignAction(
- const ::y2016::actors::VisionAlignActionParams ¶ms);
-
} // namespace actors
} // namespace y2016
diff --git a/y2016/actors/vision_align_actor_main.cc b/y2016/actors/vision_align_actor_main.cc
index f9854f7..2fd9eb2 100644
--- a/y2016/actors/vision_align_actor_main.cc
+++ b/y2016/actors/vision_align_actor_main.cc
@@ -1,5 +1,6 @@
#include <stdio.h>
+#include "aos/events/shm-event-loop.h"
#include "aos/init.h"
#include "y2016/actors/vision_align_action.q.h"
#include "y2016/actors/vision_align_actor.h"
@@ -7,9 +8,9 @@
int main(int /*argc*/, char* /*argv*/ []) {
::aos::Init(-1);
- ::y2016::actors::VisionAlignActor vision_align(
- &::y2016::actors::vision_align_action);
- vision_align.Run();
+ ::aos::ShmEventLoop event_loop;
+ ::y2016::actors::VisionAlignActor vision_align(&event_loop);
+ event_loop.Run();
::aos::Cleanup();
return 0;