Fix incorrect parsing of UVC interface descriptor

Every USB device that has CS_INTERFACE descriptor was incorrectly
assumed to be an UAC device, without checking the device class.
This led to incorrect parsing of UVC devices, which also have
CS_INTERFACE type descriptors. For some devices the parsing worked
by coincidence, for others it lead to incorrect device data (wrong
vid, pid, etc).

This change parses every CS_INTERFACE descriptor that does not belong
to an UAC device as type 'Unknown'.

Test: Connect a UVC camera, observe logcat.  Before this change, there
were lots of parsing errors in logcat, now the device is added cleanly.

Bug: 124374863
Change-Id: Ic076438625a733cffa9ae51ba803e353fd064ceb
Signed-off-by: Kamen Kirov <knk@pupil-labs.com>
This commit is contained in:
Kamen Kirov
2019-02-13 14:20:35 +02:00
committed by Emilian Peev
parent 32bfd77b79
commit b83cf0c7f1

View File

@@ -177,11 +177,15 @@ public final class UsbDescriptorParser {
* Audio Class Specific
*/
case UsbDescriptor.DESCRIPTORTYPE_AUDIO_INTERFACE:
descriptor = UsbACInterface.allocDescriptor(this, stream, length, type);
if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) {
descriptor = UsbACInterface.allocDescriptor(this, stream, length, type);
}
break;
case UsbDescriptor.DESCRIPTORTYPE_AUDIO_ENDPOINT:
descriptor = UsbACEndpoint.allocDescriptor(this, length, type);
if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) {
descriptor = UsbACEndpoint.allocDescriptor(this, length, type);
}
break;
default: