copied glibusb in and started making it compile
diff --git a/aos/common/glibusb/gbuffer.h b/aos/common/glibusb/gbuffer.h
new file mode 100644
index 0000000..5c1d8c6
--- /dev/null
+++ b/aos/common/glibusb/gbuffer.h
@@ -0,0 +1,130 @@
+// Copyright 2012 Google Inc. All Rights Reserved.
+//
+// A buffer for dealing with data.  Some special support for PTP is
+// available.
+
+#ifndef _GLIBUSB_GBUFFER_H_
+#define _GLIBUSB_GBUFFER_H_
+
+#include <stdint.h>
+#include <string>
+#include <vector>
+
+namespace glibusb {
+
+// Buffer of bytes.
+class Buffer {
+ public:
+  // Underlying byte store type.
+  typedef std::vector<uint8_t> ByteBuffer;
+  typedef ByteBuffer::size_type size_type;
+
+  // Destructor.
+  ~Buffer();
+
+  // Constructs an empty buffer.
+  Buffer();
+
+  // Constructs a buffer from memory of given length.  Data is copied.
+  // (This is an interface to C functions, chiefly, libusb, and should
+  // only be used for such purposes.)
+  Buffer(const void *src, size_type length);
+
+  // Returns true iff the buffers contain the same data.
+  bool operator==(const Buffer &other) const;
+
+  // Returns true iff the buffer does not contain the same data.
+  bool operator!=(const Buffer &other) const;
+
+  // Returns a new allocated slice of the buffer.
+  Buffer *MakeSlice(size_type offset, size_type length) const;
+
+  // Returns the length.
+  size_type Length() const { return buffer_.size(); }
+
+  // Clears (as in std::vector) the buffer.
+  void Clear();
+
+  // Resizes (as in std::vector) the buffer.
+  void Resize(size_type length);
+
+  // Returns a pointer to the underlying store that of a guaranteed
+  // length (or CHECK), possibly beginning at a given offset.  (These
+  // are interfaces to C functions, chiefly, libusb, and should only
+  // be used for such purposes.)
+  void *GetBufferPointer(size_type length);
+  const void *GetBufferPointer(size_type length) const;
+  void *GetBufferPointer(size_type offset, size_type length);
+  const void *GetBufferPointer(size_type offset, size_type length) const;
+
+  // Gets the value of integral type T from the buffer at the offset
+  // byte_offset, places it in value_out, and returns the length of
+  // the marshalled data.  The integer is expected to be in little
+  // endian format. This template is specialized for
+  // {int,uint}{8,16,32,64}_t.
+  template <class T>
+  size_type Get(size_type byte_offset, T *value_out) const;
+
+  // Gets an ASCII string from the buffer at the offset byte_offset,
+  // places it in value_out, and returns the length of the marshalled
+  // data.  The string data in the buffer is expected to be
+  // null-terminated.
+  size_type Get(size_type byte_offset, std::string *value_out) const;
+
+  // Puts the value of integral type T into the buffer offset
+  // byte_offset and returns the length of the marshalled data.  Data
+  // are put in little endian format. This template is specialized for
+  // {int,uint}{8,16,32,64}_t.
+  template <class T>
+  size_type Put(size_type byte_offset, T value);
+
+  // Appends the value of type T into the buffer offset byte_offset
+  // and returns the length of the marshalled data.  Data are appended
+  // in little endian format.  This template is available for
+  // {int,uint}{8,16,32,64}_t.
+  template <class T> void Append(const T value);
+
+  // Append a buffer.
+  void Append(const Buffer &buffer);
+
+  // Inserts length bytes of (uninitialized) space at the beginning of
+  // the buffer.
+  void AddHeader(size_type length);
+
+  // Removes length bytes of space from the beginning of the buffer.
+  void RemoveHeader(size_type length);
+
+  // Copies the source buffer.
+  void Copy(const Buffer &source);
+
+#if 0
+  // Writes the contents of the buffer to the file, or dies.
+  void WriteOrDie(File *fp) const;
+
+  // Writes the contents of the buffer to the path, or dies.
+  void WriteToPathOrDie(const char *name) const;
+#endif
+
+  // Returns a hex dump of the buffer.
+  std::string Dump() const;
+
+ private:
+  // The underlying byte store.
+  ByteBuffer buffer_;
+
+  Buffer(const Buffer &) = delete;
+  void operator=(const Buffer &) = delete;
+};
+
+
+// Template for Buffer::Append for integral values.
+template <typename T>
+void Buffer::Append(const T value) {
+  size_type offset = Length();
+  Resize(offset + sizeof(T));
+  Put(offset, value);
+}
+
+}  // namespace glibusb
+
+#endif  // _GLIBUSB_GBUFFER_H_