,Java   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,Java
您的位置:Yesky > 软件 > 开发者网络 > 正文
在 Java 应用程序中访问USB设备
[文章信息]
作者:羽斌
时间:2005-05-28
出处:Java研究组织
责任编辑:方舟
[文章导读]
在本文通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易
advertisement
热点推荐
· 图文详解:黑客入侵方式演示
· Java异常处理的陋习展播
· 多媒体系列教程:网页设计制作
· Powerpoint动画演示教程连载
· 光盘刻录手册:禁忌与技巧(下)
[正文]

上一页  1 2 3 4  下一页

  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 包括以下包:
 
  ·usb.core: 这个包是 jUSB API 的核心部分。它使得 Java 应用程序可以从 USB 主机访问 USB 设备。

  ·usb.linux: 这个包包含 usb.core.Host 对象的 Linux 实现、bootstrapping 支持和其他可以提升 Linux USB 支持的类。这个实现通过虚拟 USB 文件系统(usbdevfs)访问 USB 设备。

  ·usb.windows: 这个包包含 usb.core.Host 对象的 Windows 实现、bootstrapping 支持和其他可以提升 Windows USB 支持的类。这个实现仍然处于非常初级的阶段。

  ·usb.remote: 这个包是 usb.core API 的远程版本。它包括一个 RMI proxy 和一个 daemon 应用程序,它让 Java 应用程序可以访问远程计算机上的 USB 设备。

  ·usb.util: 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设备工具转换成一个套接字(socket)。

  ·usb.devices: 这个可选包收集了用 jUSB API 访问不同 USB 设备的 Java 代码,包括柯达数码相机和 Rio 500 MP3 播放器。这些 API 经过特别编写以简化访问特定 USB 设备的过程,并且不能用于访问其他设备。这些 API 是在 usb.core API 之上构建的,它们可以工作在所有支持 jUSB 的操作系统上。

  ·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 设备提供稳定的字符串标识符,以便在操作和故障诊断时使用

  用 jUSB API 访问一台 USB 设备的正常过程如下:

  ·通过从 HostFactory 得到 USB Host 进行 Bootstrap。

  ·从 Host 访问 USB Bus,然后从这个 Bus 访问 USB root hub(即 USB Device)。

  ·得到 hub 上可用的 USB 端口数量,遍历所有端口以找到正确的 Device。

  ·访问附加到特定端口上的 USB Device。可以用一台 Device 的 PortIdentifier 直接从 Host 访问它,也可以通过从 root hub 开始遍历 USB Bus 找到它。

  ·用 ControlMessage 与该 Device 直接交互,或者从该 Device 的当前 Configuration 中要求一个 Interface,并与该 Interface 上可用的 Endpoint 进行 I/O 。

  清单 1 展示了如何用 jUSB API 获得 USB 系统中的内容。这个程序编写为只是查看 root hub 上可用的 USB 设备,但是很容易将它改为遍历整个 USB 树。这里的逻辑对应于上述步骤 1 到步骤 4。

  清单 1. 用 jUSB API 获得 USB 系统的内容

import usb.core.*;

public class ListUSB
{
 public static void main(String[] args)
 {
  try
  {
   // Bootstrap by getting the USB Host from the HostFactory.
   Host host = HostFactory.getHost();

   // Obtain a list of the USB buses available on the Host.
   Bus[] bus = host.getBusses();
   int total_bus = bus.length;

   // Traverse through all the USB buses.
   for (int i=0; i<total_bus; i++)
   {
    // Access the root hub on the USB bus and obtain the
    // number of USB ports available on the root hub.
    Device root = bus[i].getRootHub();
    int total_port = root.getNumPorts();

    // Traverse through all the USB ports available on the
    // root hub. It should be mentioned that the numbering
    // starts from 1, not 0.
    for (int j=1; j<=total_port; j++)
    {
     // Obtain the Device connected to the port.
     Device device = root.getChild(j);
     if (device != null)
     {
      // USB device available, do something here.
     }
    }
   }
  } catch (Exception e)
  {
   System.out.println(e.getMessage());
  }
 }


上一页  1 2 3 4  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,Java相关内容,Java焦点新闻
  • Hibernate 3新增XML关系持久性介绍
  • 深入研究Servlet线程安全性问题
  • 基于WebSphere MQ的收发消息程序
  • Java压缩文件/目录成ZIP包最新技巧
  • Eclipse插件开发之添加简单的GUI元素
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,JavaAdvertisement