如何判断usb设备的类型

1.USB的设备类型定义在UsbConstants.java 中,有以下几种

2.那到底怎么知道usb外设的类型是属于那种呢,通过以下接口

2.1若是mtk方案,外接设备后,从kernel log可以看得到

<6>[ 9047.548616]  (2)[17:kworker/2:0]hid-generic0003:0C2E:0E4A.001D: hidraw0: USB HID v1.10Device [xxxxxxxx] on usb-musb-hdrc.0.auto-1.2.1/input2

0003:0C2E:0E4A.001D对应设备的VID PID的16进制数,前面的0003是设备的类型

2.2 但是有写有vendor自定义的类型则无法直观的看出

从sys log可以看到以下打印信息,其中mClass=255就是我们想要知道的类型,此处为255及ffh,对应UsbConstants中的 USB_CLASS_VENDOR_SPEC

UsbHostManager: Added device UsbDevice[mName=/dev/bus/usb/001/030,mVendorId=5246,mProductId=8214,mClass=0,mSubclass=0,mProtocol=0,mManufacturerName=UPEK,mProductName=Biometric Coprocessor,mVersion=1.16,mSerialNumber=null,mConfigurations=[
01-01 23:45:56.345537   769  1052 D UsbHostManager: UsbConfiguration[mId=1,mName=null,mAttributes=160,mMaxPower=50,mInterfaces=[
01-01 23:45:56.345537   769  1052 D UsbHostManager: UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=255,mSubclass=0,mProtocol=0,mEndpoints=[
01-01 23:45:56.345537   769  1052 D UsbHostManager: UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=64,mInterval=0]
01-01 23:45:56.345537   769  1052 D UsbHostManager: UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=64,mInterval=0]
01-01 23:45:56.345537   769  1052 D UsbHostManager: UsbEndpoint[mAddress=131,mAttributes=3,mMaxPacketSize=4,mInterval=20]]]]

以上信息存在于UsbDevice.java中

可以按照自己的格式显示usb设备插入时的相关信息

private String listUsbDevices(boolean all)
    {
     UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
      HashMap deviceList = usbManager.getDeviceList();


      if (deviceList.size() == 0)
      {
        return "no usb devices found";
      }


      Iterator deviceIterator = deviceList.values().iterator();
      String returnValue = "";
 
      while (deviceIterator.hasNext())
      {
        UsbDevice device = (UsbDevice)deviceIterator.next();
        if ((device.getVendorId() == xxxx) && ((device.getProductId() == xxxx) )) //这里可以过滤你所关心的pid vid
        {
          
          if (!all)
          {
            returnValue = returnValue + "Model: " + device.getDeviceName() + "\r\n";
            returnValue = returnValue + "ID: " + device.getDeviceId() + "\r\n";
            returnValue = returnValue + "Class: " + device.getDeviceClass() + "\r\n";
            returnValue = returnValue + "Protocol: " + device.getDeviceProtocol() + "\r\n";
            returnValue = returnValue + "Vendor ID " + device.getVendorId() + "\r\n";
            returnValue = returnValue + "Product ID: " + device.getProductId() + "\r\n";
            returnValue = returnValue + "Interface count: " + device.getInterfaceCount() + "\r\n";
            returnValue = returnValue + "---------------------------------------\r\n";


            for (int index = 0; index < device.getInterfaceCount(); index++)
            {
              UsbInterface mUsbInterface = device.getInterface(index);
              returnValue = returnValue + "  *****     *****\r\n";
              returnValue = returnValue + "  Interface index: " + index + "\r\n";
              returnValue = returnValue + "  Interface ID: " + mUsbInterface.getId() + "\r\n";
              returnValue = returnValue + "  Inteface class: " + mUsbInterface.getInterfaceClass() + "\r\n";
              returnValue = returnValue + "  Interface protocol: " + mUsbInterface.getInterfaceProtocol() + "\r\n";
              returnValue = returnValue + "  Endpoint count: " + mUsbInterface.getEndpointCount() + "\r\n";


              for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++)
              {
                UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi);
                returnValue = returnValue + "    ++++   ++++   ++++\r\n";
                returnValue = returnValue + "    Endpoint index: " + epi + "\r\n";
                returnValue = returnValue + "    Attributes: " + mEndpoint.getAttributes() + "\r\n";
                returnValue = returnValue + "    Direction: " + mEndpoint.getDirection() + "\r\n";
                returnValue = returnValue + "    Number: " + mEndpoint.getEndpointNumber() + "\r\n";
                returnValue = returnValue + "    Interval: " + mEndpoint.getInterval() + "\r\n";
                returnValue = returnValue + "    Packet size: " + mEndpoint.getMaxPacketSize() + "\r\n";
                returnValue = returnValue + "    Type: " + mEndpoint.getType() + "\r\n";
              }
            }
            returnValue = returnValue + "\n";
            returnValue = returnValue + "\n";
          }


        }
        else if (device.getVendorId() != 3118);
        if (all == true)
        {
          returnValue = returnValue + "Model: " + device.getDeviceName() + "\r\n";
          returnValue = returnValue + "ID: " + device.getDeviceId() + "\r\n";
          returnValue = returnValue + "Class: " + device.getDeviceClass() + "\r\n";
          returnValue = returnValue + "Protocol: " + device.getDeviceProtocol() + "\r\n";
          returnValue = returnValue + "Vendor ID " + device.getVendorId() + "\r\n";
          returnValue = returnValue + "Product ID: " + device.getProductId() + "\r\n";
          returnValue = returnValue + "Interface count: " + device.getInterfaceCount() + "\r\n";
          returnValue = returnValue + "---------------------------------------\r\n";


          for (int index = 0; index < device.getInterfaceCount(); index++)
          {
            UsbInterface mUsbInterface = device.getInterface(index);
            returnValue = returnValue + "  *****     *****\r\n";
            returnValue = returnValue + "  Interface index: " + index + "\r\n";
            returnValue = returnValue + "  Interface ID: " + mUsbInterface.getId() + "\r\n";
            returnValue = returnValue + "  Inteface class: " + mUsbInterface.getInterfaceClass() + "\r\n";
            returnValue = returnValue + "  Interface protocol: " + mUsbInterface.getInterfaceProtocol() + "\r\n";
            returnValue = returnValue + "  Endpoint count: " + mUsbInterface.getEndpointCount() + "\r\n";


            for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++)
            {
              UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi);
              returnValue = returnValue + "    ++++   ++++   ++++\r\n";                                                                                                                                                             
              returnValue = returnValue + "    Endpoint index: " + epi + "\r\n";
              returnValue = returnValue + "    Attributes: " + mEndpoint.getAttributes() + "\r\n";
              returnValue = returnValue + "    Direction: " + mEndpoint.getDirection() + "\r\n";
              returnValue = returnValue + "    Number: " + mEndpoint.getEndpointNumber() + "\r\n";
              returnValue = returnValue + "    Interval: " + mEndpoint.getInterval() + "\r\n";
              returnValue = returnValue + "    Packet size: " + mEndpoint.getMaxPacketSize() + "\r\n";
              returnValue = returnValue + "    Type: " + mEndpoint.getType() + "\r\n";
            }
          }
        }
      }
      textView.setText(returnValue);  
      return returnValue;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值