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.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