Move CameraLog to event loop

Change-Id: I06c5e607f983b762ecb244d8c16cd24c78b596bb
diff --git a/y2019/joystick_reader.cc b/y2019/joystick_reader.cc
index 2ae46f9..e354647 100644
--- a/y2019/joystick_reader.cc
+++ b/y2019/joystick_reader.cc
@@ -147,7 +147,9 @@
         localizer_control_sender_(
             event_loop->MakeSender<
                 ::frc971::control_loops::drivetrain::LocalizerControl>(
-                ".frc971.control_loops.drivetrain.localizer_control")) {
+                ".frc971.control_loops.drivetrain.localizer_control")),
+        camera_log_sender_(
+            event_loop->MakeSender<::y2019::CameraLog>(".y2019.camera_log")) {
     const uint16_t team = ::aos::network::GetTeamNumber();
     superstructure_queue.goal.FetchLatest();
     if (superstructure_queue.goal.get()) {
@@ -484,7 +486,7 @@
     }
 
     {
-      auto camera_log_message = camera_log.MakeMessage();
+      auto camera_log_message = camera_log_sender_.MakeMessage();
       camera_log_message->log = data.IsPressed(kCameraLog);
       LOG_STRUCT(DEBUG, "camera_log", *camera_log_message);
       camera_log_message.Send();
@@ -507,6 +509,8 @@
   ::aos::Sender<::frc971::control_loops::drivetrain::LocalizerControl>
       localizer_control_sender_;
 
+  ::aos::Sender<::y2019::CameraLog> camera_log_sender_;
+
   // Bool to track if we've been above the deploy position.  Once this bool is
   // set, don't let the stilts retract until we see the platform.
   bool was_above_ = false;
diff --git a/y2019/status_light.q b/y2019/status_light.q
index 65a121a..66e8ad7 100644
--- a/y2019/status_light.q
+++ b/y2019/status_light.q
@@ -12,5 +12,3 @@
 message CameraLog {
   bool log;
 };
-
-queue CameraLog camera_log;
diff --git a/y2019/wpilib_interface.cc b/y2019/wpilib_interface.cc
index 01c8afa..dec9b9c 100644
--- a/y2019/wpilib_interface.cc
+++ b/y2019/wpilib_interface.cc
@@ -312,7 +312,9 @@
       : camera_frame_sender_(
             event_loop
                 ->MakeSender<::y2019::control_loops::drivetrain::CameraFrame>(
-                    ".y2019.control_loops.drivetrain.camera_frames")) {}
+                    ".y2019.control_loops.drivetrain.camera_frames")),
+        camera_log_fetcher_(
+            event_loop->MakeFetcher<::y2019::CameraLog>(".y2019.camera_log")) {}
 
   CameraReader(const CameraReader &) = delete;
   CameraReader &operator=(const CameraReader &) = delete;
@@ -340,12 +342,12 @@
     using namespace frc971::jevois;
     RoborioToTeensy to_teensy{};
     to_teensy.realtime_now = aos::realtime_clock::now();
-    camera_log.FetchLatest();
+    camera_log_fetcher_.Fetch();
     if (activate_usb_ && !activate_usb_->Get()) {
       to_teensy.camera_command = CameraCommand::kUsb;
     } else if (activate_passthrough_ && !activate_passthrough_->Get()) {
       to_teensy.camera_command = CameraCommand::kCameraPassthrough;
-    } else if (camera_log.get() && camera_log->log) {
+    } else if (camera_log_fetcher_.get() && camera_log_fetcher_->log) {
       to_teensy.camera_command = CameraCommand::kLog;
     } else {
       to_teensy.camera_command = CameraCommand::kNormal;
@@ -428,6 +430,7 @@
  private:
   ::aos::Sender<::y2019::control_loops::drivetrain::CameraFrame>
       camera_frame_sender_;
+  ::aos::Fetcher<::y2019::CameraLog> camera_log_fetcher_;
 
   frc::SPI *spi_ = nullptr;
   ::std::unique_ptr<frc::SPI> dummy_spi_;