Add pivot joint functionality

Signed-off-by: Charlie Huang <charliehuang09@gmail.com>
Change-Id: Ib40d4ce1a4c91f1b0e75b3548fe43c9218433634
diff --git a/y2023_bot3/control_loops/superstructure/superstructure.cc b/y2023_bot3/control_loops/superstructure/superstructure.cc
index 3e88a6c..3b4835c 100644
--- a/y2023_bot3/control_loops/superstructure/superstructure.cc
+++ b/y2023_bot3/control_loops/superstructure/superstructure.cc
@@ -23,7 +23,9 @@
                                const ::std::string &name)
     : frc971::controls::ControlLoop<Goal, Position, Status, Output>(event_loop,
                                                                     name),
-      values_(values) {
+      values_(values),
+      end_effector_(),
+      pivot_joint_(values) {
   event_loop->SetRuntimeRealtimePriority(30);
 }
 
@@ -47,15 +49,25 @@
       position->end_effector_cube_beam_break(), &output_struct.roller_voltage,
       unsafe_goal != nullptr ? unsafe_goal->preloaded_with_cube() : false);
 
-  if (output) {
-    output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
-  }
+  flatbuffers::Offset<
+      frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>
+      pivot_joint_offset = pivot_joint_.RunIteration(
+          unsafe_goal != nullptr ? unsafe_goal->pivot_goal()
+                                 : PivotGoal::NEUTRAL,
+          &(output_struct.pivot_joint_voltage),
+          position->pivot_joint_position(), status->fbb());
 
   Status::Builder status_builder = status->MakeBuilder<Status>();
 
-  status_builder.add_zeroed(true);
+  status_builder.add_zeroed(pivot_joint_.zeroed());
+  status_builder.add_estopped(pivot_joint_.estopped());
+  status_builder.add_pivot_joint(pivot_joint_offset);
   status_builder.add_end_effector_state(end_effector_.state());
 
+  if (output) {
+    output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
+  }
+
   (void)status->Send(status_builder.Finish());
 }