moved back to our custom libusb wrappers instead of glibusb

Glibusb's model is too simplified to work very well at all with
isochronous, so I had to go back to our custom wrapper (which still
needed isochronous support to be finished).
diff --git a/gyro_board/src/libusb-driver/libusb-driver.gyp b/gyro_board/src/libusb-driver/libusb-driver.gyp
index 1c50633..ab2bf70 100644
--- a/gyro_board/src/libusb-driver/libusb-driver.gyp
+++ b/gyro_board/src/libusb-driver/libusb-driver.gyp
@@ -11,6 +11,10 @@
         '<(AOS)/common/util/util.gyp:thread',
         'libusb_wrap',
         '<(AOS)/build/aos.gyp:logging',
+        '<(AOS)/common/common.gyp:time',
+      ],
+      'export_dependent_settings': [
+        '<(AOS)/common/common.gyp:time',
       ],
     },
     {
diff --git a/gyro_board/src/libusb-driver/libusb_wrap.cc b/gyro_board/src/libusb-driver/libusb_wrap.cc
index 83cf245..0026ef3 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.cc
+++ b/gyro_board/src/libusb-driver/libusb_wrap.cc
@@ -1,5 +1,7 @@
 #include "libusb_wrap.h"
 
+#include <string.h>
+
 #include <iostream>
 
 #include "aos/common/logging/logging.h"
@@ -115,8 +117,9 @@
 
 Transfer::Transfer(size_t data_length,
                    void (*callback)(Transfer *, void *),
-                   void *user_data)
-    : transfer_(libusb_alloc_transfer(0)),
+                   void *user_data,
+                   int num_iso_packets)
+    : transfer_(libusb_alloc_transfer(num_iso_packets)),
       data_(new uint8_t[data_length]),
       data_length_(data_length),
       callback_(callback),
@@ -146,16 +149,16 @@
     if (ret == LIBUSB_ERROR_BUSY) {
       LOG(FATAL, "transfer %p already submitted\n", this);
     }
-    LOG(FATAL, "libusb error %d submitting transfer %p\n",
-        ret, this);
+    LOG(FATAL, "libusb error %d submitting transfer %p. errno %d: %s\n",
+        ret, this, errno, strerror(errno));
   }
 }
 
 void Transfer::Cancel() {
   int ret = libusb_cancel_transfer(transfer_);
   if (ret != 0) {
-    LOG(FATAL, "libusb error %d cancelling transfer %p\n",
-        ret, this);
+    LOG(FATAL, "libusb error %d cancelling transfer %p. errno %d: %s\n",
+        ret, this, errno, strerror(errno));
   }
 }
 
@@ -167,17 +170,14 @@
                                          int num_packets,
                                          void (*callback)(Transfer *, void *),
                                          void *user_data)
-    : Transfer(packet_length * num_packets, callback, user_data),
+    : Transfer(packet_length * num_packets, callback, user_data, num_packets),
       num_packets_(num_packets) {
 }
 
 void IsochronousTransfer::FillIsochronous(LibUSBDeviceHandle *device,
                                unsigned char endpoint,
-                               unsigned int timeout) {
-  (void)device;
-  (void)endpoint;
-  (void)timeout;
-  /*libusb_fill_iso_transfer(transfer_,
+                               const ::aos::time::Time &timeout) {
+  libusb_fill_iso_transfer(transfer_,
                            device->dev_handle_,
                            endpoint,
                            data_,
@@ -185,7 +185,8 @@
                            num_packets_,
                            StaticTransferCallback,
                            this,
-                           timeout);*/
+                           timeout.ToMSec());
+  transfer_->iso_packet_desc[0].length = data_length_;
 }
 
 }  // namespace libusb
diff --git a/gyro_board/src/libusb-driver/libusb_wrap.h b/gyro_board/src/libusb-driver/libusb_wrap.h
index 261cded..6056c66 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.h
+++ b/gyro_board/src/libusb-driver/libusb_wrap.h
@@ -4,6 +4,7 @@
 #include <libusb-1.0/libusb.h>
 
 #include "aos/common/macros.h"
+#include "aos/common/time.h"
 
 class LibUSBDeviceHandle;
 namespace libusb {
@@ -61,7 +62,8 @@
  public:
   Transfer(size_t data_length,
            void (*callback)(Transfer *, void *),
-           void *user_data);
+           void *user_data,
+           int num_iso_packets = 0);
   ~Transfer();
 
   void FillInterrupt(LibUSBDeviceHandle *device,
@@ -72,7 +74,7 @@
   void Cancel();
 
   libusb_transfer_status status() { return transfer_->status; }
-  int read_bytes() { return transfer_->actual_length; }
+  virtual int read_bytes() { return transfer_->actual_length; }
 
   const uint8_t *data() { return data_; }
 
@@ -81,20 +83,22 @@
     static_cast<Transfer *>(self->user_data)->TransferCallback();
   }
 
- private:
-  void TransferCallback();
-
+ protected:
   libusb_transfer *const transfer_;
 
   uint8_t *const data_;
   size_t data_length_;
 
+ private:
+  void TransferCallback();
+
   void (*const callback_)(Transfer *, void *);
   void *const user_data_;
 
   DISALLOW_COPY_AND_ASSIGN(Transfer);
 };
 
+// TODO(brians): Make this actually work for num_packets != 1.
 class IsochronousTransfer : public Transfer {
  public:
   IsochronousTransfer(size_t packet_length,
@@ -104,7 +108,11 @@
 
   void FillIsochronous(LibUSBDeviceHandle *device,
                        unsigned char endpoint,
-                       unsigned int timeout);
+                       const ::aos::time::Time &timeout);
+
+  virtual int read_bytes() {
+    return transfer_->iso_packet_desc[0].actual_length;
+  }
 
  private:
   const int num_packets_;