尽管 JSR-80 API 的操作系统无关的实现在不同的操作系统上是不同的,但是
Java 程序员只需要理解 javax.usb 包就可以开始开发应用程序了。表 2 列出了 javax.usb 中的接口和类,
Java 程序员应该熟悉它们:
表 2. JSR-80 API 中的接口和类
接口 说明
UsbConfiguration 表示 USB 设备的配置
UsbConfigurationDescriptor USB 配置描述符的接口
UsbDevice USB 设备的接口
UsbDeviceDescriptor USB 设备描述符的接口
UsbEndpoint USB 端点的接口
UsbEndpointDescriptor USB 端点描述符的接口
UsbHub USB hub 的接口
UsbInterface USB 接口的接口
UsbInterfaceDescriptor USB 接口描述符的接口
UsbPipe USB 管道的接口
UsbPort USB 端口的接口
UsbServices javax.usb 实现的接口
类 说明
UsbHostManager javax.usb 的入口点
用 JSR-80 API 访问 USB 设备的正常过程如下:
·通过从 UsbHostManager 得到相应的 UsbServices 进行 Bootstrap。
·通过 UsbServices 访问 root hub。在应用程序中 root hub 就是一个 UsbHub。
·获得连接到 root hub 的 UsbDevices 清单。遍历所有低级 hub 以找到正确的 UsbDevice。
·用控制消息(UsbControlIrp)与 UsbDevice 直接交互,或者从 UsbDevice 的相应 UsbConfiguration 中要求一个 UsbInterface 并与该 UsbInterface 上可用的 UsbEndpoint 进行 I/O。
·如果一个 UsbEndpoint 用于进行 I/O,那么打开与它关联的 UsbPipe。通过这个 UsbPipe 可以同步或者异步提交上行数据(从 USB 设备到主计算机)和下行数据(从主计算机到 USB 设备)。
·当应用程序不再需要访问该 UsbDevice 时,关闭这个 UsbPipe 并释放相应的 UsbInterface。
在清单 3 中,我们用 JSR-80 API 获得 USB 系统的内容。这个程序递归地遍历 USB 系统上的所有 USB hub 并找出连接到主机计算机上的所有 USB 设备。这段代码对应于上述步骤 1 到步骤 3。
清单 3. 用 JSR-80 API 获得 USB 系统的内容
import javax.usb.*;
import java.util.List;
public class TraverseUSB
{
public static void main(String argv[])
{
try
{
// Access the system USB services, and access to the root
// hub. Then traverse through the root hub.
UsbServices services = UsbHostManager.getUsbServices();
UsbHub rootHub = services.getRootUsbHub();
traverse(rootHub);
} catch (Exception e) {}
}
public static void traverse(UsbDevice device)
{
if (device.isUsbHub())
{
// This is a USB Hub, traverse through the hub.
List attachedDevices = ((UsbHub) device).getAttachedUsbDevices();
for (int i=0; i {
traverse((UsbDevice) attachedDevices.get(i));
}
}
else
{
// This is a USB function, not a hub.
// Do something.
}
}
}