2013/3/25 Hans de Goede <hdego...@redhat.com>: > Hi, > > > On 03/23/2013 12:05 PM, Ludovic Rousseau wrote: >> >> 2013/3/23 Hans de Goede <hdego...@redhat.com>: >>> >>> We all seem to agree on that, which is good :) So it would be helpful >>> to get some feedback on my proposed API for the opting in before I >>> actually start coding this. Let me quote my own API proposal from >>> another mail: >>> >>> Assuming all platforms will do auto-detach on interface claim (which >>> makes sense given that drivers are usually per interface), we could >>> make this a device_handle property, so then an app would do something >>> like: >>> >>> libusb_device_handle *handle; >>> >>> libusb_open(dev, &handle); >>> libusb_set_auto_detach(handle, 1); >>> libusb_claim_interface(handle, x); >>> >>> With: >>> void libusb_set_auto_detach(libusb_device_handle *dev, int auto_detach); >> >> >> I propose to rename the function in libusb_set_auto_detach_kernel_driver() > > > Ack. > > >> >> I also propose to give a symbolic name to the parameter value instead >> of using 1. >> Something like LIBUSB_AUTO_DETACH_KERNEL_DRIVER_ENABLE >> >> I don't know if we also need a LIBUSB_AUTO_DETACH_KERNEL_DRIVER_DISABLE >> If not maybe the parameter can be removed. >> Or maybe the function can be named: >> libusb_set_parameter(handle, LIBUSB_AUTO_DETACH_KERNEL_DRIVER_ENABLE) > > > I've been thinking about something more generic, ie: > int libusb_set_parameter(libusb_device_handle *dev, int parameter, > int value); > > But it seems better to me to just add per parameter set functions, these > kind of multiplex functions are needlessly hard to use, and need demultiplex > code in the implementation, which as ioctl code in the kernel shows, is > easy at first but gets hard pretty quickly. > > Thinking more about this I propose to simply add a: > > void libusb_enable_auto_detach_kernel_driver(libusb_device_handle *dev); > > Function, this solves the whole needing defines for the argument problem, > and the name makes it clear at once what the function does.
The problem with a new function for each new parameter is that it is hard to use in a program. If you want to support different (older) versions of libusbx you will have to use something like: #ifdef HAVE_LIBUSB_ENABLE_AUTO_DETACH_KERNEL_DRIVER libusb_enable_auto_detach_kernel_driver(device); #else libusb_enable_detach_kernel_driver(device); #endif And add the corresponding test in configure.ac Maybe it is simpler to just always and only use libusb_enable_detach_kernel_driver() For each new function added to libusbx the API and ABI version needs to be increased. A program compiled with version N of the library cannot be used with a previous version of the library (unless the library is linked statically but that not the way to use on Linux). On the contrary, a generic function libusb_set_parameter() would always be available and just return LIBUSB_ERROR_NOT_SUPPORTED for unknown parameter. No more #ifdef dance and ABI issue. I still do not know what the best solution is. -- Dr. Ludovic Rousseau ------------------------------------------------------------------------------ Own the Future-Intel® Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d _______________________________________________ libusbx-devel mailing list libusbx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libusbx-devel