我搜索了一遍 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/