created LimitEncoderReader
diff --git a/aos/common/libstdc++/README b/aos/common/libstdc++/README
new file mode 100644
index 0000000..df8269e
--- /dev/null
+++ b/aos/common/libstdc++/README
@@ -0,0 +1,3 @@
+This directory contains replacement include files for ones that the libstdc++ we're using on the cRIO either don't implement completely or doesn't have at all.
+The ones in aos/crio/libstdc++ are copied from the libstdc++ that came with the compiler and tweaked so that they work.
+When used for compiles not for vxworks, they just #include the usual standard library header.
diff --git a/aos/common/libstdc++/memory b/aos/common/libstdc++/memory
new file mode 100644
index 0000000..31ab6e9
--- /dev/null
+++ b/aos/common/libstdc++/memory
@@ -0,0 +1,4 @@
+#include <memory>
+#ifdef __VXWORKS__
+#include "aos/crio/libstdc++/unique_ptr.h"
+#endif
diff --git a/aos/common/libstdc++/utility b/aos/common/libstdc++/utility
new file mode 100644
index 0000000..50b8aa3
--- /dev/null
+++ b/aos/common/libstdc++/utility
@@ -0,0 +1,4 @@
+#include <utility>
+#ifdef __VXWORKS__
+#include "aos/crio/libstdc++/move.h"
+#endif
diff --git a/aos/common/zero_switch_value.h b/aos/common/zero_switch_value.h
new file mode 100644
index 0000000..fa8609d
--- /dev/null
+++ b/aos/common/zero_switch_value.h
@@ -0,0 +1,32 @@
+#ifndef AOS_COMMON_ZERO_SWITCH_VALUE_H_
+#define AOS_COMMON_ZERO_SWITCH_VALUE_H_
+
+#include "aos/common/type_traits.h"
+#include "aos/common/byteorder.h"
+
+namespace aos {
+
+// Contains all of the information from a zeroing sensor of some kind.
+// It is all contained here because it all has to be retrieved at the same time
+// or else there are race conditions with the sensor triggering and retrieving
+// the encoder values that would make writing code to deal with the information
+// hard (ie if the trigger sensor is read, then it changes->triggers the
+// interrupt which reads the encoder value).
+struct ZeroSwitchValue {
+  // What the curent encoder value is.
+  int32_t current_encoder;
+  // What the value of the encoder was when the interrupt triggered.
+  int32_t edge_encoder;
+  // What the current value of the sensor is.
+  bool current_value;
+
+  void NetworkToHost() {
+    current_encoder = ntoh(current_encoder);
+    edge_encoder = ntoh(edge_encoder);
+  }
+};
+static_assert(shm_ok<ZeroSwitchValue>::value, "it's getting sent over the wire");
+
+}  // namespace aos
+
+#endif  // AOS_COMMON_ZERO_SWITCH_VALUE_H_