From: Michael L. <mil...@gm...> - 2007-03-30 19:14:47
|
On 3/29/07, Sophia Li <Sop...@su...> wrote:2. > > 212 #define LIBUSB_LINUX_MAX_READWRITE (16 * 1024) > > 218 #define LIBUSB_LINUX_MAX_CTRL_SIZE (4096 - 8) > > This is OS specific and not so good to be placed in the API file. Do we > prefer to have this information exported by libusb than to have users > figure out the values themselves? > > If so, shall we make a new function for each backend to report these > values? E.g., > int libusb_get_max_xfer_size(libusb_bus_id_t bus, libusb_transfer_type_t > type, size_t *bytes); > If an OS doesn't have this limit, just set the value to 0. Then the > application itself needs to decide the right value to use. > > Or any other idea? I like this idea, it seems clean and it's definitely a useful function to have. However, I don't think it would be better as: int libusb_get_max_xfer_size(libusb_transfer_t type, size_t *bytes); For Windows and Linux (and I think for MacOS X too) the maximum transfer size is defined by the OS and is the same for all devices and buses, so there's no need for the bus id parameter. 3. Do we really need these functions? What for? > > 516 int libusb_get_devnum(libusb_device_id_t devid, unsigned char > *devnum); > > 555 int libusb_get_device_designator(libusb_device_id_t devid, > > 556 unsigned char *buffer, size_t buflen); > > 557 int libusb_get_bus_designator(libusb_device_id_t devid, > > 558 unsigned char *buffer, size_t buflen); I personally could live without these functions. 4. The following descriptor functions are there since we can pre-cache > them during libusb_init(). > * libusb_get_device_desc() ......... Get cooked device desc. > * libusb_get_config_desc() ......... Get cooked configuration desc. > * libusb_get_interface_desc() ...... Get cooked interface desc. > * libusb_get_endpoint_desc() ....... Get cooked endpoint desc. > * libusb_get_raw_device_desc() ..... Get raw device desc. > * libusb_get_raw_config_desc() ..... Get raw config desc. > Do we need to add string descriptor function as well? It is impossible > to pre-cache all the string descriptors. At most we can cache some > commonly used str descrs, like manufacturer str, product str, > serialnumber. Is that enough? I wouldn't want to cache anything more than those common strings, if even that. > 6. Though there were arguments that we shouldn't include bLength and > bDescriptorType in the descriptor structures, I prefer to add them to > the descriptor structures. It makes the API consistent to the USB spec. > Every USB developer should know what bLength means and not misuse it. > BTW: this function would be not necessary in that case. > 617 int libusb_get_raw_device_desc(libusb_device_id_t devid, > 618 unsigned char *buffer, size_t buflen); > > > > 7. Isn't interval decided by endpoint descriptor? How can we set it in > the intr request? > > 821 /* Interrupt */ > > 822 struct libusb_intr_request { > > 823 libusb_dev_handle_t dev; > > 824 unsigned char endpoint; > > > > 825 unsigned int interval; > ... > > 831 }; > > 8. As we discussed recently, the use of tags could be eliminated. So the > tag can be removed from libusb_xxx_request structures, and the following > functions can be changed to sth. like: > int libusb_abort(uintptr_t req_addr); > int libusb_wait(unsigned int num_reqs, uintptr_t *req_addrs, > uintptr_t *req_addr); > int libusb_poll(unsigned int num_reqs, uintptr_t *req_addrs, > uintptr_t *req_addr); > > Shall we make an opaque typedef for the request address or just use > uintptr_t? I don't think we need a special type for that, but it might be handy. |