如何判断USB Host设备类型?

问题描述 投票:0回答:1

我正在尝试使用 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
是U盘,
019
是鼠标。我不知道
003
是什么,也许是内部端口或其他端口之一(我有
adb
通过板载以太网连接)。

根据this documentation

USB_CLASS_MASS_STORAGE
的协议是
8
0
涉及
USB_CLASS_PER_INTERFACE

如果它们都返回

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

android xamarin xamarin.android
1个回答
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
。我无法解释这个。

© www.soinside.com 2019 - 2024. All rights reserved.