我搜索过搜索过的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)
答案 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。希望这会有所帮助。