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

oymdgrw7  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(98)

我试图使用this guide at android.developers读取USB大容量存储闪存驱动器的内容。我在决定哪个驱动器实际上是闪存驱动器时遇到了问题。
我将使用以下代码迭代设备:

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是什么,也许是内部的东西或其他端口之一(我有adb通过板载以太网连接)。
根据此文档,USB_CLASS_MASS_STORAGE的协议是80USB_CLASS_PER_INTERFACE相关
如果两个设备都返回USB_CLASS_PER_INTERFACE,我如何在代码中确定哪个设备是闪存驱动器?我已经查看了UsbDevice的其他属性,似乎没有返回任何对我有用的东西。

az31mfrm

az31mfrm1#

我看错了协议。

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。我无法解释这一点。

相关问题