blob: 99de5026b37a396ed3759b4ee93dfd4b2cccadfc [file] [log] [blame]
Austin Schuh87c10632017-02-05 19:02:17 -08001#include "y2017/control_loops/superstructure/superstructure.h"
2
3#include "aos/common/controls/control_loops.q.h"
4#include "aos/common/logging/logging.h"
5#include "y2017/constants.h"
6#include "y2017/control_loops/superstructure/hood/hood.h"
Adam Snaider79900c22017-02-08 20:23:15 -08007#include "y2017/control_loops/superstructure/turret/turret.h"
8#include "y2017/control_loops/superstructure/intake/intake.h"
Austin Schuh87c10632017-02-05 19:02:17 -08009
10namespace y2017 {
11namespace control_loops {
12namespace superstructure {
13
14Superstructure::Superstructure(
15 control_loops::SuperstructureQueue *superstructure_queue)
16 : aos::controls::ControlLoop<control_loops::SuperstructureQueue>(
17 superstructure_queue) {}
18
19void Superstructure::RunIteration(
20 const control_loops::SuperstructureQueue::Goal *unsafe_goal,
21 const control_loops::SuperstructureQueue::Position *position,
22 control_loops::SuperstructureQueue::Output *output,
23 control_loops::SuperstructureQueue::Status *status) {
24 if (WasReset()) {
25 LOG(ERROR, "WPILib reset, restarting\n");
26 hood_.Reset();
Adam Snaider79900c22017-02-08 20:23:15 -080027 turret_.Reset();
28 intake_.Reset();
Tyler Chatow2737d2a2017-02-08 21:20:51 -080029 shooter_.Reset();
Austin Schuh87c10632017-02-05 19:02:17 -080030 }
31
32 hood_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->hood) : nullptr,
33 &(position->hood),
34 output != nullptr ? &(output->voltage_hood) : nullptr,
35 &(status->hood));
Adam Snaider79900c22017-02-08 20:23:15 -080036 turret_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->turret) : nullptr,
37 &(position->turret),
38 output != nullptr ? &(output->voltage_turret) : nullptr,
39 &(status->turret));
40
41 intake_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->intake) : nullptr,
42 &(position->intake),
43 output != nullptr ? &(output->voltage_intake) : nullptr,
44 &(status->intake));
Tyler Chatow2737d2a2017-02-08 21:20:51 -080045 shooter_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->shooter) : nullptr,
46 &(position->theta_shooter),
47 output != nullptr ? &(output->voltage_shooter) : nullptr,
48 &(status->shooter));
Austin Schuh87c10632017-02-05 19:02:17 -080049}
50
51} // namespace superstructure
52} // namespace control_loops
53} // namespace y2017