ADB on linux: Handle USB SuperSpeed extra Descriptors
Under Linux, ADB manually parses USB Descriptors to check for possible ADB USB Interfaces. USB Devices connected with SuperSpeed will exhibit extra USB SuperSpeed Endpoint Companion Descriptors. This patch handles these USB SuperSpeed specific USB Descriptors. Change-Id: Icd1e5fdde0b324c7df4f933583499f2c52a922f3 Signed-off-by: Ingo Rohloff <lundril@gmx.de>
This commit is contained in:
parent
8b2d46a5fc
commit
58b01e0187
|
@ -237,8 +237,20 @@ static void find_usb_device(const char *base,
|
|||
// looks like ADB...
|
||||
ep1 = (struct usb_endpoint_descriptor *)bufptr;
|
||||
bufptr += USB_DT_ENDPOINT_SIZE;
|
||||
// For USB 3.0 SuperSpeed devices, skip potential
|
||||
// USB 3.0 SuperSpeed Endpoint Companion descriptor
|
||||
if (bufptr+2 <= devdesc + desclength &&
|
||||
bufptr[0] == USB_DT_SS_EP_COMP_SIZE &&
|
||||
bufptr[1] == USB_DT_SS_ENDPOINT_COMP) {
|
||||
bufptr += USB_DT_SS_EP_COMP_SIZE;
|
||||
}
|
||||
ep2 = (struct usb_endpoint_descriptor *)bufptr;
|
||||
bufptr += USB_DT_ENDPOINT_SIZE;
|
||||
if (bufptr+2 <= devdesc + desclength &&
|
||||
bufptr[0] == USB_DT_SS_EP_COMP_SIZE &&
|
||||
bufptr[1] == USB_DT_SS_ENDPOINT_COMP) {
|
||||
bufptr += USB_DT_SS_EP_COMP_SIZE;
|
||||
}
|
||||
|
||||
if (bufptr > devdesc + desclength ||
|
||||
ep1->bLength != USB_DT_ENDPOINT_SIZE ||
|
||||
|
|
Loading…
Reference in New Issue