在Java应用程序中访问USB设备

虽然这种无关性有许多好处, 但是它也使得编写与硬件交互的Java使用顺序的进程变得相当复杂。 虽然这两个项目依然处于萌芽状态, 并已经成为一些实用使用顺序的根底。 由于它的低成本、高数据传输率、使用容易和灵活性, 今天, 许多周边设备和装置都是通过USB接口连接到计算机上的。 不过, 所以编写与USB设备交互的使用顺序是相当困难的。

  IBM的DanStreetman最早末尾了在Java言语中提供对USB设备的访问的努力。 他的项目通过Java规范请求(JavaSpecificationRequest, 这个项目现在称为JSR-80并且指定了官方包javax. 同时, 这两个项目都开收回了Linux开发人员可以使用的包, 虽然它们都还没有开收回可以使用的包(参阅参考资料中有关本文中讨论的这两个项目及其他项目的资料)。

  在本文中, 不过, 我们首先要看一下USB

  协议的详细细节, 这样您就可以理解这两个项目是如何与USB设备交互的。 1996年1月, 宣布了USB规范的第一个版本, 这个规范允许127台设备同时连接到一同, 总的通信带宽限制为12Mbps。 又有三个成员(Hewlett-Packard、Lucent和Philips)参加了这个联盟。 它还使各种低速设备(键盘、鼠标、游戏外设、虚拟理想外设)连接到PC上。 每一段连线都是hub与USB设备的点对点连接, 后者可以是为系统提供更多附加点的另一个hub, 主机使用主/从协议与USB设备通信。 这种方式解决了包冲突的问题,

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

  USB网络中的通信可以使用下面四种数据传输类型中的任意一种:

  控制传输:这些是一些短的数据包, 用于设备控制和配置, 特别是在设备附加到主机上时。

  中缀传输:这些是定期轮询的数据包。

  等时传输:这些是实时的数据流, 它们对带宽的要求高于可靠性要求。 当USB设备附加到USB端口上时, 设备描述符包括适用于该设备的全局信息、以及设备的配置信息。 配置定义了一台USB设备的功能和I/O行为。 这由它们相应的配置描述符所描述。 它可以视为一个物理通信渠道;每一个接口有零个或许多个端点, 或许同时具有这两种身份。 接口由接口描述符描述, 并且一台USB设备可能还有字符串描述符以提供像厂商名、设备名或许序列号这样的附加信息。

  正如您所看到的, 现在让我们看两个试图解决这个问题的项目。 其目标是提供一组免费的、在Linux平台问USB设备的JavaAPI。 这个API是依照LesserGPL(LGPL)条款宣布的, 这意味着您可以在专有和免费软件项目中使用它。 并支持本机和远程设备。 其中每一个使用顺序(或许设备驱动顺序)都占据一个不同的接口。 不支持等时传输, JMFAPI已经在其他规范设备驱动顺序上对此提供了很好的支持(参阅参考资料)。 当前, 4核心或许以前的2. 2. 18核心的GNU/Linux版本上工作。 2和9. 0上工作。

posted on 2011-03-24 00:03  青青啊  阅读(600)  评论(0编辑  收藏  举报

导航