Use a second camera and switch between them.

Also, blink out the state over the beacon.

Change-Id: If606dfed9ae64137f71429f1190f04d5dac2c4ec
diff --git a/y2018/vision/vision_status.cc b/y2018/vision/vision_status.cc
new file mode 100644
index 0000000..e8ac6db
--- /dev/null
+++ b/y2018/vision/vision_status.cc
@@ -0,0 +1,42 @@
+#include <netdb.h>
+
+#include "aos/common/logging/logging.h"
+#include "aos/common/logging/queue_logging.h"
+#include "aos/common/time.h"
+#include "aos/linux_code/init.h"
+#include "aos/vision/events/udp.h"
+#include "y2018/vision.pb.h"
+#include "y2018/vision/vision.q.h"
+
+namespace y2018 {
+namespace vision {
+
+using aos::monotonic_clock;
+
+int Main() {
+  ::aos::events::RXUdpSocket video_rx(5001);
+  char data[65507];
+  ::y2018::VisionStatus status;
+
+  while (true) {
+    const ssize_t rx_size = video_rx.Recv(data, sizeof(data));
+    if (rx_size > 0) {
+      status.ParseFromArray(data, rx_size);
+      auto new_vision_status = vision_status.MakeMessage();
+      new_vision_status->high_frame_count = status.high_frame_count();
+      new_vision_status->low_frame_count = status.low_frame_count();
+      LOG_STRUCT(DEBUG, "vision", *new_vision_status);
+      if (!new_vision_status.Send()) {
+        LOG(ERROR, "Failed to send vision information\n");
+      }
+    }
+  }
+}
+
+}  // namespace vision
+}  // namespace y2018
+
+int main(int /*argc*/, char ** /*argv*/) {
+  ::aos::InitNRT();
+  ::y2018::vision::Main();
+}