javax.usb : Number of attached devices is always zero

标签 java usb

我搜索了一遍 SO、Google 等,到处都得到了与下面的代码大致相似的代码。例如,我尝试了 this 。我尝试用 root 或其他方式运行它。但是,连接的设备数量始终为零。您能告诉我为什么会发生这种情况吗?

这是在 Ubuntu-12.04,32 位上。

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)

最佳答案

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

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

我在使用这个库时遇到了一些问题,并得到了 the following recommendations 。此信息可能相当过时,但它可能会帮助您指明正确的方向:

Once downloaded and built, you need to ensure that libjusb.so gets copied over to $JAVA_HOME/jre/lib/i386, and that it has read and evecute permissions for your user. Also ensure that you have the usbdevfs virtual device mounted, and that your user has proper R/W access to it.

Lastly, depending on what USB device you want to talk to, you may need to disable hotplug (or at least blacklist any installed modules that may also attempt to talk to your device). If the device already has support in Linux, hotplug will load it's associated module and give it exclusive I/O access before you can grab the device from jUSB.

以上引用的文字来自 Brad Barclay。希望这会有所帮助。

关于javax.usb : Number of attached devices is always zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294117/

相关文章:

JavaFX 多边形平移、旋转、缩放及其点

javascript - 如何从 USB 端口向 HTML 网站发送信号?

linux - Raspbian 中的 Mediatec 7610U wifi dongle 驱动程序

c# - 如何在可执行文件中记录序列号?

java - 使用 Java 和 RXTX 检测 USB CDC 设备连接/断开

java - 使用 C/C++ 或 Java 打开现金抽屉

java - Spring Data MongoDB 标识符作为对象

Java XmlRPC 身份验证

java - 如何读取二进制格式的 "see"音频文件?

Java XMLStreamReader.getText() 因 XML 编码字符而阻塞?