diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/usb.c | 12 |
1 files changed, 8 insertions, 4 deletions
| @@ -392,13 +392,17 @@ static int usb_device_add(libusb_device* dev) | |||
| 392 | return -1; | 392 | return -1; |
| 393 | } | 393 | } |
| 394 | 394 | ||
| 395 | int desired_config = devdesc.bNumConfigurations; | ||
| 396 | if (desired_config > 4) { | ||
| 397 | desired_config = 4; | ||
| 398 | } | ||
| 395 | int current_config = 0; | 399 | int current_config = 0; |
| 396 | if((res = libusb_get_configuration(handle, ¤t_config)) != 0) { | 400 | if((res = libusb_get_configuration(handle, ¤t_config)) != 0) { |
| 397 | usbmuxd_log(LL_WARNING, "Could not get configuration for device %d-%d: %d", bus, address, res); | 401 | usbmuxd_log(LL_WARNING, "Could not get configuration for device %d-%d: %d", bus, address, res); |
| 398 | libusb_close(handle); | 402 | libusb_close(handle); |
| 399 | return -1; | 403 | return -1; |
| 400 | } | 404 | } |
| 401 | if (current_config != devdesc.bNumConfigurations) { | 405 | if (current_config != desired_config) { |
| 402 | struct libusb_config_descriptor *config; | 406 | struct libusb_config_descriptor *config; |
| 403 | if((res = libusb_get_active_config_descriptor(dev, &config)) != 0) { | 407 | if((res = libusb_get_active_config_descriptor(dev, &config)) != 0) { |
| 404 | usbmuxd_log(LL_NOTICE, "Could not get old configuration descriptor for device %d-%d: %d", bus, address, res); | 408 | usbmuxd_log(LL_NOTICE, "Could not get old configuration descriptor for device %d-%d: %d", bus, address, res); |
| @@ -420,9 +424,9 @@ static int usb_device_add(libusb_device* dev) | |||
| 420 | libusb_free_config_descriptor(config); | 424 | libusb_free_config_descriptor(config); |
| 421 | } | 425 | } |
| 422 | 426 | ||
| 423 | usbmuxd_log(LL_INFO, "Setting configuration for device %d-%d, from %d to %d", bus, address, current_config, devdesc.bNumConfigurations); | 427 | usbmuxd_log(LL_INFO, "Setting configuration for device %d-%d, from %d to %d", bus, address, current_config, desired_config); |
| 424 | if((res = libusb_set_configuration(handle, devdesc.bNumConfigurations)) != 0) { | 428 | if((res = libusb_set_configuration(handle, desired_config)) != 0) { |
| 425 | usbmuxd_log(LL_WARNING, "Could not set configuration %d for device %d-%d: %d", devdesc.bNumConfigurations, bus, address, res); | 429 | usbmuxd_log(LL_WARNING, "Could not set configuration %d for device %d-%d: %d", desired_config, bus, address, res); |
| 426 | libusb_close(handle); | 430 | libusb_close(handle); |
| 427 | return -1; | 431 | return -1; |
| 428 | } | 432 | } |
