copied everything over from 2012 and removed all of the actual robot code except the drivetrain stuff


git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4078 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/aos/crio/shared_libs/ByteBuffer.h b/aos/crio/shared_libs/ByteBuffer.h
new file mode 100644
index 0000000..b5c4902
--- /dev/null
+++ b/aos/crio/shared_libs/ByteBuffer.h
@@ -0,0 +1,91 @@
+#ifndef __CRIO_SHARED_LIBS_BYTE_BUFFER_H_
+#define __CRIO_SHARED_LIBS_BYTE_BUFFER_H_
+
+#include "aos/common/network/ReceiveSocket.h"
+#include <algorithm>
+
+namespace aos {
+
+class ByteBuffer {
+ public:
+   int m_size;
+   int m_length;
+   int m_i;
+   char *m_buffer;
+   bool recv_from_sock(ReceiveSocket *sock) {
+     m_length = sock->Recv(m_buffer, m_size, 40000);
+     if (m_length < 0) {
+       m_length = 0;
+     }
+     m_i = 0;
+     return m_length != 0;
+   }
+   ByteBuffer(int size) {
+     m_buffer = new char(size);
+     m_size = size;
+   }
+   ~ByteBuffer() {
+     delete m_buffer;
+   }
+   // Reads an uint32_t into *number and returns true on success.  *number is
+   // unmodified on failure.
+   bool read_uint32(uint32_t *number) {
+     uint32_t vals[4];
+     if (m_i + 4 > m_length) {
+       m_i = m_length;
+       return false;
+     }
+     for (int i = 0; i < 4; ++i) {
+       vals[i] = read_char();
+     }
+     *number = vals[3] + (vals[2] << 8) + (vals[1] << 16) + (vals[0] << 24);
+     return true;
+   }
+   float read_float() {
+     if (m_i + 4 <= m_length) {
+       float r;
+       memcpy(&r, &m_buffer[m_i], 4);
+       m_i += 4;
+       return r;
+     } else {
+       return 1.0 / 0.0;
+     }
+   }
+   int read_char() {
+     if (m_i < m_length) {
+       int val = m_buffer[m_i];
+       m_i ++;
+       return val;
+     } else {
+       return -1;
+     }
+   }
+
+   int read_string(char *buf, size_t max_len) {
+     int data_len = read_char();
+     if (data_len <= 0) {
+       return -1;
+     }
+     size_t to_read = std::min<size_t>(static_cast<uint8_t>(data_len), max_len);
+     memcpy(buf, &m_buffer[m_i], to_read);
+     m_i += to_read;
+     return 0;
+   }
+   // Returns success or not.
+   bool read_bytes(void *buf, size_t bytes) {
+     if (m_length - m_i < static_cast<ssize_t>(bytes)) return false;
+     memcpy(buf, &m_buffer[m_i], bytes);
+     m_i += bytes;
+     return true;
+   }
+   char *get_bytes(size_t number) {
+     if (m_length - m_i < static_cast<ssize_t>(number)) return NULL;
+     m_i += number;
+     return &m_buffer[m_i - number];
+   }
+};
+
+} // namespace aos
+
+#endif
+