Comment 18 for bug 769816

Revision history for this message
Josua Dietze (digidietze) wrote :

Before version 1.1.5 some devices popped up which want to be switched by changing the device configuration. USB allows to provide multiple internal "modes" that can be set with SELECT_CONFIGURATION.

In fact, that is how the whole mode switching SHOULD have been implemented while following the specs.

Now, to handle multiple configurations, the current configuration (out of all possible) has to be determined properly. Up to version 1.1.4 the class of interfaces and other parameters were taken from the USB device structure by looking into "dev->config[0]".
Strictly, this is only correct for devices with just a single possible configuration. As soon as there are more than one configurations, the ACTIVE configuration (which may have been set before) has to be determined. It could be "dev->config[1]" or something else.

Therefore the GET_CONFIGURATION command is needed which must be implemented by every USB device.

I have collected five modems from different "families"; none of them had any problems with this request when testing on seven different distributions (and kernels) so I did not expect this command to fail except in really hopeless cases ...
What I would do in your case (and probably in the next release), is to simply add a little quirk handling instead of just aborting:

[...]
if (ret < 0) {
    fprintf(stderr, "Error getting the current configuration (error %d). Falling back to configuration 1.\n", ret);
    if (Configuration) {
        fprintf(stderr, " No configuation setting possible for this device.\n", ret);
        Configuration = 0;
    }
    return 1;
}
[...]