在Java应用程序中访问USB设备详解-Java基础-Java-编程开发

来源:互联网 发布:搜狐新闻软件下载 编辑:程序博客网 时间:2024/05/22 05:13
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过 程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽 然 这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些实用应用程序的基础。

通用串行总线 (Universal Serial Bus USB)规范的第一个版本发表于 1996年 1月。因为它的低成本、高数据传输率、使 用 容易和灵活性,USB 在计算机行业里获得了广 泛 接受。今天,许多周边设备和装置都是通过 USB 接口连接到计算机上的。目前,大多数一般用途的 操作 系统都提供了对 USB 设备的支持,并且用 C 或 者 C 可以相对容易地开发访问这些外设的应用程序。不过,Java 编程语言在设计上对硬件访问提 供的 支持很少,所以编写与 USB 设备交互的应用程序 是相 当困难的。

IBM 的 Dan Streetman 最早开始了在 Java 语言中提供对 USB 设备的访问的努力。2001年,他的项目通 过 Java 规范请求(Java Specification Request,JSR)过程被接受为 Java 语言的候选扩展标准。这个项目现在称为 JSR-80 并且指定了官方包 javax.usb。同 时 ,在 2000年 6月 ,Mojo Jojo 和 David Brownell 在 SourceForge 开始了 jUSB 项目。这两个项目都开发出了 Linux 开发人员可以使用的包,尽管它们都 还 很不完善。这两 个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中 有关本文中讨 论的这两个项目及其他项目的资料)。

在本文中,将对 jUSB 和 JSR-80 项目作一个简要介绍,不过,我 们首 先要看一下 USB 协议的具体细节,这样您就可以理解这两 个 项目是如何与 USB 设备交互的。我们还将提供代码片段以展示如何用这两个项目的 API 访问 USB 设备。

USB 介绍

1994年,一个由四个行业伙伴 (Compaq 、Intel、Microsoft 和 NEC)组成的联盟开始制定 USB 协议。该协议最初的目的是将 PC 与 电话相连并提供容易扩展和重新配置的 I/O 接口。1996 年 1月, 发表了 USB 规范的第一个版本,1998年 9月发表了后续版本(版本 1.1)。这个规范允 许 127台设备同时连接到一起,总的通信带宽限制为 12 Mbps。后来, 又有三个成员(Hewlett-Packard、Lucent 和 Philips)加入了这个联盟。2000年 4 月, 发表了 USB 规范的 2.0版本,它支持高达 480 Mbps 的传输率。今天 ,USB 在高速(视频、图像、储存)和全速(音频、宽带、麦克风)数据传输应用 中起了 关键作用。它还使各种低速设备(键盘、鼠标、游戏外 设、虚拟现实外设 )连接到 PC 上。

USB 协议有严格的层次结构。在所有 USB 系统中,只有一个主设备,到主计算机的 的 USB 接口称为主 控器(host controller)。主 控器有两个标准??开放主控器接口(Compaq 的 Open Host Controller Interface,OHCI)和通用主控器接口 (Intel 的 Universal Host Controller Interface,UHCI)。这两个标准提供了同样的能力,并可用于所有的 USB 设备,UHCI 的硬件实现更简单一些,但是需 要更复杂的设备驱动 程序(因而 CPU 的负荷更大一些)。

USB 物理互连是分层的星形拓朴,最多有七层。一个 hub 是每个 星形的中心,USB 主 机被认为是 root hub。每一段连线都是 hub 与 USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一 个提供功能的某种设 备。主机使用主/从协议与 USB 设备通信 。这种方式解决了包冲突的问题,但是同时也阻止了附加的设备彼此建立直接通信。

所有传输的数据都是由主控器发起的。数据从主机流向设备称为下行(downstream)或者输出(out)传输,数据从设备流向主机称 为 上 行(upstream)或者输入(in)传输。数据传输发生在主机和 USB 设备上特定的端点(endpoint) 之间,主机与端点之间的数据链接称为管道(pipe)。 一个给 定的 USB 设备可以有许多个端点,主机与设备之间数据管道的数量与该设备上端点的数量相同。一个管道可以是单向或者是双向的,一个管道中的数据 流 与所 有其他管道中的数据流无关。

[1][2][3][4]

原创粉丝点击