在Java应用程序中访问USB设备详解 |
| 作者:佚名 来源:赛迪网 更新:2006-8-25 21:05:35 错误报告 我要投稿 |
|
USB 网络中的通信可以使用下面 四种数据传输类型中的任意一种 :
控制传输: 这些是一些短的数据包,用于设备控制和配置,特别是在设备附加到主机上时。
批量传输: 这些是 数量相对大的数据包。像扫描仪或者 SCSI 适配器这样的设备使用这种传输类型。
中断传输: 这些是 定期轮询的数据包。主控器会以特 定的间隔自动发出一个中断。
等时传输: 这些是实时的数据流,它们对带宽的要求高于可靠性要求 。音频和视频设备一般使用这种传输 类型。
像串行端口一样,计算机上每一个 USB 端口都由 USB 控制器指定了一个惟一的标识数字(端口 ID) 。当 USB 设备附加到 USB 端口上时 ,就将这个 惟一 端口 ID 分配给这台设备,并且 USB 控制器会读取设备描述符。设备描述符包括适用于该设备的全局 信息、以及设备的配置信息。配置定 义了一台 USB 设备的功能和 I/O 行为。一台 USB 设备可以有一个或者多个配置,这由它们相应的配置描述符所描述。 每一个配置都有一个或者多个接口, 它可以视为 一 个物理通信渠道 ;每一个接口有零个或者多个端点,它可以是数据提供者或者数据消费者,或者同时具 有这两种身份。接口由接口描述符描述 ,端点 由端 点描述符描述。并且一台 USB 设备可能还有字符串描述符以提供像厂商名、设备名或者序列号这样的附 加信息。
正如您所看到的, 像 USB 这样的协议为使用 Java 这种强调平台和硬件无关性的语言的开发人员提出了挑战。现在让我们看两个试图 解决这个问题的项 目 。
jUSB API
jUSB 项目是由 Mojo Jojo 和 David Brownell 于 2000年 6月创立的。其目标是提 供一组免费的、在 Linux 平台上访 问 USB 设备的 Java API。这个 API 是 按照 Lesser GPL (LGPL)条款发表的,这意味着您可以在专有和免费软件项目中使 用它。这个 API 提供了对多个物理 USB 设备的多线程访问,并支持本 机和远程设备。具有多个接口的设备可以同时被多个应用程序(或者设备驱动程序)所访 问,其中每一个应用程序(或者设 备驱动程序)都占据一个不同的接 口 。该 API 支持控制传输、批量传输和中断传输,不支持等时传输,因为等时传输用于媒 体数据(如音频和视频),JMF API 已经在其他标准设备驱动程序 上 对此提供了很好的支持(参阅 参考资料)。当前,该 API 可以在具有 Linux 2.4 核心或者以前 的 2.2.18 核心的 GNU/Linux 版本 上工作。因此可支持大多 数最 新的版本,例如,该 API 可以在没有任何补丁或者升级的 Red Hat 7.2 和 9.0 上工作。
jUSB API 包括以下包 :
1.usb.core: 这个包是 jUSB API 的核心部分。它使得 Java 应用程序可以从 USB 主机访问 USB 设备。
2.usb.linux: 这个包包含 usb.core.Host 对象的 Linux 实现、bootstrapping 支持和其他可以提升 Linux USB 支持的类。这个实现通过虚拟 USB 文件系统 (usbdevfs)访问 USB 设备。
3.usb.windows: 这个包包含 usb.core.Host 对象的 Windows 实现、bootstrapping 支持和其他可以 提升 Windows USB 支持的类。 这个实现仍然处于非 常初级的阶段。
4.usb.remote: 这个包是 usb.core API 的远程版本。它包括一个 RMI proxy 和一个 daemon 应用程序,它让 Java 应用程序可以访问远程计算机上的 USB 设备。
5.usb.util: 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设 备工具转换成一个套接字(socket)。
6.usb.devices: 这个可选包收集了用 jUSB API 访问不同 USB 设备的 Java 代码,包括柯达数码相机和 Rio 500 MP3 播放器。这些 API 经过特别编写以简 化 访问特定 USB 设备的过程,并且不能用于 访问其他设备。这些 API 是在 usb.core API 之上构建的,它们可以工作在所有支持 jUSB 的操作系统上。
7.usb.view: 这个可选包提供了基于 Swing 的 USB 树简单浏览器。它是一个展示 jUSB API 应用的很好的示例程序。
尽管 usb.core.Host 对象的实现对于不同的操作系统是不同的 ,但是 Java 程序员只需要理解 usb.core 包就可以用 jUSB API 开始应用程序的开发。表 1 列出了 usb.core 的接口 和类,Java 程序员应该熟悉它们:
表 1. jUSB 中的接口和类
| 接口/类 |
说明 |
| Bus |
将一组 USB 设备连接到 Host 上 |
| Host |
表示具有一个或者 多个 Bus 的 USB 控制器 |
| Configuration |
提供对设备所支持的 USB 配置的访问,以及对与该配置关联的 接口的访问 |
| Descriptor |
具有 USB 类型的描述符的实体的基类 |
| Device |
提供对 USB 设备的访问 |
| DeviceDescriptor |
提供对 USB 设备描述符的访问 |
| EndPoint |
提供对 USB 端点描述符的访问、在给定设备配置中构造设备数据输入或者输出 |
| HostFactory |
包 含 bootstrapping 方法 |
| Hub |
提供对 USB hub 描述 符以及一些 hub 操作的访问 |
| Interface |
描述一组端点,并与一个特定设备配置相关联 |
| PortIdentifier |
为 USB 设备提供稳定的字符串标识符,以便在操作和故障诊断时使 |
上一页 [1] [2] [3] [4] 下一页 |
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |