diff --git a/adb/usb_linux.c b/adb/usb_linux.c index 95c2ce60f..537122d1a 100644 --- a/adb/usb_linux.c +++ b/adb/usb_linux.c @@ -318,9 +318,13 @@ static int find_usb_device(const char *base, found_device = 1; break; } else { - // skip to next interface - bufptr += (interface->bNumEndpoints * USB_DT_ENDPOINT_SIZE); - } + // seek next interface descriptor + if (i < interfaces - 1) { + while (bufptr[1] != USB_DT_INTERFACE) { + bufptr += bufptr[0]; + } + } + } } // end of for adb_close(fd); diff --git a/adb/usb_vendors.c b/adb/usb_vendors.c index 9a1514612..f8c54d7e3 100644 --- a/adb/usb_vendors.c +++ b/adb/usb_vendors.c @@ -39,11 +39,17 @@ #define VENDOR_ID_GOOGLE 0x18d1 // HTC's USB Vendor ID #define VENDOR_ID_HTC 0x0bb4 +// Samsung's USB Vendor ID +#define VENDOR_ID_SAMSUNG 0x04e8 +// Motorola's USB Vendor ID +#define VENDOR_ID_MOTOROLA 0x22b8 /** built-in vendor list */ int builtInVendorIds[] = { VENDOR_ID_GOOGLE, VENDOR_ID_HTC, + VENDOR_ID_SAMSUNG, + VENDOR_ID_MOTOROLA, }; #define BUILT_IN_VENDOR_COUNT (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0]))