1

我已经搜索和搜索了 SO、Google 等,并且在任何地方我得到的代码都与下面的代码大致相似。例如,我试过这个。我尝试使用 root 和其他方式运行它。但是,附加设备的数量始终为零。你能告诉我为什么会发生这种情况吗?

这是在 32 位的 Ubuntu-12.04 上。

Java代码:

    package com.me.test;

    import java.io.UnsupportedEncodingException;
    import java.util.List;
    import javax.usb.UsbDevice;
    import javax.usb.UsbDisconnectedException;
    import javax.usb.UsbException;
    import javax.usb.UsbHostManager;
    import javax.usb.UsbHub;
    import javax.usb.UsbServices;

    public class ListUsbDevices {
        public static void main(String[] args) throws SecurityException, UsbException, UnsupportedEncodingException, UsbDisconnectedException {
            UsbServices services = UsbHostManager.getUsbServices();
            UsbHub rootHub = services.getRootUsbHub();

            List<UsbDevice> devices = rootHub.getAttachedUsbDevices();
            if (devices.size()>0) {
                System.out.println("USB devices found.");
            } else {
                System.out.println("No USB devices found.");
            }

            for (UsbDevice device : devices) {
                System.out.println("\tProduct String " + device.getProductString());
                System.out.println("\tManufacturer String " + device.getManufacturerString());
                System.out.println("\tSerial Number " + device.getSerialNumberString());
            }


        }
    }

lsusb 输出:

    user@host:~$ sudo lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 010: ID 03eb:2013 Atmel Corp. 
    user@host:~$ sudo lsusb -s 4:10 -v
    Bus 004 Device 010: ID 03eb:2013 Atmel Corp. 
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass            0 (Defined at Interface level)
      bDeviceSubClass         0 
      bDeviceProtocol         0 
      bMaxPacketSize0        32
      idVendor           0x03eb Atmel Corp.
      idProduct          0x2013 
      bcdDevice           10.00
      iManufacturer           1 AppliedSensor
      iProduct                2 iAQ Stick
      iSerial                 0 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength           41
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass         3 Human Interface Device
          bInterfaceSubClass      0 No Subclass
          bInterfaceProtocol      0 None
          iInterface              0 
            HID Device Descriptor:
              bLength                 9
              bDescriptorType        33
              bcdHID               1.11
              bCountryCode            0 Not supported
              bNumDescriptors         1
              bDescriptorType        34 Report
              wDescriptorLength      53
             Report Descriptors: 
               ** UNAVAILABLE **
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0010  1x 16 bytes
            bInterval              10
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0010  1x 16 bytes
            bInterval              10
    Device Status:     0x0000
      (Bus Powered)
4

1 回答 1

0

javax.usb 的内容很大程度上取决于您正在运行的 linux 的风格,以及您机器的一般配置。

您应该尝试在您的机器上下载并运行sourceforge上的示例程序。如果这些不起作用,那么您应该假设您需要更改机器的配置或有关您的运行时的某些内容。

我在使用这个库时遇到了一些问题,并得到了以下建议。这些信息可能已经过时了,但它可能有助于为您指明正确的方向:

下载并构建后,您需要确保 libjusb.so 被复制到 $JAVA_HOME/jre/lib/i386,并且它具有您的用户的读取和执行权限。还要确保您安装了 usbdevfs 虚拟设备,并且您的用户对它具有适当的 R/W 访问权限。

最后,根据您要与之通信的 USB 设备,您可能 需要禁用热插拔(或至少将任何可能尝试与您的设备通信的已安装模块列入黑名单)。如果设备已经在 Linux 中获得支持,hotplug 将加载它的关联模块并为其提供独占 I/O 访问权限,然后您才能从 jUSB 获取设备。

上面引用的文字来自 Brad Barclay。希望这可以帮助。

于 2012-11-08T17:32:13.193 回答