struct usb_host_config — representation of a device's configuration
struct usb_host_config { struct usb_config_descriptor desc; char * string; struct usb_interface_assoc_descriptor * intf_assoc[USB_MAXIADS]; struct usb_interface * interface[USB_MAXINTERFACES]; struct usb_interface_cache * intf_cache[USB_MAXINTERFACES]; unsigned char * extra; int extralen; };
the device's configuration descriptor.
pointer to the cached version of the iConfiguration string, if present for this configuration.
list of any interface association descriptors in this config
array of pointers to usb_interface structures, one for each interface in the configuration. The number of interfaces is stored in desc.bNumInterfaces. These pointers are valid only while the the configuration is active.
array of pointers to usb_interface_cache structures, one for each interface in the configuration. These structures exist for the entire life of the device.
pointer to buffer containing all extra descriptors associated with this configuration (those preceding the first interface descriptor).
length of the extra descriptors buffer.
USB devices may have multiple configurations, but only one can be active at any time. Each encapsulates a different operational environment; for example, a dual-speed device would have separate configurations for full-speed and high-speed operation. The number of configurations available is stored in the device descriptor as bNumConfigurations.
A configuration can contain multiple interfaces. Each corresponds to
a different function of the USB device, and all are available whenever
the configuration is active. The USB standard says that interfaces
are supposed to be numbered from 0 to desc.bNumInterfaces-1, but a lot
of devices get this wrong. In addition, the interface array is not
guaranteed to be sorted in numerical order. Use usb_ifnum_to_if
to
look up an interface entry based on its number.
Device drivers should not attempt to activate configurations. The choice
of which configuration to install is a policy decision based on such
considerations as available power, functionality provided, and the user's
desires (expressed through userspace tools). However, drivers can call
usb_reset_configuration
to reinitialize the current configuration and
all its interfaces.