如何确定USB主机设备类型?

时间:2016-07-22 11:04:41

标签: android xamarin xamarin.android

我正在尝试使用this guide at android.developers读取USB海量存储闪存驱动器的内容。我在确定哪个驱动器实际上是闪存驱动器时遇到了问题。

我正在使用此代码迭代设备:

ID

我插入了两个设备,一个鼠标和一个闪存驱动器。

以上代码产生以下内容:

    protected override void OnResume()
    {
        usbManager = (UsbManager)this.GetSystemService(Context.UsbService);
        monitorUsb();
    }

    private async void monitorUsb()
    {
        var deviceList = usbManager.DeviceList;
        foreach (var device in deviceList.Values)
        {
            Debug.WriteLine("USB",device.DeviceName);
            Debug.WriteLine("USB",device.DeviceProtocol.ToString());
        }
        await Task.Delay(30000);
        monitorUsb();
    }

通过消除过程,[0:] /dev/bus/usb/003/003 [0:] 0 [0:] /dev/bus/usb/003/019 [0:] 0 [0:] /dev/bus/usb/003/020 [0:] 0 是闪存驱动器,020是鼠标。我不知道019是什么,也许是内部或其他端口之一(我通过板载以太网连接003)。

根据this documentationadb的协议为USB_CLASS_MASS_STORAGE80

相关

如果代码返回USB_CLASS_PER_INTERFACE,如何确定代码中的哪些设备是闪存驱动器?我查看了USB_CLASS_PER_INTERFACE的其他属性,似乎没有任何对我有用的东西。

1 个答案:

答案 0 :(得分:1)

我看错了协议。

        foreach (var device in deviceList.Values)
        {
            for (int i = 0; i < device.InterfaceCount; i++)
            {
                var deviceInterface = device.GetInterface(i) as UsbInterface;
                Debug.WriteLine("USB", deviceInterface.InterfaceProtocol.ToString());
            };

            //Debug.WriteLine("USB", device.DeviceName);
            //Debug.WriteLine("USB", device.DeviceProtocol.ToString());
        }

如文档所示,这会将协议返回为80而不是8。我无法解释这一点。