Merge "Add python code for the superstructure."
diff --git a/y2016/actors/BUILD b/y2016/actors/BUILD
index 1cda783..e3de5fb 100644
--- a/y2016/actors/BUILD
+++ b/y2016/actors/BUILD
@@ -6,6 +6,7 @@
name = 'binaries',
srcs = [
':drivetrain_action',
+ ':superstructure_action',
],
)
@@ -54,3 +55,42 @@
'//aos/linux_code:init',
],
)
+
+queue_library(
+ name = 'superstructure_action_queue',
+ srcs = [
+ 'superstructure_action.q',
+ ],
+ deps = [
+ '//aos/common/actions:action_queue',
+ ],
+)
+
+cc_library(
+ name = 'superstructure_action_lib',
+ srcs = [
+ 'superstructure_actor.cc',
+ ],
+ hdrs = [
+ 'superstructure_actor.h',
+ ],
+ deps = [
+ ':superstructure_action_queue',
+ '//aos/common/util:phased_loop',
+ '//aos/common/logging',
+ '//aos/common/actions:action_lib',
+ '//y2016/control_loops/superstructure:superstructure_queue',
+ ],
+)
+
+cc_binary(
+ name = 'superstructure_action',
+ srcs = [
+ 'superstructure_actor_main.cc',
+ ],
+ deps = [
+ ':superstructure_action_lib',
+ ':superstructure_action_queue',
+ '//aos/linux_code:init',
+ ],
+)
diff --git a/y2016/actors/superstructure_action.q b/y2016/actors/superstructure_action.q
new file mode 100644
index 0000000..72bd310
--- /dev/null
+++ b/y2016/actors/superstructure_action.q
@@ -0,0 +1,22 @@
+package y2016.actors;
+
+import "aos/common/actions/actions.q";
+
+// Parameters to send with start.
+struct SuperstructureActionParams {
+ double value;
+};
+
+queue_group SuperstructureActionQueueGroup {
+ implements aos.common.actions.ActionQueueGroup;
+
+ message Goal {
+ uint32_t run;
+ SuperstructureActionParams params;
+ };
+
+ 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
new file mode 100644
index 0000000..b8ad33a
--- /dev/null
+++ b/y2016/actors/superstructure_actor.cc
@@ -0,0 +1,37 @@
+#include "y2016/actors/superstructure_actor.h"
+
+#include "aos/common/util/phased_loop.h"
+#include "aos/common/logging/logging.h"
+#include "y2016/actors/superstructure_actor.h"
+#include "y2016/control_loops/superstructure/superstructure.q.h"
+
+namespace y2016 {
+namespace actors {
+
+SuperstructureActor::SuperstructureActor(
+ actors::SuperstructureActionQueueGroup* s)
+ : aos::common::actions::ActorBase<actors::SuperstructureActionQueueGroup>(
+ s) {}
+
+bool SuperstructureActor::RunAction(
+ const actors::SuperstructureActionParams& params) {
+ LOG(INFO, "Starting superstructure action with value %f", params.value);
+
+ while (true) {
+ control_loops::superstructure_queue.status.FetchLatest();
+ ::aos::time::PhasedLoop phased_loop(::aos::time::Time::InMS(5),
+ ::aos::time::Time::InMS(5) / 2);
+ break;
+ }
+
+ return true;
+}
+
+::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
new file mode 100644
index 0000000..b882585
--- /dev/null
+++ b/y2016/actors/superstructure_actor.h
@@ -0,0 +1,31 @@
+#ifndef Y2016_ACTORS_SUPERSTRUCTURE_ACTOR_H_
+#define Y2016_ACTORS_SUPERSTRUCTURE_ACTOR_H_
+
+#include <memory>
+
+#include "aos/common/actions/actor.h"
+#include "aos/common/actions/actions.h"
+#include "y2016/actors/superstructure_action.q.h"
+
+namespace y2016 {
+namespace actors {
+
+class SuperstructureActor
+ : public ::aos::common::actions::ActorBase<SuperstructureActionQueueGroup> {
+ public:
+ explicit SuperstructureActor(SuperstructureActionQueueGroup* s);
+
+ bool RunAction(const actors::SuperstructureActionParams& params) override;
+};
+
+using SuperstructureAction =
+ ::aos::common::actions::TypedAction<SuperstructureActionQueueGroup>;
+
+// Makes a new SuperstructureActor action.
+::std::unique_ptr<SuperstructureAction> MakeSuperstructureAction(
+ const ::y2016::actors::SuperstructureActionParams& params);
+
+} // namespace actors
+} // namespace y2016
+
+#endif // Y2016_ACTORS_SUPERSTRUCTURE_ACTOR_H_
diff --git a/y2016/actors/superstructure_actor_main.cc b/y2016/actors/superstructure_actor_main.cc
new file mode 100644
index 0000000..a6da2a2
--- /dev/null
+++ b/y2016/actors/superstructure_actor_main.cc
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#include "aos/linux_code/init.h"
+#include "y2016/actors/superstructure_action.q.h"
+#include "y2016/actors/superstructure_actor.h"
+
+using ::aos::time::Time;
+
+int main(int /*argc*/, char* /*argv*/ []) {
+ ::aos::Init(-1);
+
+ ::y2016::actors::SuperstructureActor superstructure(
+ &::y2016::actors::superstructure_action);
+ superstructure.Run();
+
+ ::aos::Cleanup();
+ return 0;
+}