On Thursday, September 02, 2010 01:16:29 Xiaofan Chen wrote: > On Thu, Sep 2, 2010 at 11:47 AM, Mike Frysinger <[email protected]> wrote: > >> Todo: > >> 1. Rename the library and header file. (not yet) > > > > i dont understand why this is necessary. why is having libftdi-1.x > > require libusb-1.x isnt a big deal for distros ? we have those packages > > in Gentoo right now. for packages that still use libusb-0.x API, there > > is always the compat library. > > > > if the ABI doesnt break, it's actually more of a pain to integrate > > different SONAMEs into binary distros. a simple upgrade from > > libftdi-0.x to libftdi-1.x where one just replaces the other completely > > is a lot easier, and if it requires a new libusb, then that isnt a > > problem either. > > > > if there is truly a desire to keep support for older distros which dont > > support libusb-1.x yet, then adding an internal compat layer isnt hard. > > i did this for urjtag already. so now the whole source uses libusb-1.x > > but if people are building against libusb-0.x, there is a local header > > to turn the 0.x API into the 1.x API. > > I think the API is already a bit different. For one thing, please refer to > this thread. > http://developer.intra2net.com/mailarchive/html/libftdi/2010/msg00230.html > http://developer.intra2net.com/mailarchive/html/libftdi/2010/msg00236.html > > - void ftdi_set_usbdev (struct ftdi_context *ftdi, usb_dev_handle > *usbdev); > + void ftdi_set_usbdev (struct ftdi_context *ftdi, struct > libusb_device_handle *usbdev);
the structure is never defined in the public USB API, so there shouldnt be a binary compatibility issue. you're merely dealing with a pointer to some memory. the FTDI headers could be changed to merely take a void * pointer. the only downside is missed type checking on the prototype, but it would be compatible with both libusb 0.x and 1.x and not break ABI. the only other reason i see for ftdi.h to be including usb.h is for the USB endpoint defines. the ugly answer there would be to replace it with the known constants. or logic like: #ifdef USB_TYPE_VENDOR # define FTDI_DEVICE_OUT_REQTYPE (USB_xxxx......) #else # define FTDI_DEVICE_OUT_REQTYPE 0xXX #endf then there would be no reason at all for the public ftdi.h to include usb.h or libusb.h. -mike
signature.asc
Description: This is a digitally signed message part.
