From dbe7654e1b3f7d04520d38144d24437cec12d6bb Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Thu, 27 Jan 2011 22:43:11 +0000 Subject: [PATCH] disable mtp featured device opening and probing, as it causes instability git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@13499 67ed7778-7388-44ab-90cf-0a291f65f57c --- libgphoto2_port/usb/libusb.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/libgphoto2_port/usb/libusb.c b/libgphoto2_port/usb/libusb.c index d33f7dced..17fc827cc 100644 --- a/libgphoto2_port/usb/libusb.c +++ b/libgphoto2_port/usb/libusb.c @@ -832,7 +832,7 @@ static int gp_port_usb_match_mtp_device(struct usb_device *dev,int *configno, int *interfaceno, int *altsettingno) { char buf[1000], cmd; - int ret,i,i1,i2; + int ret,i,i1,i2, xifaces,xnocamifaces; usb_dev_handle *devh; /* All of them are "vendor specific" device class */ @@ -840,7 +840,36 @@ gp_port_usb_match_mtp_device(struct usb_device *dev,int *configno, int *interfac if ((dev->descriptor.bDeviceClass!=0xff) && (dev->descriptor.bDeviceClass!=0)) return 0; #endif + if (dev->config) { + xifaces = xnocamifaces = 0; + for (i = 0; i < dev->descriptor.bNumConfigurations; i++) { + unsigned int j; + for (j = 0; j < dev->config[i].bNumInterfaces; j++) { + int k; + xifaces++; + + for (k = 0; k < dev->config[i].interface[j].num_altsetting; k++) { + struct usb_interface_descriptor *intf = &dev->config[i].interface[j].altsetting[k]; + if ( (intf->bInterfaceClass == USB_CLASS_HID) || + (intf->bInterfaceClass == USB_CLASS_PRINTER) || + (intf->bInterfaceClass == USB_CLASS_AUDIO) || + (intf->bInterfaceClass == USB_CLASS_HUB) || + (intf->bInterfaceClass == USB_CLASS_COMM) || + (intf->bInterfaceClass == 0xe0) /* wireless/bluetooth*/ + ) + xnocamifaces++; + } + } + } + } + if (xifaces == xnocamifaces) /* only non-camera ifaces */ + return 0; + + /* Marcus: Avoid this probing altogether, its too unstable on some devices */ + return 0; + +#if 0 devh = usb_open (dev); if (!devh) return 0; @@ -939,6 +968,7 @@ found: errout: usb_close (devh); return 0; +#endif } static int