Re: [Linux-usb-users] Re: USB API, ioctl's and libusb

From: Alan Stern
Date: Wed Jan 26 2005 - 20:01:17 EST


On Wed, 26 Jan 2005, DervishD wrote:

> That's irrelevant, the program I was trying to fix uses libusb.
> My question is about the preferred kernel interface, 'cause I don't
> know if it's the ioctl one or the URB one (well, I'm calling 'URB'
> interface the API that is implemented using URB's inside the kernel).
>
> BTW, and judging from the program I've read, there are lots of
> operations that must be done using 'usb_control_msg', and libusb
> implements that function with exactly the same interface as the
> kernel. The only difference is that libusb uses ioctl and the kernel
> implements the function using URB's. IMHO libusb doesn't provide a
> cleaner API, the only advantage of libusb is portability. Anyway,
> I've not used it enough to judge, I'm more concerned about kernel USB
> interface, not libusb one.

You don't seem to understand the difference between a kernel API and a
user API. Only code that is part of the kernel can use a kernel API, so
only kernel drivers can use the "URB" interface. By contrast, a user API
can be used by regular programs, not part of the kernel. libusb provides
a user API.

So there's really no choice. Unless you're writing a kernel module, your
program can't use URBs. You can use libusb, or if you don't care about
portability you can use ioctl calls directly. But you can't use URBs.

Alan Stern

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/