Why libusb-1.0? The prior version of libusb provided a portable user-level library that worked well for USB initialization and configuration, but the synchronous calls proved incapable of supporting higher USRP data rates. To get around this, gnuradio requires some novel approaches to combine libusb with OS specific transfer methods. libusb-1.0 introduces an asynchronous I/O interface, which provides an alternative approach to the current multi-OS strategy.
Compatibility The libusb-1.0 API is incompatible with prior libusb-0.12 interfaces. There are quite a few similarities, however, that do exist. Because libusb-1.0 is fairly new, and current availability is limited to Linux and Darwin, libusb-0.12 support is necessary for the indefinite future. Eric asked me to figure out how to cleanly support libusb-0.12 and libusb-1.0. This is the main addition of this update.
Changes The installed interfaces are virtually unchanged. An extra argument required for libusb-1.0 defaults to
null and is ignored in non-libusb1 builds, so existing packages that
build against previous low-level code are unaffected. This change only affects
usrp_prims. Also, some version dependent headers are generated out of the configure scripts. The code generation isn't ideal at this moment causing a
number of Makefile warnings.
Testing With this branch on Fedora 11, I get 32Mb/s on all of my machines using test_usrp_standard_rx or tx. I still need to find some time and put oprofile on it to compare against the native Linux USB devio implementation. That is unlikely to happen within the next few weeks though.
Information on the original patch can be found in the gnuradio-patch archives.