javax.usb:连接设备的数量始终为零

时间:2012-11-08 17:11:49

标签: 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)

1 个答案:

答案 0 :(得分:0)

javax.usb的东西很大程度上取决于你运行的linux的风格,以及你机器的配置。

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

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

  

下载并构建后,您需要确保libjusb.so获得   复制到$ JAVA_HOME / jre / lib / i386,它已读取和   为您的用户提供evecute权限。还要确保你拥有   已安装usbdevfs虚拟设备,并且您的用户具有正确的R / W.   访问它。

     

最后,根据您要与之通话的USB设备,可能   需要禁用hotplug(或至少黑名单任何已安装的模块   也可能尝试与您的设备通话)。如果设备已经   在Linux中有支持,hotplug将加载它的相关模块和   在您从jUSB获取设备之前,请先进行独占I / O访问。

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