* When overwriting a string field with a shorter string, libusb doesn't erase extra characters
* Extra processing of this string (already done by load_eeprom) removes extraneous characters
Heavy work on the zero copy interface and endpoint wrappers to properly use the async io.
The global libusb session starts a thread to run the event handler,
the async callbacks push completed transfers onto a thread-safe bounded buffer.
The managed buffer creation routines use the bounded buffer to efficiently pop off completed transfers.
works on linux, throws a weird exception on cleanup
libusb allocation stuff had been moved inside of smart pointer classes to handle automatic cleanup
the public device handle implementation now holds an actual libusb device inside of it
needs testing - all platforms
This patch limits all libusb device enumeration operations to FSF
(Vendor ID = 0xfffe) devices, which removes a lot of unncessary
libusb output when debug mode is enabled. The reference counts
held by the libusb device list are also reduced, which prevents
holding references to unused devices.