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_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_;