Linux USB device driver sits above USB core( USB controller) and read device.

A USB endpoint has 4 types: control, interrupt, bulk, ISOCHRONOUS.

struct usb_host_endpoint contains struct usb_endpoint_descriptor, which contains: bEndpointAddress( IN, OUT),bmAttributes

(endpoint type),wMaxPacketSize, bInterval (in my subsequent I plan to use an endpoint of this to tell camera take an image!)

A USB interface has several endpoints, is a logic connection. One USB driver only has one USB interface.

A USB configuration has multiple USB interfaces.

USB mouse example:

How to write Linux USB device driver article: